Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade...
Transcript of Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade...
42
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Na unidade C, nós estudamos a tecnologia JSP (JavaServer Pages) e como vimos ela permite implementar pá-
ginas dinâmicas na web. Nesta unidade, nós estudaremos Java Servlets, que são duas tecnologias intimamente
relacionadas.
O objetivo desta unidade é instrumentalizá-lo(a) para:
• Aprender os conceitos da tecnologia Servlets;• Implementar páginas dinâmicas com a tecnologia Servlets;
IntroduçãoNa unidade anterior, você aprendeu como utilizar JSP para construir aplicativos da Web. As páginas JSP especi-
ficam o código estático de HTML e as informações dinâmicas que o usuário do aplicativo Web vê no navegador.
Também fornece uma conexão para JavaBeans que executam comandos.
Os Servlets Java são mecanismos alternativos para construir aplicativos Web. Um servlet é um programa Java que
executa cálculos, sendo que partes desses cálculos são geração de código HTML. Como já comentado, Servlets e
JSP são intimamente ligados, onde na verdade, cada página JSP é automaticamente traduzida para um servlet.
Como você deve recordar das disciplinas de Redes de Computadores, o mecanismo TCP/IP pode estabelecer uma
conexão de internet entre duas portas de dois computadores, de forma que esses possam trocar dados. Cada
aplicativo internet possui um protocolo diferente. O HTTP (Hypertext Transfer Protocol) é o protocolo que define
a comunicação entre navegadores e Servidores da Web.
O protocolo HTTP define comandos como GET e POST que fornecem entradas aos programas no lado do ser-
vidor. A sintaxe do GET é mais simples, mas somente pode ser utilizada para entradas curtas. Por exemplo, o
comando GET que solicita informações de um servidor da Web e o servidor retorna o item solicitado, que pode
ser uma página da Web, uma imagem ou outros dados.
Por que devemos relembrar isto ? Na verdade, ao escrever um servlet, você fornece uma classe que estende a
classe HttpServlet que implementa um ou os dois métodos que implementam os comandos GET e POST (doGet
e doPost) dependendo se você quer que o seu servlet trate solicitações GET, solicitações POST ou ambas. Porém
podemos implementar os outros comandos HTTP.
O papel de um servlet é:
• receber uma requisição HTTP de um cliente (navegador);• processá-la; e• enviar uma resposta de volta ao cliente.
Os servlets são controlados pelo container Web que possui o seguinte ciclo de vida:
1. carrega a classe Servlet2. instância o servlet3. o método init() é chamado
• chamado uma única vez enquanto o servlet existir4. o método service() é chamado
• onde o servlet “gasta” mais tempo enquanto existir
SERVLETS
UNIDADE D
43
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
• trata as requisições do client como doGet() e doPost()5. o método destroy() é chamado
• contêm códigos de finalização do servlet• chamado uma única vez
Muitas vezes nós não alteraremos os método init(), service() e destroy(), porém caso seja necessário poderemos
redefini-los. Os doGet() e doPost() são sempre redefinidos.
Primeiro exemplo de um ServletNeste nosso primeiro exemplo, processaremos apenas as solicitações GET. Na verdade não enviaremos informa-
ções de solicitações, o servlet apenas obterá a hora atual do servidor, criará um documento HTML que contém
esta informação e enviará de volta ao navegador Web.
O primeiro exemplo de servlet é apresentado no código a seguir:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
package ifsul.tsiad.exemplosServlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; public class DataServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // pega a informação da data String agora = new Date().toString(); // especifica que o conteúdo será HTML response.setContentType("text/html"); // imprime as informações formatadas PrintWriter out = response.getWriter(); String title = "Data Servlet"; out.println("<html><head><title>"); out.println(title); out.println("</title></head><body><h1>"); out.print(title); out.println("</h1><p>A data atual é: "); out.println(agora); out.println("</p></body></html>"); out.close(); } }
O que nós devemos fazer é redefinir o método doGet(). No código podemos utilizar requisições e respostas. O
parâmetro request contém detalhes sobre solicitações, porém não iremos utilizar neste exemplo. Neste servlet
utilizaremos o parâmetro response que permite especificar o que enviar de volta ao navegador. Para enviar um
documento HTML (o mais comum) você deve seguir os seguintes passos:
1. configure o tipo de conteúdo para HTML (linha 21);
44
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
2. obtenha um PrinterWriter para coletar o documento HTML que deseja ser devolvido ao navegador (linha 24);3. defina o que deseja colocar no documento HTML (inclusive com as tags HTML);4. feche o PrinterWriter.
Observe que o código possui as marcas HTML geradas no próprio código Java e também as informações adquiri-
das (informações de data/hora – linha 18 e 32).
A estrutura básica de um servlet é simples, basta obter as informações de um usuário (que não contempla neste
exemplo) e retornar um código HTML para exibir a resposta no navegador.
Para instalação de um servlet é um pouco mais complicado do que instalar uma página JSP. Você necessita es-
crever um descritor de instalação (que é um arquivo XML – web.xml). No descritor de instalação, você atribui o
nome do seu servlet, que pode ter um nome diferente da classe. Você necessita também especificar as informa-
ções de como localizar a classe do servlet e quais URLs mapeiam para o servlet.
O arquivo web.xml para o código da servlet é apresentado a seguir. O arquivo contém as seguintes informações:
• nome do seu servlet: Data (linha 12);• como localizar a classe do servlet: localizar a classe DataServlet do pacote ifsul.tsiad.exemplosServlet (linha 8-9);• URLs mapeiam para o servlet: são em número de duas (/dataAtual e /DataServlet).
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <servlet> <servlet-name>Data</servlet-name> <servlet-class>ifsul.tsiad.exemplosServlet.DataServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Data</servlet-name> <url-pattern>/dataAtual</url-pattern> <url-pattern>/DataServlet</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> </web-app>
Contudo como veremos a seguir o NetBeans configura este arquivo de forma fácil e além disso podemos alterá-
-lo depois.
Para criar um servlet no NetBeans, você deve seguir os seguintes procedimento descritos a seguir.
Criar um servlet no NetBeans:• Após criar um projeto Web no NetBeans;• Selecione o menu “Arquivo” | “Novo Arquivo” (Figura D.1);• Escolha a opção “Servlet”;• Você também pode clicar com o botão direito do mouse em cima do projeto e escolha a opção “Novo” | “Servlet”
(Figura D.2).
45
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Criando um servlet no NetBeans:• Coloque o nome da servlet e o nome do pacote (Figura D.3);
46
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Criando um servlet no NetBeans:• Marque o caixa de seleção para que as informações sejam inseridas no arquivo web.xml (preenche com informações
default) (Figura D.3);
Contudo o NetBeans possui a facilidade de re-configurar este arquivo XML. O NetBeans também permite alterar
estes parâmetros por interface gráfica (basta clicar no arquivo web.xml no diretório WEB-INF (destacado na Fi-
gura 5). No arquivo web.xml, você é livre para escolher quaisquer nomes que desejar para o sufixo da URL e do
servlet. Contudo você pode dar o mesmo nome do arquivo de classe.
O arquivo web.xml deve ser colocado no sub-diretório WEB-INF do diretório do seu aplicativo da Web. As classes
servlets são colocadas no diretório classes. A Figura D.6 apresenta a localização dos arquivos em aplicativos Web
utilizando servlets.
47
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Fonte: http://download.oracle.com/javaee/5/tutorial/doc
Para executar (carregar) o servlet é o nome do aplicativo seguido pelo sufixo URL. Como:
http://localhost:8084/Projeto_Servlet_1/DataServlet
A execução do servlet apresentado anteriormente resulta na página Web da Figura
Obtendo valores com ServletsO primeiro servlet apenas apresentava uma página Web com uma informação. Neste servlet nós utilizaremos
o parâmetro request do método doPost() para obter o valor que o usuário forneceu. Esse parâmetro é idêntico
à variável de solicitação de uma página JSP. Você utiliza o método getParameter() para obter um parâmetro de
solicitação, como por exemplo:
String nome = request.getParameter(“nome”);
O código a seguir apresenta o código da servlet que obtêm dados de um formulário HTML. Esta servlet apresenta
as seguintes características:
• A leitura e resposta são implementadas no método doPost() e não no método doGet(), ou seja, esta servlet não irá suportar requisições GET;
48
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
• Os dados são obtidos e impressos para a saída na mesma linha (linhas 27-29).
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
package ifsul.tsiad.exemplosServlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Exemplo2Servlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("Este servlet não suporta requisições GET."); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("Os dados digitados são: <BR>"); out.print("Nome: " + request.getParameter("nome") + "<BR>"); out.print("Idade: " + request.getParameter("idade") + "<BR>"); out.print("Cidade: " + request.getParameter("cidade") + "<BR>"); out.print("Estado: " + request.getParameter("estado") + "<BR>"); out.print("Muito obrigado!!!"); } }
Para obter os dados, será necessário construir um formulário HMTL (index.html) apresentado a seguir. O relacio-
namento do formulário HTML com o Servlet (Exemplo2Servlet) é realizado na linha 6, onde também é definido
o uso do comando POST.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
<html> <head> <title>Obtendo dados para um Servlet</title> </head> <body> <form action="Exemplo2Servlet" method="POST"> <h2> Entre com os dados pessoais:</h2> <p>Nome: <input type="text" name="nome"/> </p> <p>Idade: <input type="text" name="idade"/> </p> <p>Cidade: <input type="text" name="cidade"/> </p> <p>Estado: <input type="text" name="estado"/> </p> <p> <input type="submit" value="Submeter"/> </p> </form> </body> </html>
• Para executar o servlet você deve:• Iniciar o conteiner Java (Tomcat);• Acessar o endereço:
49
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
http://localhost:8084/Projeto_Servlet_2/
ou pelo endereço
http://localhost:8084/Projeto_Servlet_2/index.html
(você irá obter a tela da Figura D.8);
• Após a submissão dos dados será obtida a tela da Figura D.9.
Se você acessar o servlet pelo endereço
http://localhost:8084/Projeto_Servlet_2/Exemplo2Servlet
será executada uma requisição GET e como resposta será obtido o conteúdo implementado no método doGet().
Para acessar pelo método POST deverá ser acessado o formulário HTML (endereços descritos anteriormente).
50
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Considerações Finais sobre ServletsQuando você examina o código de um servlet, você notará que não fica claro determinar qual é a saída deste
servlet. Deve-se analisar cuidadosamente o que é impresso no fluxo out. Ao contrário, a página JSP permite
visualizar com facilidade qual será a saída. A tecnologia JavaServer Pages também incentiva a separação entre
apresentação e computação, muito mais que os servlets.
Desta forma, é recomendado a utilização de JavaServer Pages como principal tecnologia para desenvolvimento
Web. Porém os servlets também são utilizados, por exemplo quando o resultado da consulta na Web não é um
HTML como por exemplo, imagens ou um arquivo.
Além disso, quando você escreve uma página JSP, a máquina JSP traduz a página para um servlet quando é solici-
tada pela primeira vez, ou quando for alterada desde a última solicitação. Você deve ter percebido que as vezes
demora um pouco para uma página JSP enviar uma resposta ao navegador (o atraso é causado pelo processo de
tradução). Este é a visão geral do processo de compilação JSP. A intenção foi fornecer uma ideia global de como
o processo ocorre.
Nesta unidade, foram apresentados os principais conceitos de Servlets Java que são conceitos intimamente rela-
cionados com JSP e são mecanismos alternativos para construir aplicativos Web.
51
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
Atividade 4Prezado Aluno, as atividades da Unidade D (Servlets) são o desenvolvimento de duas aplicações Web que envol-
ve servlets. Desenvolva estas aplicações no NetBeans.
1. Desenvolva um servlet que leia o documento XML apresentado a seguir e apresente as informações em um HTML.
1. <?xml version=”1.0”>
2. <laboratorio>
3. <computador>
4. <modelo>Pentium 4</modelo>
5. <frequencia>3.0GHZ</frequencia>
6. <memoria>256 MB</memoria>
7. <hd>250GB</hd>
8. </computador>
9. <computador>
10. <modelo>Intel Dual Core</modelo>
11. <frequencia>1.8GHZ</frequencia>
12. <memoria>3GB</memoria>
13. <hd>500GB</hd>
14. </computador>
15. <computador>
16. <modelo>Phenom II X4</modelo>
17. <frequencia>3.0GHZ</frequencia>
18. <memoria>3GB</memoria>
19. <hd>500GB</hd>
20. </computador>
21. <computador>
22. <modelo> Celeron </modelo>
23. <frequencia>2.8GHZ </frequencia>
52
Sis
tem
a U
nive
rsid
ade
Abe
rta d
o B
rasi
l - U
AB
| I
F S
ul-r
io-g
rand
ense
Desenvolvimento de Aplicações Orientado a Objetos | Unidade D
24. <memoria>512MB </memoria>
25. <hd>250GB</hd>
26. </computador>
27. </laboratorio>
2. Desenvolver uma aplicação Web através da tecnologia servlets que:
• Realize o cadastro de pessoas que desejam concorrer a um bolão de loteria (o cadastro deverá conter nome, telefone e 5 números que podem ser jogados);
• Em cada bolão poderá ser cadastrado no máximo 5 pessoas (a cada cadastro a aplicação deve informar quantos pesso-as falta cadastrar para preencher o bolão);
• Quando chegar ao cadastro de 5 pessoas a aplicação deverá fornecer para o usuário o nome e telefone de cada pesso-as e a listagem de todos os jogos que deverão ser realizados.