Você está na página 1de 14

EAD

Servlets

1. OBJETIVOS
Introduzir a plataforma Java no desenvolvimento de Aplicaes Web.
Construir Aplicaes Web do tipo Servlets.

2. CONTEDOS
Arquitetura e ciclo de vida dos Servlets.
Construindo e distribuindo aplicaes com Servlets.
Processamento de formulrios.

3. ORIENTAO PARA O ESTUDO DA UNIDADE


Antes de iniciar o estudo desta unidade, importante que voc leia as orientaes a se-
guir:
1) A compreenso e apreenso do novo contedo, sua significao, interao e a cone-
xo e acomodao em relao ao que j conhecido pelo aluno, pode ser facilitada
na EAD, que presume auto-estudo. Nesse contexto, as estratgias de elaborao, tais
como, reescrever, resumir, criar analogias, tomar notas que ultrapassem a simples
repetio, criar e responder perguntas sobre o material a ser aprendido podem poten-
cializar a aprendizagem. Pense nisso...
42 Desenvolvimento de Aplicaes Web com Java

4. INTRODUO
A Unidade 2 representou uma oportunidade para aprender as linguagens de marcao
HTML e XHTML, bem como para estudar os conceitos de Folha de Estilo em Cascata.
Nesta unidade, voc aprender como desenvolver Aplicaes Web utilizando a tecnologia
Java Servlets. Para tanto, sero apresentados os aspectos principais a respeito da arquitetura e
do ciclo de vida de uma Aplicao utilizando Servlet.
Alm disso, voc estudar como realizar o processamento de requisies de formulrios
Web por meio de Servlets, alm de construir uma Aplicao completa utilizando a tecnologia.
Bom estudo!

5. ARQUITETURA E CICLO DE VIDA


Para iniciarmos nosso estudo sobre Servlets devemos entender o que eles so e o que eles
fazem.
Um Servlet um componente de software, executado do lado do servidor (server-side),
com a capacidade de processar requisies dos clientes dinamicamente. Embora os Servlets
possam responder a qualquer tipo de requisio (independente do protocolo), eles so comu-
mente utilizados em Aplicaes Web (utilizando protocolo HTTP).
As aplicaes desenvolvidas utilizando Servlets executam tarefas, em nome do cliente, no
Servidor Web. Essas tarefas podem ser, por exemplo, a execuo de outros Servlets ou a cha-
mada de uma pgina JSP para produo de respostas ao cliente. Um servidor que executa um
Servlet denominado Servlet Container ou Servlet Engine:

Para construo de um Servlet preciso implementar a interface javax.servlet.Servlet.


Essa interface contm os mtodos necessrios para que os containers (Servidores Web) aces-
sem os recursos fornecidos pelo Servlet.
Essa interface permite o controle do ciclo de vida do Servlet:
U3 - Servlets 43

A primeira fase do ciclo de vida de um Servlet a inicializao, a qual responsvel pela


alocao dos recursos que sero disponibilizados pelo Servlet. Para isso, o container chama o
mtodo init().
Todas as interaes entre cliente e servidor ocorridas durante o ciclo de vida do Servlet,
so processadas pelo mtodo service(). Esse mtodo recebe cada uma das requisies, determi-
na o seu tipo e dispara o mtodo apropriado para atender a solicitao.
Cada requisio tratada separadamente em um thread.
Assim, quando um Servlet precisa ser removido, ele destrudo por meio do mtodo des-
troy(). Esse mtodo libera os recursos alocados pelo Servlet.

6. ESTRUTURA BSICA
Para entendermos perfeitamente o funcionamento de um Servlet, vamos estudar passo a
passo como escrever, distribuir e executar um Servlet. Para isso, no utilizaremos nenhum tipo
de ambiente de desenvolvimento.
Vamos comear:
a) 1 passo criao de uma estrutura de diretrios para armazenamento do cdigo
fonte. Desse modo, crie a seguinte estrutura de diretrios:

b) 2 passo abra o editor de texto de sua preferncia e escreva o cdigo fonte a seguir.
Salve o arquivo na pasta src com o nome de OlaMundoServlet.java. Neste exemplo,
criaremos um Servlet do tipo HttpServlet que processa requisies do tipo GET:

1 import javax.servlet.*;
2 import javax.servlet.http.*;
3 import java.io.*;
4
5 public class OlaMundoServlet extends HttpServlet{
6
7 public void doGet(HttpServletRequest request,

Claretiano - Centro Universitrio


44 Desenvolvimento de Aplicaes Web com Java

8 HttpServletResponse response)
9 throws IOException{
10
11 PrintWriter out = response.getWriter();
12 out.println(<html> +
13 <body> +
14 <p> +
15 Ol Mundo! +
16 </p> +
17 </body> +
18 </html>);
19 }
20 }

c) 3 passo para distribuio dos Servlets necessrio que seja criado um Deployment
Descriptor (DD) com o nome de web.xml. Este arquivo contm todas as especifica-
es da Aplicao e ser utilizado pelo Servidor Web (Apache Tomcat) para execuo
da Aplicao.
O arquivo criado (web.xml) dever ser armazenado na pasta etc:

1 <web-app xmlns= http://java.sun.com/xml/ns/j2ee


2 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
3 xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee
4 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
5 version=2.4>
6
7 <servlet>
8 <servlet-name>
9 olamundo
10 </servlet-name>
11 <servlet-class>
12 OlaMundoServlet
13 </servlet-class>
14 </servlet>
15
16 <servlet-mapping>
17 <servlet-name>olamundo</servlet-name>
18 <url-pattern>/olamundo</url-pattern>
19 </servlet-mapping>
20
21 </web-app>

d) 4 passo: vamos agora compilar o cdigo fonte OlaMundoServlet.java. Para isso, den-
tro do diretrio projOlaMundo, digite o comando a seguir:
javac c classpath c:\Arquivos de programas\Apache Software Foundation\Tomcat 6.0\
lib\servlet-api.jar d classes src/OlaMundoServlet.java
U3 - Servlets 45

O arquivo compilado (.class) gerado no diretrio classes com o nome de OlaMundoSer-


vlet.class
e) 5 passo: o ltimo passo distribuir a Aplicao utilizando o Apache Tomcat. Para tan-
to, crie a seguinte estrutura de diretrios dentro da pasta Tomcat/webapps:

A instalao padro da verso 6.0 do Apache Tomcat utiliza o seguinte caminho: C:\Arqui-
vos de programas\Apache Software Foundation\Tomcat 6.0\webapps.
f) 6 passo: copie o arquivo web.xml para a pasta WEB-INF dentro do diretrio da Apli-
cao appOlaMundo.
g) 7 passo: copie o arquivo OlaMundoServlet.class para dentro da pasta classes do
diretrio WEB-INF.
h) 8 passo: finalmente, vamos testar a Aplicao! Inicie o Tomcat no Menu Iniciar > Pro-
gramas > Apache Tomcat > Configure Tomcat e clique no boto start.
i) 9 passo: abra o navegador e digite o seguinte endereo: http://localhost:8080/ap-
pOlaMundo/olamundo. Ser exibido:

7. PROCESSAMENTO DE FORMULRIOS
Como aprendemos na unidade anterior, os navegadores podem enviar informaes para o
Servidor Web por meio dos formulrios. Essa , portanto, a principal maneira de interao entre
os usurios e as aplicaes no servidor.
Aprendemos, tambm, que possvel enviar solicitaes por meio do mtodo GET, na
qual os dados so passados diretamente na URL do navegador, e pelo mtodo POST, em que os
dados no so visveis pelo usurio.
Agora, vamos estudar como fazer o processamento de formulrios, tanto por GET quanto
por POST, por meio de Java Servlets.

Claretiano - Centro Universitrio


46 Desenvolvimento de Aplicaes Web com Java

Para ilustrar, vamos criar uma Aplicao capaz de realizar uma Pesquisa sobre a inteno
de voto dos eleitores.
Inicialmente, crie um arquivo XHTM contendo um formulrio para escolha da opo de
voto do usurio.
Salve esse arquivo com o nome de index.html:

1 <?xml version=1.0 encoding=ISO-8859-1 ?>


<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.
2
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
3 <html xmlns=http://www.w3.org/1999/xhtml>
4 <head>
5 <meta http-equiv=Content-Type content=text/html; charset=ISO-8859-1 />
6 <title>Pesquisa de Inteno de Voto das Eleies</title>
7 </head>
8 <body>
9 <h1> Pesquisa : Eleies </h1>
10 <h3> Selecione o candidato desejado e clique no boto votar. </h3>
11 <form name=frmPesquisa action=/appPesquisa/votacao method=get>
12
13 <fieldset>
14 <input name=Candidato type=radio value=1 />
15 Antnio das Coxinhas <br/>
16
17 <input name=Candidato type=radio value=2 />
18 Joo da Silva <br/>
19 <input name=Candidato type=radio value=3 />
20 Z da Padaria <br/>
21 </fieldset>
23
24 <input type=submit value=votar />
25 </form>
26 </body>

U3 - Servlets 47

Vamos, agora, criar um Servlet como o nome de VotacaoServlet.java para processar as


escolhas do usurios:

1 import javax.servlet.*;
2 import javax.servlet.http.*;
3 import java.io.*;
4
5 public class VotacaoServlet extends HttpServlet{
6 private int cand1,cand2,cand3;
7
8 public void init(ServletConfig config)
9 throws ServletException{

10
super.init(config);

11
cand1 = cand2 = cand3 = 0; // total de votos
12 }
13
14 public void destroy(){
15 }
16
17 public void doGet(HttpServletRequest req, HttpServletResponse resp)
18 throws ServletException, IOException{
19
20 int voto = Integer.parseInt( req.getParameter( Candidato ));
21
22 if (voto == 1) cand1++; // Antonio das Coxinhas
23 else if (voto == 2) cand2++; // Joao da Silva
24 else if (voto == 3) cand3++; // Z da Padaria
25
26 PrintWriter out = resp.getWriter();
27
28 resp.setContentType( text/html; charset=iso-8859-1 );
29 out.println(<?xml version = \1.0\?>);
30 out.printf(%s%s%s , <!DOCTYPE html PUBLIC ,
31 \-//W3C//DTD XHTML 1.0 Strict//EN\,
32 \http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\>\n );
33 out.println(<html xmlns = \http://www.w3.org/1999/xhtml\> );
34 out.println(<head> );
35 out.println(<title> Resultado da Pesquisa </title>);
36 out.println(</head> );
37 out.println(<body> +
38 <h1>Resultado Parcial da Pesquisa </h1>+
39 <h2>Antnio das Coxinhas + cand1 + votos</h2> +
40 <h2>Joo da Silva + cand2 + votos</h2> +
41 <h2>Z da Padaria + cand3 + votos</h2> +
42 <a href=index.html> Voltar a pgina da pesquisa </a>+
43 </body>);
44 out.println(</html>);
45 out.close();
46 }
47 }

Claretiano - Centro Universitrio


48 Desenvolvimento de Aplicaes Web com Java

Observe:

Neste exemplo utilizamos o mtodo init() para inicializar os contadores responsveis pela
contagem de votos de cada candidato. Podemos, com isso, garantir a contabilizao dos votos
de maneira segura.
O mtodo doGet() responsvel pelo tratamento e processamento das solicitaes en-
viadas pelo mtodo GET. No se esquea de que no formulrio de interao com o usurio a
propriedade action foi configurada como get.
Na linha 20, utilizamos o mtodo getParameter para receber a opo selecionada pelo
usurio. Nesse caso, voc pode notar que o nmero do candidato escolhido passado para o
Servlet diretamente na URL.
Por exemplo, para o candidato Joo da Silva temos: <http://localhost:8080/appPesquisa/
votacao?Candidato=2>.

Na linha 28, especificamos como ser a resposta para o usurio por meio do mto-
do setContentType. Nesse caso, o contedo ser text/html e ser utilizada a propriedade
charset=iso-8859-1 para permitir acentuao.
O documento enviado para o cliente segue o padro XHTML especificado pela W3C.
Para distribuio da Aplicao o Deployment Descriptor (web.xml) foi definido como se
segue:

1 <web-app xmlns= http://java.sun.com/xml/ns/j2ee


2 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
3 xsi:schemaLocation=http://java.sun.com/xml/ns/j2ee
4 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
5 version=2.4>
6
7 <servlet>
8 <servlet-name>
9 votacao
10 </servlet-name>
11 <servlet-class>
U3 - Servlets 49

12 VotacaoServlet
13 </servlet-class>
14 </servlet>
15
16 <servlet-mapping>
17 <servlet-name>votacao</servlet-name>
18 <url-pattern>/votacao</url-pattern>
19 </servlet-mapping>
20
21 </web-app>

O processamento de informaes dessa Aplicao pode ser facilmente convertido de GET


para o mtodo POST:
a) No arquivo index.html, troque a propriedade action, que est configurada como get,
para post.
b) No cdigo fonte do Servlet, arquivo VotacaoServlet.java, altere o mtodo
public void doGet para public void doPost.
c) Compile a Aplicao e reinicialize o servidor.
d) Pronto! Sua Aplicao j est processando o formulrio pelo mtodo post.
Veja que na URL no temos mais a opo selecionada pelo usurio:

8. CONSTRUINDO UMA APLICAO WEB COM SERVLETS E NETBEANS


Para consolidarmos nosso aprendizado sobre Servlets vamos construir uma Aplicao
completa utilizando a tecnologia. Essa Aplicao ser um conversor de moedas, com a capacida-
de de realizar as seguintes converses:
a) Real para dlar.
b) Real para euro.
c) Dlar para euro.
d) Dlar para real.
e) Euro para dlar.
f) Euro para real.

Claretiano - Centro Universitrio


50 Desenvolvimento de Aplicaes Web com Java

Neste exemplo, vamos utilizar o ambiente de desenvolvimento NetBeans.


Inicialmente, precisamos criar uma nova Aplicao. Para tanto, clique no menu Arquivo e
selecione a opo Novo Projeto.
Na tela Novo Projeto, selecione a categoria Web e do lado esquerdo (Projeto) escolha a
opo Aplicao Web e clique no boto prximo.
Defina o nome do projeto como appConversorMoedas e clique no boto prximo.
Nessa tela, voc poder selecionar qual Servidor Web ser utilizado para distribuio e
execuo do projeto. Selecione o Servidor Tomcat 6 e clique no boto finalizar.

Ateno!
Caso seja necessrio voc poder adicionar um novo servidor clicando no boto adicionar.

Ento, ser criada a estrutura do projeto:

Precisamos, agora, adicionar nosso Servlet ao projeto. Para isso, clique com o boto direito
em Pacotes de cdigo fonte, selecione a opo Novo > Servlet...
Defina o nome do Servlet como ConversaoMoedaServlet e na opo pacote especifique
com.conversor, em seguida clique no boto prximo.
O ambiente NetBeans configura automaticamente o Deployment Descriptor, ou seja, no
precisaremos editar o arquivo web.xml. Note que o caminho para utilizao do Servlet tambm
foi automaticamente definido como /ConversorMoedaServlet.
Agora, clique no boto finalizar.
Observe que uma estrutura bsica para seu novo Servlet foi definida e os seguintes mto-
dos foram especificados:
Protected void processRequest: responsvel pelo tratamento das solicitaes enviadas
por GET ou POST.
Protected void doGet e protected void doPost: ambos os mtodos fazem uma refern-
cia ao mtodo processRequest. Nesse caso, podemos tratar os dois tipos de solicitao
pelo mtodo processRequest.
Public String getServletInfo (): voc pode utilizar para descrever sucintamente as fun-
cionalidades do seu Servlet.
Agora, criaremos um formulrio para interagir com o usurio, no qual ele poder escolher
qual tipo de converso de moeda deseja.
U3 - Servlets 51

Veja que o NetBeans criou um arquivo com o nome de index.jsp. nesse arquivo que
vamos incluir nosso formulrio de converso:

1 <form action=/appConversorMoeda/ConversorMoedaServlet method=post>


2 <h3>
3 Converter o valor de
4 <input type=text name=txtValor value= />
5 </h3>
6 <h3> Da moeda
7 <select name=lstDe>
8 <option value=1 selected>Real</option>
9 <option value=2>Dlar</option>
10 <option value=3>Euro</option>
11 </select>
12 </h3>
13 <h3> Para a moeda
14 <select name=lstPara>
15 <option value=1>Real</option>
16 <option value=2 selected>Dlar</option>
17 <option value=3>Euro</option>
18 </select>
19 </h3>
20 <input type=submit value=converter name=btnConverter />
21 </form>

No arquivo ConversaoMoedaServlet.java, o mtodo processRequest responsvel pelo


tratamento das informaes enviadas por meio do formulrio. Este mtodo capaz de tratar
requisies via get ou post, sendo necessria apenas a alterao no formulrio.

protected void processRequest(HttpServletRequest request,


1
HttpServletResponse response)
2 throws ServletException, IOException{
3
4 String strValor = request.getParameter(txtValor);

Claretiano - Centro Universitrio


52 Desenvolvimento de Aplicaes Web com Java

5 String strDe = request.getParameter(lstDe);


6 String strPara = request.getParameter(lstPara);
7
8 String resultado = Converter(strValor, strDe, strPara);
9
10 response.setContentType(text/html;charset=iso-8859-1);
11 PrintWriter out = response.getWriter();
12 try {
13 out.println(<html>);
14 out.println(<head><title>Conversor Moeda </title> </head>);
15 out.println(<body>);
16 out.println(<h1> Resultado da Converso </h1>);
17 out.println(resultado);
18 out.println(<br/>);
19 out.println(<a href=index.jsp>Voltar ao conversor </a>);
20 out.println(</body>);
21 out.println(</html>);
22 } finally {
23 out.close();
24 }
25 }

Como voc pde notar, as linhas quatro, cinco e seis so responsveis pelo recebimento
das informaes enviadas pelo formulrio, na qual os parmetros (txtValor, lstDe, lstPara) so os
nomes dos componentes utilizados no formulrio.
Um mtodo foi criado para a converso das moedas, com o nome de Converter:

1 protected String Converter(String strValor, String strDe, String strPara){


2
3 double vlDolar = 2.31; // cotacao do dolar
4 double vlEuro = 3.14; // cotacao do euro
5
6 DecimalFormat df = new DecimalFormat(0.00);
7 String saida = ;
8 strValor = strValor.replace(,,.);
9 //conversao dos dados
10 double valor = Double.parseDouble(strValor);
11 int moedaDe = Integer.parseInt(strDe);
12 int moedaPara = Integer.parseInt(strPara);
13
14 switch(moedaDe){
15 case 1:
16 if ( moedaPara == 1)
17 saida = Escolha moedas diferentes na converso.;
18 else if (moedaPara == 2){
19 saida = df.format(valor) + Real = ;
20 saida += df.format((valor / vlDolar)) + Dlar ;
21 }
22 else if (moedaPara == 3){
23 saida = df.format(valor) + Real = ;
U3 - Servlets 53

24 saida += df.format((valor / vlEuro)) + Euro ;


25 }
26 break;
27 case 2:
28 if ( moedaPara == 1){
29 saida = df.format(valor) + Dlar = ;
30 saida += df.format((valor * vlDolar)) + Real ;
31 }
32 else if (moedaPara == 2){
33 saida = Escolha moedas diferentes na converso.;
34 }
35 else if (moedaPara == 3){
36 saida = df.format(valor) + Dlar = ;
37 saida += df.format(((valor*vlDolar)/vlEuro)) + Euro ;
38 }
39 break;
40 case 3:
41 if ( moedaPara == 1){
42 saida = df.format(valor) + Euro = ;
43 saida += df.format((valor * vlEuro)) + Real ;
44 }
45 else if (moedaPara == 2){
46 saida = df.format(valor) + Euro = ;
47 saida += df.format(((valor*vlEuro)/vlDolar)) + Dlar ;
48 }
49 else if (moedaPara == 3){
50 saida = Escolha moedas diferentes na converso.;
51 }
52 break;
53 }
54 return saida;
55 }

Clique no boto executar (F9) para visualizar o Servlet criado em funcionamento.

9. QUESTES AUTOAVALIATIVAS
Vamos autoavaliar nossa aprendizagem, respondendo:
1) O que so Servlets?

2) Quais programas so necessrios para o perfeito funcionamento dos Servlets?

3) Quais classes Java so necessrias para desenvolvimento de Servlets?

4) O que faz o mtodo doGet?

5) O que faz o mtodo doPost?

6) Em quais conceitos eu preciso aprofundar?

Claretiano - Centro Universitrio


54 Desenvolvimento de Aplicaes Web com Java

10. CONSIDERAES
Nesta unidade, voc aprendeu os principais conceitos a respeito da tecnologia Java Ser-
vlet. Alm disso, conhecemos mtodos para processamento de formulrios utilizando GET e
POST.
Finalmente, voc construiu uma Aplicao completa utilizando Servlets no ambiente de
desenvolvimento NetBeans.
Na prxima unidade, vamos estudar o JavaServer Pages (JSP). Esperamos por voc!

11. E-REFERNCIAS
J2EE Sun Developer Network. Homepage. Disponvel em: <http://java.sun.com/javaee/>. Acesso em: 9 dez. 2013.
SERVLETS - Sun Developer Network. Products. Disponvel em: <http://java.sun.com/products/jsp/>. Acesso em: 9 dez. 2013.
______. Servlet. Disponvel em: <http://java.sun.com/products/servlet/>. Acesso em: 9 dez. 2013.
SUN 2008. Servlets. Disponvel em: <http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html>. Acesso em: 9 dez. 2013.

12. REFERNCIAS BIBLIOGRFICAS


DEITEL, H. M.; DEITEL, P. J. Java como programar. 6. ed. So Paulo: Prentice Hall, 2005.
FRANKLINT, K. Java EE 5: guia prtico scriptlets, servlets, javabeans. 2. ed. So Paulo: Erika, 2006.
GONALVEZ, E. Desenvolvendo Aplicaes web com JSP, Servlets, JavaServer Faces. Rio de Janeiro: Cincia Moderna, 2007.

Você também pode gostar