11
42 Sistema Universidade Aberta do Brasil - UAB | IF Sul-rio-grandense 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 inmamente relacionadas. O objevo desta unidade é instrumentalizá-lo(a) para: Aprender os conceitos da tecnologia Servlets; Implementar páginas dinâmicas com a tecnologia Servlets; Introdução Na unidade anterior, você aprendeu como ulizar JSP para construir aplicavos da Web. As páginas JSP especi- ficam o código estáco de HTML e as informações dinâmicas que o usuário do aplicavo Web vê no navegador. Também fornece uma conexão para JavaBeans que executam comandos. Os Servlets Java são mecanismos alternavos para construir aplicavos 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 inmamente ligados, onde na verdade, cada página JSP é automacamente 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 aplicavo 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 ulizada 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 HpServlet 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 Servlet 2. instância o servlet 3. o método init() é chamado chamado uma única vez enquanto o servlet exisr 4. o método service() é chamado onde o servlet “gasta” mais tempo enquanto exisr SERVLETS UNIDADE D

Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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

Page 2: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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);

Page 3: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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).

Page 4: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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);

Page 5: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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.

Page 6: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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;

Page 7: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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:

Page 8: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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).

Page 9: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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.

Page 10: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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>

Page 11: Introduçãouab.ifsul.edu.br/tsiad/conteudo/modulo5/_pdf/dao_ud_1.pdf · 44 Sistema niversidade Aberta do rasil - A I Sul-rio-grandense esenvolvimento de Aplicaes Orientado a Objetos

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.