Sei sulla pagina 1di 73

Prof.

Ricardo Terra

Por que utilizar Servlets e JSP?


Muitos tm adotado esta estratgia de desenvolvimento (esto na moda) Existem diversas aplicaes GUI que so utilizadas por milhes de pessoas, porm essas aplicaes possuem diversos problemas de distribuio
Em uma aplicao web, voc no precisar se prender aos problemas de distribuio, pois sua aplicao funcionar em qualquer computador que possua um browser, independente do S.O., memria, processador, etc

Tpicos Especiais em Informtica III - Prof. R. Terra

Por que utilizar Servlets e JSP?


Nesta disciplina, vamos substituir as aplicaes GUI por aplicaes Web Uma aplicao web composta de tecnologia:
No lado do cliente: HTML, XML, CSS, JS, etc No lado do servidor: CGI, ASP, PHP, servlets, etc

Tpicos Especiais em Informtica III - Prof. R. Terra

Cliente e Servidor / HTTP e HTML


Quando um servidor responde a uma solicitao, ele geralmente envia algum tipo de contedo para o browser, para que esse possa exib-lo
O formato HTML o formato mais comum enviado como resposta para um cliente pelo Servidor, pois esse facilmente lido pelo browser no cliente

Tpicos Especiais em Informtica III - Prof. R. Terra

Cliente e Servidor / HTTP e HTML


A maioria das conversas que ocorre na web entre clientes e servidores so mantidas atravs do protocolo HTTP, que possibilita conversas de requisio e resposta O cliente envia uma requisio HTTP e o servidor retorna uma resposta HTTP
Enfim, se voc um servidor web voc fala HTTP

Portanto, uma conversao requisio/resposta

HTTP

uma

sequncia

de

Isto , o cliente pede uma coisa, o servidor responde, o cliente pede outra coisa, o servidor responde...

Tpicos Especiais em Informtica III - Prof. R. Terra

Cliente e Servidor / HTTP e HTML


Requisio e resposta:

Tpicos Especiais em Informtica III - Prof. R. Terra

Cliente e Servidor / HTTP e HTML


O HTTP roda no topo da arquitetura TCP/IP O HTTP um protocolo da camada de aplicao que tem caractersticas especficas para a web, mas ele depende de toda a arquitetura TCP/IP para garantir que tanto a solicitao e quanto a resposta sejam transmitidas entre o cliente e o servidor

Tpicos Especiais em Informtica III - Prof. R. Terra

Cliente e Servidor / HTTP e HTML


HTTP na camada de aplicao da arquitetura TCP/IP

Tpicos Especiais em Informtica III - Prof. R. Terra

Requisio e resposta
Principais elementos do fluxo de requisio:
mtodo HTTP endereo da pgina (URL) que est sendo acessada parmetros do formulrio

Principais elementos do fluxo de resposta:


cabealho
cdigo de status Mtodo HTTP tipo do contedo (texto, imagem, HTML...)

contedo (o texto, a imagem, o HTML...)

Tpicos Especiais em Informtica III - Prof. R. Terra

Requisio e resposta
Requisio HTTP
A primeira coisa que voc encontrar o nome do mtodo HTTP
O nome do mtodo informa ao servidor o tipo de solicitao que est sendo feita e como o resto da mensagem ser formatada.

O protocolo HTTP possui diversos mtodos, mas usaremos e aprenderemos os mais comuns: GET e POST

Tpicos Especiais em Informtica III - Prof. R. Terra

10

Requisio e resposta
Mtodo GET
o mtodo mais simples do HTTP e seu principal trabalho pedir um recurso
Pode ser qualquer tipo de recurso: uma pgina, uma imagem, um PDF, etc

O caminho at o recurso e quaisquer parmetros adicionados URL sero includos na prpria barra de endereos Podemos usar o GET para formulrios, porm com desvantagens:
O total de caracteres do GET limitado Os dados que voc envia utilizando HTTP GET so anexados URL, portanto, seja o que for que voc estiver transmitindo, ficar exposto

Tpicos Especiais em Informtica III - Prof. R. Terra

11

Requisio e resposta
Mtodo POST
um mtodo mais poderoso. um GET++. Com o POST, voc pode solicitar algo e, ao mesmo tempo, enviar os dados de um formulrio para o servidor Os dados a serem enviados ao servidor esto localizados na carga til (payload) da mensagem e podem ser bem extensos

Pacote IPv4

Por isto, o POST considerado mais seguro que o GET


Tpicos Especiais em Informtica III - Prof. R. Terra 12

Requisio e resposta
Enfim, para acesso a recursos utiliza-se GET e aplicaes que utilizam formulrios utiliza-se POST

Tpicos Especiais em Informtica III - Prof. R. Terra

13

Requisio e resposta
Resposta HTTP
uma resposta HTTP composta de um cabealho (header) e o corpo
o cabealho informa ao browser o mtodo que est sendo utilizado, se a solicitao obteve xito (cdigo) e o tipo de contedo est includo no corpo corpo possui o contedo (por exemplo, HTML) que o browser exibir

o cdigo pode ser:


1xx: Informativa: requisio recebida, processo em continuidade 2xx: Sucesso: a ao foi recebida, entendida e aceita com sucesso 3xx: Redirecionamento: ao futura ainda deve ser tomada para completar a requisio 4xx: Erro no cliente: requisio contm sintaxe incorreta ou no pode ser resolvida 5xx: Erro no servidor: O servidor falhou ao responder uma aparente requisio vlida

Tpicos Especiais em Informtica III - Prof. R. Terra

14

Pginas estticas x Pginas dinmicas


Servidores "amam" servir pginas estticas
Uma pgina esttica apenas um HTML que est armazenado no servidor. Quando o usurio pede a pgina, o servidor simplesmente busca a pgina e a envia do mesmo modo que est l. No processa ou dispende recursos para entreg-la ao cliente

Porm, s vezes voc precisa mais do que uma pgina esttica


Se voc precisa de pginas dinmicas (pginas criadas no momento da requisio, isto , no existiam antes da solicitao) e da capacidade de escrever/salvar dados no servidor (seja em arquivos ou em SGBDs), voc precisa de uma aplicao rodando no servidor Para isso, comearemos a ver aplicaes web usando Java EE

Tpicos Especiais em Informtica III - Prof. R. Terra

15

Primeiro Projeto Web


Para entendermos melhor como criar uma aplicao web, observe o material "Primeiro Projeto Web" que demostra como criar uma aplicao web completa Algumas consideraes:
O principal arquivo de uma aplicao web o Deployment Descriptor
(DD) Deployment Descriptor (descritor de implantao) um documento XML nico por aplicao chamado web.xml que fica abaixo do diretrio WEB-INF e que contm as informaes de como sua aplicao deve ser implantada

O Tomcat geralmente utiliza a porta 8080 para executar as aplicaes


Geralmente, quando a aplicao entra em produo executada na porta 80, que a porta do protocolo HTTP (o protocolo da Internet)

Tpicos Especiais em Informtica III - Prof. R. Terra

16

Mtodos Importantes Web


Uma aplicao web basicamente um servlet
Um servlet uma classe que estende HttpServlet

Os mtodos importantes de um servlet so:


doGet responsvel por tratar requisies GET doPost responsvel por tratar requisies POST

Quando criamos pelo wizard do Eclipse, a aplicao j registrada automaticamente no DD

Tpicos Especiais em Informtica III - Prof. R. Terra

17

Mtodos Importantes Web


Primeiramente devemos setar o tipo de contedo da resposta:
response.setContentType("text/html");

Para escrever no cliente devemos escrever na resposta:


PrintWriter out = response.getWriter();

Geralmente escrevemos todo o HTML:


out.print("<html><body>"); out.print("Agora: " + new Date()); out.print("</body></html>");

Mas sempre fechamos aps escrever:


out.close();
Tpicos Especiais em Informtica III - Prof. R. Terra 18

Mtodos Importantes Web


Existem alguns mtodos que so indispensveis para o desenvolvimento de servlets, pois so aqueles que manipulam os parmetros enviados por uma requisio:
public String getParameter(String nomeParam)
Retorna o valor string de um parmetro especfico
Exemplo: Pegando um nome, uma idade, um peso, uma profisso, uma cidade...

public String[] getParameterValues(String nomeParam)


Retorna o vetor de string de um parmetro especfico
Exemplo: Pegando nomes de um time de futebol, notas de uma turma...

Tpicos Especiais em Informtica III - Prof. R. Terra

19

Mtodos Importantes Web


A utilizao trivial seria, logo aps setar o tipo do contedo da resposta, pegar todos os parmetros da requisio e coloc-los dentro de variveis locais. Por exemplo:
String nome = request.getParameter("nome"); int idade = Integer.parseInt(

request.getParameter("idade"));
String nomes[] = request.getParameterValues("nomes"); String numeros[] = request.getParameterValues("n");

Tpicos Especiais em Informtica III - Prof. R. Terra

20

Uma metodologia simples


1.

Setar o tipo de contedo da resposta (setContentType) Colocar os parmetros em variveis locais (veja slide anterior) Obter a escrita na resposta (out = response.getWriter()) Utilizar Java SE para gerar o HTML de resposta (out.print(...)) Fechar a escrita na resposta (out.close())

2.

3.

4.

5.

Tpicos Especiais em Informtica III - Prof. R. Terra

21

Exemplo 01 Exibir nome


Vamos submeter a seguinte URL, isso seria via o mtodo GET:
/ExibirNome?nome=Carlos
Para iniciarmos a passagem de parmetros, inserido um parmetros so separados por &.

e depois os

Ou talvez submeter via formulrio, usando o mtodo POST:


<form action="${pageContext.request.contextPath}/ExibirNome" method="POST"> Nome: <input type="text" name="nome" /> <br /> <input type="submit" value="Enviar" /> <input type="reset" value="Limpar" /> </form>

Tpicos Especiais em Informtica III - Prof. R. Terra

22

Exemplo 01 Exibir nome


Como seria o cdigo interno do mtodo doGet (caso seja via URL) ou do mtodo doPost (caso seja via formulrio)?
public [doPost|doGet](...) throws ... { response.setContentType("text/html"); String nome = request.getParameter("nome"); PrintWriter out = response.getWriter(); ... out.printf("Ol %s! Seja bem vindo!", nome); ... out.close(); }

Tpicos Especiais em Informtica III - Prof. R. Terra

23

Exemplo 02 Somar
Vamos submeter a seguinte URL, isso seria via o mtodo GET:
/Somar?x=3&y=7
Para iniciarmos a passagem de parmetros, inserido um parmetros so separados por &.

? e depois os

Ou talvez submeter via formulrio, usando o mtodo POST:


<form action="${pageContext.request.contextPath}/Somar" method="POST"> X: <input type="text" name="x" size="6" /> <br /> Y: <input type="text" name="y" size="6" /> <br /> <input type="submit" name="evento" value="Enviar" /> <input type="reset" value="Limpar" /> </form>
Tpicos Especiais em Informtica III - Prof. R. Terra 24

Exemplo 02 Somar
Como seria o cdigo interno do mtodo doGet (caso seja via URL) ou do mtodo doPost (caso seja via formulrio)?
public [doPost|doGet](...) throws ... { response.setContentType("text/html"); int x = Integer.parseInt(request.getParameter("x")); int y = Integer.parseInt(request.getParameter("y")); PrintWriter out = response.getWriter(); ... out.printf("%d + %d = %d", x, y, (x+y)); ... out.close(); }

Tpicos Especiais em Informtica III - Prof. R. Terra

25

Exemplo 03a Somar vrios


Um nico parmetro pode receber diversos valores Vamos submeter a seguinte URL, isso seria via o mtodo GET:
/SomarVarios?n=3.2&n=7.1&n=3.7&n=2.7&n=5.1&n=4.7 A requisio acima envia vrios valores no parmetro n e o Servlet deve ser capaz de recuperar todos eles usando no mais o mtodo getParameter(), mas sim, getParameterValues()

Recordando:
o mtodo getParameter() retorna uma string
usado para recuperar parmetros simples com apenas um valor

o mtodo getParameterValues() retornar um vetor de string


usado para recuperar parmetros com mltiplos valores
Tpicos Especiais em Informtica III - Prof. R. Terra 26

Exemplo 03a Somar vrios


Ou talvez submeter via formulrio, usando o mtodo POST:
<form action="${pageContext.request.contextPath}/SomarVarios" method="POST"> Nmeros:<br /> <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" />, <input type="text" name="n" size="6" /> <br /> <input type="submit" name="evento" value="Enviar" /> <input type="reset" value="Limpar" /> </form>

Tpicos Especiais em Informtica III - Prof. R. Terra

27

Exemplo 03a Somar vrios


Como seria o cdigo interno do mtodo doGet (caso seja via URL) ou do mtodo doPost (caso seja via formulrio)?
public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); double soma = 0; for (String s : strNumeros){ soma += Double.parseDouble(s); } ... out.printf("SOMA: %f, soma); ... }
Tpicos Especiais em Informtica III - Prof. R. Terra 28

Exemplo 03b Exibir maior/ menor


Com base na idia da URL ou do formulrio do Exemplo 3a possvel fazer a exibio do maior e do menor nmero. Observe:
public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); double min, max; min = max = Double.parseDouble(strNumeros[0]); for (int i = 1; i < strNumeros.length; i++) { double n = Double.parseDouble(strNumeros[i]); if (n > max) { max = n; } else if (n < min) { min = n; } } ... out.printf("O menor valor %f e o maior valor %f", min, max); ... } Tpicos Especiais em Informtica III - Prof. R. Terra 29

Exemplo 03c Exibir maior/ menor


Uma observao bem importante que o boto de submisso do formulrio tambm pode passar um parmetro (como o evento a ser realizado) e pode ser utilizado para indicar o que deve ser realizado com os outros parmetros passados Por exemplo, vamos alterar o exemplo 03b para ter dois botes de submisso:
Exibir Maior Exibir Menor

Tpicos Especiais em Informtica III - Prof. R. Terra

30

Exemplo 03c Exibir maior/ menor


Formulrio do Exemplo 03a com alteraes destacadas
o action do formulrio os botes de submisso
<form action="${pageContext.request.contextPath}/ExibirMM" method="POST"> ... <input type="submit" name="evento" value="Exibir Maior" /> <input type="submit" name="evento" value="Exibir Menor" /> ... </form>

Tpicos Especiais em Informtica III - Prof. R. Terra

31

Exemplo 03c Exibir maior/ menor


Como ficaria o Servlet:
public [doPost|doGet](...) throws ... { ... String[] strNumeros = request.getParameterValues("n"); String evento = request.getParameter("evento"); if (evento.equals("Exibir Maior")){ this.exibirMaior(strNumeros,out); //Chama um mtodo local }else if (evento.equals("Exibir Menor")){ this.exibirMenor(strNumeros,out); //Chama um mtodo local } ... }

Tpicos Especiais em Informtica III - Prof. R. Terra

32

Exemplo 03c Exibir maior/ menor


E assim ficariam os mtodos exibirMaior e exibirMenor
private void exibirMenor(String[] strNumeros, PrintWriter out) { double min = Double.parseDouble(strNumeros[0]); for (int i=1; i<strNumeros.length; i++){ double n = Double.parseDouble(strNumeros[i]); if (n < min){ min = n; } } out.printf("O menor elemento %f", min); } private void exibirMaior(String[] strNumeros, PrintWriter out) { double max = Double.parseDouble(strNumeros[0]); for (int i=1; i<strNumeros.length; i++){ double n = Double.parseDouble(strNumeros[i]); if (n > max){ max = n; } } out.printf("O maior elemento %f", max); } Tpicos Especiais em Informtica III - Prof. R. Terra 33

Exemplo 03c Exibir maior/ menor


Como se pde observar, dependendo do boto de submisso do formulrio acionado, a ao realizada ser diferente Isto bem utilizado quando tivermos um nico servlet e vrias aes a serem realizadas Por exemplo, uma tela que salva, atualiza, exclui e lista os funcionrios ser vinculada a um mesmo servlet e dependendo do boto de submisso acionado direcionar a ao desejada

Tpicos Especiais em Informtica III - Prof. R. Terra

34

S Servlets?
At agora estamos desenvolvendo aplicaes somente utilizando servlets Qual o maior problema ou dificuldade encontrada em se desenvolver um servlet?
Escrever todo o cdigo HTML no prprio servlet

Imagina ainda se fosse um servlet cuja resposta seria uma enorme pgina HTML? Como resolver esse problema?

Tpicos Especiais em Informtica III - Prof. R. Terra

35

Utilizando JSP
A soluo para no ficar escrevendo todo o cdigo HTML dentro do servlet utilizar pginas JSP (Java Server Pages) Muitos utilizam o servlet para fazer a lgica de negcio (query no banco de dados, inserir um registro, registrar um emprstimo) e, ento, encaminham a solicitao para um JSP que apresentar o HTML de resposta Trabalhando da maneira acima, observa-se uma separao entre a lgica de negcio que est sendo realizada pelos servlets e a apresentao que est sendo realizada pelas pginas JSP
Isso pode parecer o MVC, mas ainda no

Tpicos Especiais em Informtica III - Prof. R. Terra

36

Utilizando JSP
Uma pgina JSP muito mais gil para a gerao de um documento HTML como sada do que um servlet
Podemos pensar em uma pgina JSP como um documento HTML com algumas tags especiais

Porm, na verdade, uma pgina JSP um servlet


interpretada em seu primeiro acesso traduzida em um servlet
Carregado pelo container Traduzido hello.jsp Compilado hello_jsp.java hello_jsp.class Servlet

Tpicos Especiais em Informtica III - Prof. R. Terra

37

Utilizando JSP
Uma pgina JSP facilita o desenvolvimento da camada de apresentao uma vez que permite que os templates em HTML possam ser reaproveitados pelo desenvolvedor J que uma pgina JSP um servlet e j que um servlet uma classe Java, ento uma pgina JSP pode conter cdigos Java Uma pgina JSP composta basicamente por elementos HTML e tags que delimitam cdigos Java (chamados scripts)

Tpicos Especiais em Informtica III - Prof. R. Terra

38

Utilizando JSP
So as tags JSP:
<%@ %> Diretiva JSP: define parmetros para o container (no caso para o Tomcat Scriptlet: tudo o que tiver dentro desta regio considerado cdigo Java. Uso no recomendado, preferir EL ou JSTL Declarao: utilizada para definir mtodos e declarar variveis. Uso no recomendado, preferir EL ou JSTL Expresso: o mesmo que chamar <% out.print() %>. No tem ponto-e-vrgula (;) no final. Uso no recomendado, preferir EL ou JSTL

<%

%>

<%! %>

<%= %>

Tpicos Especiais em Informtica III - Prof. R. Terra

39

Tags JSP Exemplo 01


O exemplo abaixo utiliza diretiva JSP para passar diversas informaes sobre aquela pgina, faz declarao de um vetor de strings com diversos nomes, faz um scriplet para iterar o vetor e utiliza expresso para exibir os nomes em caixa alta:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <%!String[] nomes = {"Adriana","Carlos","Evandro","Gabriel", "Marcos"};%> <html> <body> <ul> <%for(String nome : nomes){%> Resultado: <li><%=nome.toUpperCase()%></li> <%}%> </ul> </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

40

Tags JSP Exemplo 02


O exemplo abaixo faz a declarao de uma funo, faz um scriplet para buscar o valor de um parmetro da requisio e depois invoca a funo declarada passando o parmetro:
Neste exemplo foi realizada a chamada ao JSP passando o parmetro diretamente via GET: /calcularPagamento.jsp?valor=1000.00
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<%! double incluiTaxas(double valor){ return valor*1.1; } %> <html> <body> <%double valor = Double.parseDouble(request.getParameter("valor"));%> O valor do pagamento <%=this.incluiTaxas(valor)%> </body> </html>

Resultado:

Tpicos Especiais em Informtica III - Prof. R. Terra

41

Encaminhar ou redirecionar
Como j vimos que o JSP ser responsvel pela apresentao, devemos saber como encaminhar uma requisio ou redicionar um cliente Portanto:
Voc pode encaminhar (forward) a requisio para ser completada
Um exemplo depois de realizar todos os processamentos no servlet devemos encaminhar a requisio uma pgina JSP para que ela apresente os dados dessa requisio

Voc pode redirecionar a requisio para outro lugar


Um exemplo quando a requisio est sem autenticao e voc no quer trat-la, mas sim, redirecionar o usurio para tela de login do sistema

Tpicos Especiais em Informtica III - Prof. R. Terra

42

Encaminhar (forward)
Ao encaminhar, o controle permanece dentro do container. Um servlet envia a requisio para o prximo servlet ou JSP e os objetos HttpServletRequest e HttpServletResponse so encaminhados juntamente Para o usurio, ele no conhece os servlets pelo qual ele foi encaminhado, e sim, somente o que ele acessou
A URL do navegador no alterada

Encaminhamentos (forwardings) podem ocorrer apenas dentro do contexto web da aplicao, isto , somente entre servlets e pginas JSP
Tpicos Especiais em Informtica III - Prof. R. Terra 43

Encaminhar (forward)
Servlet ou JSP Servlet ou JSP
est qu

Re

Fo r war d

Response

public [doPost|doGet](...) throws ... {

...
request.getRequestDispatcher("/resultListagem.jsp") .forward(request, response); ... }

Tpicos Especiais em Informtica III - Prof. R. Terra

44

Redirecionar (redirect)
O servlet envia um cdigo HTTP 303 como resposta informando uma nova URL deve ser acessada Redirecionamento usado quando precisa-se sair do contexto (acessar um recurso externo como o site do google, por exemplo)
Com redirect, perde-se todas as variveis que existiam dentro do request, sendo necessrio repass-las nova URL

Tpicos Especiais em Informtica III - Prof. R. Terra

45

Redirecionar (redirect)
Servlet ou JSP
st eque R ct edire R

Request

public [doPost|doGet](...) throws ... { ... response.sendRedirect("http://www.google.com.br"); return; }

Tpicos Especiais em Informtica III - Prof. R. Terra

46

Exemplo encaminhamento
JSP com formulrio de submisso (formSoma.jsp)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> <font type="red">${requestScope.msgErro}</font> <br /> <form action="${pageContext.request.contextPath}/Somar" method="POST"> X: <input type="text" name="x" value="${param.x}" size="6"/> Y: <input type="text" name="y" value="${param.y}" size="6"/> <input type="submit" name="evento" value="Somar"/> <input type="reset" value="Limpar"/> </form> </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

47

Exemplo encaminhamento
Servlet com a lgica de negcio
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int x = 0, y = 0; if (this.isNumber(request.getParameter("x"))) { x = Integer.valueOf(request.getParameter("x")); } else { request.setAttribute("msgErro", "O atributo X invlido"); request.getRequestDispatcher("/formSoma.jsp").forward(request,response); return; } if (this.isNumber(request.getParameter("y"))) { y = Integer.valueOf(request.getParameter("y")); } else { request.setAttribute("msgErro", "O atributo Y invlido"); request.getRequestDispatcher("/formSoma.jsp").forward(request,response); return; } request.setAttribute("z", x + y); // Encaminho para a JSP de resposta request.getRequestDispatcher("/resultSoma.jsp").forward(request,response); }

Tpicos Especiais em Informtica III - Prof. R. Terra

48

Exemplo encaminhamento
Alm do mtodo doPost, a classe do servlet tambm ter o mtodo isNumber que verificar se uma certa string um nmero inteiro:
private boolean isNumber(String str) { return str.matches("^-{0,1}[0-9]+"); }

JSP com a resposta a ser apresentada (resultSoma.jsp)


<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> O resultado da soma de ${param.x} + ${param.y} = ${requestScope.z} </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

49

Escopos
No ltimo exemplo vimos cdigos como:
No servlet:
request.setAttribute(z,x+y)

Na JSP:
${requestScope.z}

Porm, no sabemos exatamente o que era. Isso trata-se da utilizao de escopo para armazenamento de informaes

Os escopos so reas de armazenamento com propriedades especficas e podem ser de:


Pgina (pageScope) somente existe em pginas JSP Requisio (requestScope) Sesso (sessionScope) Aplicao (applicationScope)
Tpicos Especiais em Informtica III - Prof. R. Terra 50

Escopo de pgina
Escopo de pgina (pageScope)
Esse escopo o mais curto e s existe durante a renderizao da pgina JSP Colocando variveis neste escopo (somente dentro da pgina JSP):
<%pageContext.setAttribute("nomeAtributo",valor);%>

Buscando o valor de uma varivel nesse escopo:


Usando EL: ${pageScope.nomeAtributo} Usando expresso JSP (preferir EL): <%=pageContext.getAttribute("nomeAtributo")%>

Tpicos Especiais em Informtica III - Prof. R. Terra

51

Escopo de pgina

Escopo de pgina pageScope

Cliente 1

JSP A

Uso comum:
Uso de variveis temporrias usadas somente para a renderizao da pgina JSP

Tpicos Especiais em Informtica III - Prof. R. Terra

52

Escopo de requisio
Escopo de requisio (requestScope)
Este escopo s existe durante a requisio, isto , seu armazenamento inicia-se no momento em que uma requisio realizada e termina junto com o trmino requisio Colocando variveis neste escopo:
<%request.setAttribute("nomeAtributo",valor);%>

Buscando o valor de uma varivel nesse escopo:


Usando EL: ${requestScope.nomeAtributo} Usando expresso JSP (preferir EL): <%=request.getAttribute("nomeAtributo")%>

Tpicos Especiais em Informtica III - Prof. R. Terra

53

Escopo de requisio

Escopo de requisio requestScope


set Cliente 1 get

Servlet/JSP A

Servlet/JSP B

Uso comum:
Passagem de informaes adquiridas em um servlet para a pgina JSP de resposta

Tpicos Especiais em Informtica III - Prof. R. Terra

54

Escopo de sesso
Escopo de sesso (sessionScope)
Este escopo nico por sesso (vnculo de um usurio utilizando a aplicao), isto , o escopo existe enquanto a sesso do usurio estiver aberta Colocando variveis neste escopo:
<%request.getSession().setAttribute("nomeAtributo",valor);%>

Buscando o valor de uma varivel nesse escopo:


Usando EL: ${sessionScope.nomeAtributo} Usando expresso JSP (preferir EL): <%=request.getSession().getAttribute("nomeAtributo")%>

Tpicos Especiais em Informtica III - Prof. R. Terra

55

Escopo de sesso
Escopo de sesso requestScope
set

Servlet/JSP A
t ge

Cliente 1

set

Servlet/JSP B

Uso comum:
Armazenamento das informaes do usurio. Por exemplo, nome, histrico de pginas visitadas, permisses de acesso, disciplinas do aluno...
Tpicos Especiais em Informtica III - Prof. R. Terra 56

Escopo de aplicao
Escopo de aplicao (applicationScope)
Este escopo o mais abrangente. o escopo comum s todos os servlets/JSP independente de qual pgina, requisio ou sesso. Pode-se realmente dizer que o escopo da aplicao Colocando variveis neste escopo:
<%this.getServletContext().setAttribute("nomeAtributo",valor);%>

Buscando o valor de uma varivel nesse escopo:


Usando EL: ${applicationScope.nomeAtributo} Usando expresso JSP (preferir EL): <%=application.getAttribute("nomeAtributo")%>

Tpicos Especiais em Informtica III - Prof. R. Terra

57

Escopo de aplicao
Escopo de aplicao applicationScope
get

Cliente 1

Servlet/JSP A
se t

get

Cliente 2

Servlet/JSP B

Uso comum:
Armazenamento das informaes que devem ser acessadas por qualquer requisio de qualquer usurio. Por exemplo, lista de UF, lista de cidades, lista do nome dos professores...
Tpicos Especiais em Informtica III - Prof. R. Terra 58

Escopos
Observao:
Usando EL (Expression Language), voc pode no dizer qual o escopo que est procurando o atributo, por exemplo:
${x}

Caso seja feito assim, o container ir procurar o atributo com o nome x a partir do escopo mais restrito at o mais amplo:
1. 2. 3. 4.

pageScope requestScope sessionScope applicationScope

Por exemplo, se existir a varivel x no escopo de requisio com o valor 4 e no escopo de aplicao com valor 6, ser exibido 4, pois o escopo de requisio mais restrito que o de aplicao
Tpicos Especiais em Informtica III - Prof. R. Terra 59

MVC
O modelo MVC oferece uma forma de separar as trs camadas principais de uma aplicao web:
Viso (responsvel pela apresentao ao usurio) Controle (responsvel por gerenciar os eventos que notificam o modelo) Modelo (responsvel pelas entidades e regras de negcio)

Para desenvolver uma aplicao Java Web no padro arquitetural MVC (Model View Controller), basta utilizar:
JSPs para o HTML (viso) Servlets para controlar o comportamento da aplicao (controle)
Geralmente possuem o sufixo Servlet

Classes especficas para realizar acesso a um SGBD (model)


Geralmente possuem o sufixo DAO (Data Access Object)
Tpicos Especiais em Informtica III - Prof. R. Terra 60

MVC
Responsvel pelo acesso ao SGBD Busca os dados conforme solicitao indireta da Viso e os entrega ao Controle Responsvel pela apresentao da resposta Para exibir a resposta, acessa os diversos dados disponibilizados pelo Controle

Responsvel por interpretar a solicitao do usurio Manipula os parmetros, faz o pedido de dados ao Modelo e, ento, os coloca acessvel Viso Tpicos Especiais em Informtica III - Prof. R. Terra 61

MVC

Tpicos Especiais em Informtica III - Prof. R. Terra

62

MVC
Algumas so as vantagens da utilizao do MVC:
Independncia entre a camada de Viso e a camada de Modelo
O que permite a troca de um sem impacto ao outro

Manutenibilidade
Ocorre um erro na apresentao dos dados, portanto em uma JSP Ocorre um erro de fluxo ou comportamente, portanto em um servlet Ocorre um erro ao acesso ao SGBD, portanto em uma classe de modelo

Tpicos Especiais em Informtica III - Prof. R. Terra

63

Aplicao usando MVC


De acordo com o diagrama de classes explicando o MVC, vamos fazer uma pequena aplicao de exemplo usando o padro arquitetural MVC
S ser implementada a funo de listagem de funcionrios

Tpicos Especiais em Informtica III - Prof. R. Terra

64

Aplicao usando MVC


Ser composta de:
/web/menuFuncionario.jsp
Exibio das aes em funcionrios

/web/inserirFuncionario.jsp
Formulrio de insero do funcionrio

com.terra.modelo.pojo.Funcionario
Armazenar as informaes do funcionrio

com.terra.controle.ManterFuncionarioServlet
Lgica de negcio

com.terra.modelo.FuncionarioDAO
Acesso ao modelo

/web/resultInsercao.jsp
Resultado da insero do funcionrio

Tpicos Especiais em Informtica III - Prof. R. Terra

65

/ web/ menuFuncionario.jsp
<html> <body> <h1>MENU</h1> <a href="${pageContext.request.contextPath}/inserirFuncionario.jsp"> Inserir </a> <br /> <a href="${pageContext.request.contextPath}/atualizarFuncionario.jsp"> Atualizar </a> <br /> <a href="${pageContext.request.contextPath}/excluirFuncionario.jsp"> Excluir </a> <br /> <a href="${pageContext.request.contextPath}/pesquisarFuncionario.jsp"> Pesquisar </a> <br /> </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

66

/ web/ inserirFuncionario.jsp
<html> <body> <h1>Inserir Funcionrio</h1> <font color="red"><b>${requestScope.msgErro}</b></font><br /> <form action="${pageContext.request.contextPath}/ManterFuncionario" method="POST"> Nome: <input type="text" name="nome" size="60" maxlength="60" value="${param.nome}" /> <br /> Cargo: <input type="text" name="cargo" size="60" maxlength="60" value="${param.cargo}" /> <br /> <input type="submit" name="evento" value="Inserir" /> <input type="reset" value="Limpar" /> </form> </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

67

com.terra.modelo.pojo.Funcionario
public class Funcionario { private String nome; private String cargo; public Funcionario(){} public Funcionario(String nome, String cargo) { this.nome = nome; this.cargo = cargo; } public public public public } String getNome(){ return this.nome; } void setNome(String nome){ this.nome = nome; } String getCargo(){ return this.cargo; } void setCargo(String cargo){ this.cargo = cargo; }

Tpicos Especiais em Informtica III - Prof. R. Terra

68

com.terra.controle.ManterFuncionarioServlet
public class ManterFuncionarioServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String evento = request.getParameter("evento"); if (evento.equals("Inserir")){ this.inserir(request,response); }else if (evento.equals("Atualizar")){ this.atualizar(request,response); }else if (evento.equals("Excluir")){ this.excluir(request,response); }else if (evento.equals("Pesquisar")){ this.pesquisar(request,response); } } //Fim do doPost //Continua no prximo slide

Tpicos Especiais em Informtica III - Prof. R. Terra

69

com.terra.controle.ManterFuncionarioServlet
private void inserir(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("nome"); String cargo = request.getParameter("cargo"); if (nome==null || nome.equals("")){ request.setAttribute("msgErro", "O campo 'nome' obrigatrio."); request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response); return; }else if (cargo==null || cargo.equals("")){ request.setAttribute("msgErro", "O campo 'cargo' obrigatrio."); request.getRequestDispatcher("/inserirFuncionario.jsp").forward(request, response); return; } Funcionario f = new Funcionario(nome,cargo); FuncionarioDAO.insert(f); request.setAttribute("f", f); request.getRequestDispatcher("/resultInsercao.jsp").forward(request, response); } //Fim do inserir ... } //Fim da classe servlet

Tpicos Especiais em Informtica III - Prof. R. Terra

70

com.terra.modelo.FuncionarioDAO
public class FuncionarioDAO { public static void insert(Funcionario f){ //Cdigo de insero do funcionrio no SGBD } ... }

Tpicos Especiais em Informtica III - Prof. R. Terra

71

/ web/ resultInsercao.jsp
<html> <body> <h1>Insero de Funcionrio</h1> O funcionrio <b>${requestScope.f.nome}</b> foi inserido com sucesso no cargo de <b>${requestScope.f.cargo}</b>. <br /><br /> <a href="${pageContext.request.contextPath}/menuFuncionario.jsp"> Voltar ao menu </a> <br /> </body> </html>

Tpicos Especiais em Informtica III - Prof. R. Terra

72

Referncia Bibliogrfica
BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Head First Servlets and JSP. Sebastopol: O'Reilly, 2008. BASHAM, Brian; SIERRA, Kathy; BATES, Bert. Use a Cabea. Servlets & JSP. Rio de Janeiro: Alta Books, 2005.

Tpicos Especiais em Informtica III - Prof. R. Terra

73

Potrebbero piacerti anche