Mdulo V
Marcelo A. Silva
(marceloas@gmail.com)
PARTE I - SERVLETS
Introduo
Servlets so classes Java, desenvolvidas de acordo com uma estrutura bem definida Podem tratar requisies recebidas de clientes quando instaladas junto a um Servlet Container
Servlet Container um servidor que permita a execuo de Servlets, muitas vezes chamado de Servidor de Aplicaes Java
07/03/2012
HelloServlet
Introduo
O mtodo setContentType(String s) especifica o tipo de contedo (MIME Media Types) da resposta para o navegador O MIME Type ajuda o navegador a determinar como exibir os dados O MIME (Multipurpose Internet Mail Extensions) Type nesse caso "text/html", indicando que a resposta um documento HTML
07/03/2012
Hierarquia Servlet
O cdigo anterior um Servlet que estende a classe javax.servlet.http.HttpServlet, uma classe abstrata que estende javax.servlet.GenericServlet. Essa ltima implementa a interface javax.servlet.Servlet, que a fonte de toda a programao Servlet, onde temos a abstrao central dessa tecnologia Todo Servlet implementa essa interface, direta ou indiretamente.
WEB-INF\web.xml
Descritor da Aplicao
A inicializao do Servlet para parmetros que podem ser lidos e variveis comuns a todas as requisies que devem ser inicializadas. Um exemplo disso so as conexes ao banco de dados estabelecidas aqui, na inicializao.
void service(HttpServletRequest req, HttpServletResponse res)
Chamadas ao mtodo de servio, pelo Servlet Container, onde seu servlet responde as suas solicitaes. aqui onde o Servlet vai interagir com os pedidos, processar e responder.
void destroy( )
Esse mtodo libera os recursos que estavam sendo usados pelo Servlet e chamado quando finalizado pelo servidor em que est sendo executado.
07/03/2012
Executando o Servlet
Entendendo Servlets
javax.servlet
Pacote dos servlets genricos, independe de protocolo
http://localhost:8080/modulo3aula2/hello
javax.servlet.http
Estende a funcionalidade do pacote javax.servlet para uso do protocolo HTTP.
Mapeando um Servlet
Chamar um Servlet pelo pacote e nome da classe uma situao incomum e estranha, por isso mapear um Servlet uma boa prtica para acesso a mesma Para isso, o elemento <servlet /> e <servletmapping/> entram em ao
O acesso a esse Servlet pelo navegador ser digitando MeuServlet no caminho da sua aplicao Web: http://localhost:8080/Site/MeuServlet
07/03/2012
Load on Startup
Classe HttpServlet
A classe HttpServlet sobrescreve o mtodo service para distinguir entre as solicitaes tpicas recebidas de um navegador Web cliente. Os dois mtodos mais comuns e usados de solicitao HTTP so GET e POST As utilizaes dos dois mtodos so muito comuns, uma vez que o mtodo GET pode tanto obter informaes, onde voc pode requisitar um arquivo ou uma imagem, como tambm pode enviar dados, que neste caso temos o limite do cabealho HTTP
07/03/2012
Classe HttpServlet
Mtodo Post
Classe HttpServlet
Mtodo Post
Utilizando o mtodo doPost( ) voc recupera valores vindos pelo mtodo POST Quando uma requisio HTTP recebida por uma classe que estende HttpServlet, seu mtodo service( ) chamado, sendo que a implementao padro desse mtodo ir chamar a funo correspondente ao mtodo da requisio recebida Ou seja, caso um envio seja feito pelo mtodo POST, como no exemplo, o mtodo doPost( ) implementado por voc ser chamado
Classe HttpServlet
Mtodo Post
Classe HttpServlet
Mtodo Post
A interface HttpServletRequest trabalha com alguns mtodos, como o mtodo getParamenter( String n ) Esse mtodo retorna o valor associado com um parmetro enviado para o Servlet como parte de uma associao GET ou POST. O argumento n representa o nome do parmetro. No servlet exemplo, foi usuario e a senha, no qual vinham das tags <input /> do xhtml de mesmo nome.
Atravs de uma condicional if voc verifica se foram passados valores como usuario e senha iguais ao valor verificado pelo mtodo equals(String s) A interface HttpServletResponse contm a resposta ao cliente. Um grande nmero de mtodos so fornecidos para permitir ao Servlet formular uma resposta. No exemplo, o mtodo setContentType(String tipo) define o tipo MIME da resposta ao navegador O tipo MIME permite ao navegador determinar como exibir os dados. No caso o tipo MIME de resposta foi text/html, que indica que a resposta um documento HTML
07/03/2012
Classe HttpServlet
Mtodo Post
Para dar uma resposta ao cliente, voc pode usar a OutputStream ou o PrintWriter que retornado do objeto response PrintWriter writer = response.getWriter(); OutputStream stream = response.getOutputStream(); Tambm possvel redirecionar o usurio para outra pgina atravs do mtodo sendRedirect(String): response.sendRedirect(logado.html); Ateno
Voc s se deve chamar um dos trs mtodos mostrados. Escrevendo atravs do writer, o cabealho enviado ao cliente e impede o redirecionamento, enquanto que se voc chamar o mtodo getWriter e depois o getOutputStream ocorrer um erro.
Classe HttpServlet
Mtodo Get
O mtodo GET trabalha com informaes enviadas via URL. Esse mtodo pode ser usado via query string de um link ou via formulrio com o atributo method em GET Uma string de consulta parte do URL que aparece depois de um ponto de interrogao. Por exemplo, o URL a seguir contm uma string de consulta:
http://localhost:8080/buscar/?pnome=maria
Nesse exemplo, a string de consulta contm uma varivel denominada pnome cujo valor maria
Classe HttpServlet
Mtodo Get
Classe HttpServlet
Mtodo Get
Exemplo Prtico - Get
As strings de consulta so usadas para transmitir informaes do navegador para o servidor Normalmente, voc no digita a string de consulta diretamente na barra de endereos do navegador. Ao contrrio, cria um link em uma pgina que contm a string de consulta.
http://localhost:8080/TrabComGetServlet?email=mas@ufpa.br
Voc pode transmitir diversas variveis de consulta em uma nica string. Para fazer isso, basta separ-las com o caractere &(e comercial)
07/03/2012
Introduo
O que JSP ?
PARTE II - JSP
Uma pgina JSP uma pgina contendo HTML, WML, XML, ... com trechos de programas Java (elementos JSP) embutidos Simplificam a gerao de contedo dinmico porque Web Designers pode manipular as pginas com mais facilidade do que manipulando servlets A pgina JSP automaticamente transformada em servlet e o servlet executa no servidor para gerar a resposta
Introduo
O que JSP ? (cont)
A parte dinmica da pgina gerada pelo JSP e a parte esttica pelo HTML. JSP pode ser expresso atravs do seu formato padro e do seu formato XML.
07/03/2012
JSP x ASP
Ambos so voltados para web Comunicam-se com banco de dados. Possuem componentes que poem ser reutilizados, JSP pode reutilizar JavaBeans e EJBs enquanto ASP pode reutilizar coponente COM e ActiveX. A tecnologia ASP s permite ser utilizada em uma nica plataforma, enquanto JSP pode facilmente ser integrada a qualquer uma a qualquer tempo.
No possui um API universal para comunicao com banco de dados, se mudar o tipo de SGBD os impactos no projeto so muito grandes, um maior nmero de classes deve ser manipulada para atendera as necessidades
07/03/2012
Recursos Necessrios
Compilador JDK, devidamente instalado e configurado Servidor Web com suporte a pginas JSP
Tomcat, Resin
Diretivas
Imports
<%@ page import="java.util.*, cart.*" %>
Declaraes
<%! private DB db = null; ...%>
A instalao geralmente fcil e descomplicada. Opcionalmente definir a porta onde o servio ser ativado
Scriptlets
<% cdigo java %>
10
07/03/2012
Diretivas
Include
<%@ include file="initdestroy.jsp" %>
Expresses
<%= varivel %>
Tratamento de Erro
<%@ page isErrorPage="true" %> <%@ page errorPage="errorpage.jsp"%>
<html><body> <% int i = 0; do { %> <font size=<%= i %>>Bom Dia!!! - Fonte: <%= i %> </font><br> <% i++; } while (i < 8); %> </body> </html>
11
07/03/2012
<html> <body> <% for (int i = 2; i < 8 ; i++) { %> <font size=<%= i %>>Bom Dia!!! - Tamanho da fonte: <%= i %></font> <% } %> </body> </html>
<html> <body> <% int i = 0; while (i < 8) { %> <font size=<%= i %>>Bom Dia!!! - Tamanho da fonte: <%= i %></font><br> <% i++; } %> </body> </html>
Objetos Implcitos
Podemos criar novas instncias de uma classe Java dentro de scriptlets de pgina JSP para a produo de um contedo dinmico Podemos, por exemplo, criar uma classe que realiza uma consulta em uma base de dados, e atravs de uma pginas JSP acessar seus mtodos que realizam a conexo ou consulta
Objeto page
Objetos Implcitos
Classe ou Interface javax.servlet.jsp.HttpJspPage Descrio Instncia de um servlet da pgina Dados de configurao de um servlet Dados de solicitao, podendo possuir parametros Dados de resposta Fluxo de sada para o contedo da pgina
config
javax.servlet.ServletConfig
request
javax.servlet.http.HttpServletRequest
response out
javax.servlet.http.HttpServletResposnse
javax.servlet.jsp.JspWriter
12
07/03/2012
Objetos Implcitos
session javax.servlet.http.HttpSession Dados de sesso especficos de cada usurio
Objetos Implcitos
<%@page language="java"%> <html> <head> <title>Autenticao</title> </head> <body> <% String nome=request.getParameter(nome); String senha=request.getParameter(senha); %> <p>Nome = <%=nome%></p> <p>Senha =<%=senha%></p> </body> </html>
O exemplo ao lado mostra a forma padro de recuperao de dados utilizando objetos implcitos.
application
javax.servlet.ServletContext
exception
javax.lang.Throwable
Os dados passados so elementos bsicos do HTML com caixas de texto e e seleo por exemplo.
pageContext
javax.servlet.Jsp.PageContext
Controle de Formulrios
(TAG FORM) <input type=text> - Caixa de texto padro para entrada de dados <input type=hidden> - Objetos de tipos de texto ficam ocultos <input type=password> - Caixa de texto padro para campos com senha < input type=radio> - Objetos de escolha ,apenas um pode ser escolhido. < input type=checkbox> - Objeto de escolha, apenas um pode ser escolhido < input type=button> - Botes de ao < input type=submit>- Boto utilizado para submeter o formulrio. < input type=reset>- Boto para apagar os dados de um formulrio. < textarea rows=n cols=n></textarea>- Caixa de texto com vrias linhas(rows) e colunas(cols). <select><option></option></select>- So as listas de seleo. value- Armazena o valor digitado pelo usurio. name- Nome de uma tag.
Sesso de Aplicao
Atravs do objeto implcito pageContext possvel recuperar os atributos de qualquer escopo
Aplicao X Usurio
Utilizando o mtodo getAttribute(String name, intScope) da classe PageContext a qual tem variveis static final para cada escopo Dessa forma, uma pgina JSP pode criar e publicar um objeto na sesso de aplicao. A partir da, esse objeto pode ser acessado por qualquer outra JSP do sistema
13
07/03/2012
Sesso de Aplicao
Para recuperar o atributo da sesso de aplicao
<%= pageContext.getAttribute("refUsuario", pageContext.APPLICATION_SCOPE)%> <%
Sesso de Aplicao
No exemplo abaixo, possvel acessar o objeto gl em qualquer pgina que contenha este cdigo
GerenciaLogin gl = (GerenciaLogin) pageContext.getAttribute("gerenciaLogin",pageContext.APPLICATION_SCOPE); if (gl==null){ gl = GerenciaLogin.getInstancia(); pageContext.setAttribute("gerenciaLogin",gl,pageContext.APPLICATION_SCOPE); } %>
pageContext.getAttribute();
public abstract Object getAttribute(String name, int scope){}
Retorna o objeto associado com o nome no scopo especificado ou retorna null se o objeto no for encontrado.
pageContext.setAttribute();
public abstract void setAttribute(String name, Object value, int scope)
Registra o nome e o valor especificado com o escopo definido.
Sesso de Usurio
o mecanismo utilizado para prover o controle de usurios dentro de uma aplicao web. Como o protocolo http no armazena informaes de estado necessrio tratar estes dados com sesso de usurio
Por exemplo: Em uma aplicao web que necessite de autenticao, desejvel que o login seja solicitado em uma pgina de login, e os recursos das outras pginas do site devem estar disponveis aps a autenticao Alm disso, o usurio no poder acessar diretamente certas pginas sem ter efetuado o login e somente o usurio autenticado com o mesmo browser que poder obter uma referncia para o objeto da sesso
Sesso de Usurio
Para setar o atributo de um usurio:
Session.setAttribute
public void setAttribute(java.lang.String name, java.lang.Object value)
Liga um objeto a essa sesso, usando o nome especificado. Se um objeto do mesmo nome j foi publicado na sesso, o referido objeto sobrescrito
Exemplo:
session.setAttribute("login", loginUsuario);
14
07/03/2012
Sesso de Usurio
Para recuperar o atributo de um usurio:
Session.getAttribute
public java.lang.Object getAttribute(java.lang.String name)
Objeto Request
Solicitao que aciona o processamento da pgina e busca por valores de parmetros ou cookies
javax. servlet. ServletRequest request.getParameter();
Retorna o objeto com o especifico nome na sesso corrente, ou nulo se nenhum objeto possuir o mesmo nome
Exemplo:
session.getAttribute("login");
Exemplo Prtico
15