Programação Web com JSP, Servlets e J2EE

Programação Web com JSP, Servlets e J2EE

(Parte 1 de 8)

Programação Web com Jsp, Servlets e J2EE

André Temple CPqD Telecom & IT Solutions.

Rodrigo Fernandes de Mello

Departamento de Ciências da Computação

Instituto de Ciências Matemáticas e de Computação. Universidade de São Paulo

Danival Taffarel Calegari CPqD Telecom & IT Solutions.

Maurício Schiezaro CPqD Telecom & IT Solutions.

Copyright © 2004 – André Temple, Rodrigo Fernandes de Mello, Danival Taffarel Calegari e Maurício Schiezaro.

Este trabalho está licenciado sobre uma licença Creative Commons Atribuição-UsoNãoComercial-Compartilhamento pela mesma licença.

Para ver uma cópia desta licença visite http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Standford, California 94305, USA.

Prefácio

Este livro é dividido em duas partes. A primeira parte trata do desenvolvimento de aplicações Web utilizando, principalmente, Servlets. A segunda parte aborda o paradigma de desenvolvimento de aplicações distribuídas utilizando a tecnologia Enterprise Java Beans.

A primeira parte do livro aborda de forma consistente e didática o conteúdo relacionado a Servlets. Nesta abordagem é definido um histórico do desenvolvimento de aplicações Web, passando por CGIs e linguagens de script. Além dos tópicos relacionados a Servlets são abordados tópicos relacionados tais como Java Server Pages (JSP), Java Beans, Taglibs, modelo MVC, instalação de configuração de um Web Container para desenvolvimento, além de tópicos avançados tais como controle de pooling de conexões com banco de dados.

A segunda parte do livro aborda o paradigma de desenvolvimento de aplicações distribuídas, destacando a evolução das técnicas de desenvolvimento desde a programação estrutura até o atual uso de sistemas distribuídos. A tecnologia utilizada para prover distribuição é a plataforma J2EE (Java 2 Enterprise Edition). São detalhados os componentes e possibilidades que esta plataforma oferecem ao desenvolvedor.

O livro foi dividido em partes para oferecer um conteúdo mais abrangente e completar. A primeira parte trata da construção de interfaces e controles para interação com os clientes de uma aplicação Web. A segunda parte aprofunda nos aspectos de distribuição de um sistema, permitindo que este execute em diversos computadores, dividindo sua carga e, conseqüentemente, aumentando seu desempenho.

Parte I7
Usuário7
Capítulo 18
Introdução8
1.1 Colocar Nome do tópico?8
1.1 Comparando Servlets com CGIs10
1.2 O que são Servlets?1
1.3 O que são páginas JSP?12
Capítulo 214
Instalação e Configuração14
2.1 Colocar Nome do tópico?14
2.1 Instalação e configuração no Apache Tomcat15
2.2 Instalação e Configuração de uma Aplicação Web16
Capítulo 328
Servlets – características básicas28
3.1 Colocar Nome do tópico?28
3.2 O protocolo HTTP29
3.3 Hierarquia de um Servlet31
3.4 Ciclo de vida de um Servlet32
3.5 Inicialização3
3.6 A classe “ServletContext”39
3.7 Finalização4
3.8 Atendimento de Requisições46
3.9 Concorrência no atendimento de requisições48
3.10 Retornando informações sobre o Servlet52
Capítulo 454
Servlets – Geração da saída54
4.1 Geração de saída HTML simples54
4.2 Headers da resposta HTTP57
4.2 Geração de outros tipos de saídas62
4.3 Gerando conteúdo XML65
4.4 Status HTTP6

Sumário Desenvolvendo Interfaces e Controles de Interação com o 3

4.6 “Buffering” da resposta74
Capítulo 57
Servlets – Captura de parâmetros da requisição7
5.1 Informações sobre o servidor7
5.2 Informações sobre a requisição\:79
5.3 Formulários HTML e parâmetros da requisição\:85
5.4 Captura de parâmetros da requisição\:87
5.5 Headers da requisição HTTP90
5.6 Upload de arquivos92
5.7 Atributos da requisição95
Capítulo 696
Servlets – Cookies e Sessões96
6.1 Colocar Nome do tópico?96
6.1 Campos escondidos de formulários HTML97
6.2 Informações adicionais de caminho9
6.3 Cookies101
6.4 Gerenciamento de sessões106
Capítulo 7122
Páginas JSP122
7.1 Formatação do conteúdo da resposta com Servlets122
7.2 Formatação do conteúdo da resposta com páginas JSP
7.3 Funcionamento interno127
7.4 Ciclo de vida129
7.5 Elementos dinâmicos130
7.6 Diretivas130
7.7 Expressões133
7.8 Scriptlets134
7.9 Objetos implícitos136
7.10 Declarações139
7.1 Comentários140
7.12 JavaBeans141
7.13 Bibliotecas de Tags (Tag Libraries)145
Capítulo 8152
Modelo MVC152
8.1 Colocar Nome do tópico?152
8.1 Arquitetura básica153
8.2 Forward de requisições154
8.3 Atributos de requisições156
Capítulo 9162
Tópicos adicionais162
9.1 Arquivos WAR162
9.2 Autenticação HTTP163
9.3 Pools de conexões a base de dados166
Parte I178
Desenvolvimento de Aplicações Distribuídas Utilizando EJB
Capítulo 10179
Novas Técnicas de Desenvolvimento179
10.1 Desenvolvimento de Clássico de Aplicações179
10.2 Sistemas Distribuídos182
Distribuídos no Mercado192
10.4 Mercado Atual para Sistemas Distribuídos195
Capítulo 1197
J2EE e Enterprise JavaBeans197
1.1 O que é J2EE?197
1.2 Visão da plataforma198
1.3 Instalando o J2SDKEE200
1.4 O que são Enterprise JavaBeans?201
1.5 Para que servem e por que utilizá-los?201
1.6 Componentes EJB203
1.7 Classes e interfaces204
1.8 Acesso local e/ou remoto205
1.9 EJBObject e EJBHome207
1.10 Como construir, executar e acessar os componentes
Capítulo 12212
Session Beans212
12.1 O que são Session Beans?212
12.2 Quando usar um Session Bean?216
12.3 Session Bean Stateless216
12.4 Ciclo de vida - Session Bean Stateless218
Session Bean Stateful219
Ciclo de vida - Session Bean Stateful2
Capítulo 13223
Entity Beans223
13.1 O que são Entity Beans?223
13.3 Entity Bean Bean- Managed- Persistence224
13.4 Ciclo de vida – Entity Bean BMP228
13.5 Entity Bean Container- Managed- Persistence229
13.6 Ciclo de vida – Entity Bean CMP233
13.7 Relacionamento EJB Entity Bean CMP234
13.8 EJB-QL240
Capítulo 14244
Message- Driven Beans244
14.1 O que são Message-Driven Beans?244
14.2 Quando usar um Message-Driven Bean?246
14.3 Ciclo de vida - Message-Driven Bean247
14.4 O que é e para que serve o JMS?248
Capítulo 15256
Transações e Segurança256
15.1 Transações257
Segurança265
Capítulo 16281
Descobrindo Enterprise JavaBeans281
16.1 Qual servidor J2EE utilizar?281
282
16.3 Criando um Session Bean Stateless283
16.4 Criando um Session Bean Stateful287
16. 5 Criando um Entity Bean BMP292
16.6 Criando um Entity Bean CMP302
16.7 Criando um Message-Driven Bean306
16.8 Empacotando a aplicação309
16.9 Instalando a aplicação no servidor J2EE314
Apêndice A316
Deployment Descriptor316
A.1 O que é um deployment descriptor?316
A.2 Elementos do deployment descriptor ejb-jar.xml317
Apêndice B329
API Enterprise JavaBeans329
B.1 Interfaces329
B.2 Exceções336
Apêndice C339
Aplicação J2EE – Exemplo339

Parte I

Desenvolvendo Interfaces e Controles de Interação com o Usuário

Capítulo 1 Introdução

Introduzimos, nesse capítulo, a tecnologia de Servlets e Páginas JSP e mostramos algumas características que tornam essas tecnologias bastante atraentes para o desenvolvimento de aplicações na Web.

1.1 Aplicações na Web

Se um dia a Internet era composta, principalmente, de páginas estáticas com conteúdo institucional, hoje ela oferece uma infinidade de aplicações com conteúdo dinâmico e personalizado.

Diversas tecnologias possibilitaram essa revolução: seja para construir um simples site com conteúdo dinâmico ou para construir um complexo sistema de Business-To- Business, é necessária a utilização de ferramentas que possibilitem consultas a bancos de dados, integração com sistemas corporativos, entre outras inúmeras funcionalidades.

Dentre as diversas tecnologias disponíveis atualmente para o desenvolvimento dessa classe de aplicações, destaca-se a de Servlets e a de páginas JSP (Java Server Pages).

A utilização de Servlets e de páginas JSP oferece diversas vantagens em relação ao uso de outras tecnologias (como PHP, ASP e CGI). As principais vantagens são herdadas da própria linguagem Java:

Portabilidade: a aplicação desenvolvida pode ser implantada em diversas plataformas, como por exemplo Windows, Unix e Macintosh, sem que seja necessário modificar ou mesmo reconstruir a aplicação.

Facilidade de programação: a programação é orientada a objetos, simplificando o desenvolvimento de sistemas complexos. Além disso, a linguagem oferece algumas facilidades, como por exemplo o gerenciamento automático de memória (estruturas alocadas são automaticamente liberadas, sem que o desenvolvedor precise se preocupar em gerenciar esse processo).

Flexibilidade: o Java já se encontra bastante difundido, contando com uma enorme comunidade de desenvolvedores, ampla documentação e diversas bibliotecas e códigos prontos, dos quais o desenvolvedor pode usufruir.

Além dessas vantagens, a arquitetura de Servlets e páginas JSP possibilita alguns benefícios adicionais:

Escalabilidade: na maior parte dos servidores de aplicações modernos, é possível distribuir a carga de processamento de aplicações desenvolvidas em diversos servidores, sendo que servidores podem ser adicionados ou removidos de maneira a acompanhar o aumento ou decréscimo dessa carga de processamento.

Figura 1.1 – Exemplo de arquitetura distribuída com Servlets e Páginas JSP.

Eficiência: os Servlets carregados por um servidor persistem em sua memória até que ele seja finalizado. Assim, ao contrário de outras tecnologias, não são iniciados novos processos para atender cada requisição recebida; por outro lado, uma mesma estrutura alocada em memória pode ser utilizada no atendimento das diversas requisições que chegam a esse mesmo Servlet.

Recompilação automática: páginas JSP modificadas podem ser automaticamente recompiladas, de maneira que passem a incorporar imediatamente as alterações sem que seja necessário interromper o funcionamento da aplicação como um todo.

1.1 Comparando Servlets com CGIs

O CGI, ou Common Gateway Interface, surgiu como uma das primeiras tecnologias disponíveis para a geração de conteúdo dinâmico em servidores Web: o desenvolvedor implementa uma aplicação que deve ser executada a cada requisição recebida, sendo que o servidor Web passa para essa aplicação, através de variáveis de ambiente e entrada padrão, os parâmetros recebidos, e retorna a saída da aplicação como resposta da requisição.

Figura 1.2 – Funcionamento de um CGI.

Podemos usar o CGI para analisar algumas das vantagens em se utilizar Servlets.

Em primeiro lugar, há um grande ganho em performance na utilização de Servlets: ao invés de iniciar um novo processo a cada requisição recebida, um Servlet fica carregado em memória e atende as requisições recebidas através de novos “threads”.

Além disso, um Servlet pode tirar proveito dessa persistência para manter também em memória recursos que demandem grande processamento para serem inicializados. Um exemplo típico, para esse caso, é a manutenção de conexões com banco de dados: ao invés de inicializar uma nova conexão com o banco de dados a cada requisição recebida, um Servlet pode inicializar diversas conexões ao ser carregado, e simplesmente alocar uma conexão desse pool a cada requisição recebida (e retornar a conexão ao pool após o atendimento da requisição).

Além destes ganhos de performance, a utilização de um Servlet possibilita uma maneira mais padronizada e portável de se distribuir / implantar sua aplicação. Conforme explicado mais adiante no Capítulo 2 – Instalação e Configuração, o ambiente onde sua aplicação será implantada não precisa ser igual ao ambiente onde foi feito o desenvolvimento: seus Servlets podem ser “instalados” em qualquer ambiente onde haja um Servidor de Aplicações que implemente a especificação de Servlets.

Por fim, estaremos apresentando ao longo deste livro as diversas características e funcionalidades da tecnologia de Servlets que tornam o seu desenvolvimento muito mais simples, e o resultado, muito mais eficiente e robusto.

1.2 O que são Servlets?

Servlets são classes Java, desenvolvidas de acordo com uma estrutura bem definida, e que, quando instaladas junto a um Servidor que implemente um Servlet Container (um servidor que permita a execução de Servlets, muitas vezes chamado de Servidor de Aplicações Java), podem tratar requisições recebidas de clientes.

Um cenário típico de funcionamento de uma aplicação desenvolvida com Servlets é o seguinte:

Figura 1.3 – Exemplo de funcionamento de uma aplicação com Servlets.

Ao receber uma requisição, um Servlet pode capturar parâmetros desta requisição, efetuar qualquer processamento inerente a uma classe Java, e devolver uma página HTML por exemplo.

Exemplo de Servlet import java.io.*; import javax.servlet.http.*;

// Servlet simples que retorna página HTML com o endereço IP // do cliente que está fazendo o acesso public class RemoteIPServlet extends HttpServlet { public void doGet( HttpServletRequest p_request,

HttpServletResponse p_response) throws IOException {

PrintWriter l_pw = p_response.getWriter (); l_pw.println(“<HTML><BODY>”); l_pw.println(“O seu endereço IP é \”” + p_request.getRemoteAddr () + “\””);

(Parte 1 de 8)

Comentários