Anda di halaman 1dari 15

07/03/2012

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

O ciclo de vida de um Servlet


Todo Servlet segue um ciclo de vida composto de 3 fases: inicializao, atendimento as requisies e finalizao A inicializao ocorre quando o Servlet Container carrega o Servlet
Se o parmetro <load-on-startup/> estiver presente e contiver um inteiro positivo, essa carga ocorre quando o prprio servidor iniciado Caso contrrio, essa carga ocorre quando recebida a primeira requisio a ser mapeada para a aplicao que contm o Servlet

07/03/2012

O ciclo de vida de um Servlet


Aps a inicializao, o Servlet pode atender requisies Assim, enquanto o servidor estiver ativo, e a aplicao que contm o Servlet estiver carregada, este permanecer na fase 2 de seu ciclo Uma vantagem da tecnologia de Servlets com relao as tecnologias anteriores o fato do Servlet permanecer carregado permitindo assim com que dados armazenados em variveis de classe persistam ao longo dos diversos pedidos recebidos Assim, possvel manter um pool de conexes ao banco de dados, por exemplo, de maneira que no haja necessidade de iniciar e estabelecer uma nova conexo ao banco de dados a cada novo pedido recebido

O ciclo de vida de um Servlet


Quando o servidor finalizado, ou quando a aplicao tornada inativa pelo Servlet Container, o Servlet finalizado

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.

Funcionamento Bsico de um Servlet


void init (ServletConfig config)

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.

A configurao do arquivo web.xml


O arquivo descritor de contexto (Deployment Descriptor) padro de uma aplicao Web, segundo a especificao Java Servlet/Java EE As informaes nele contidas detm as configuraes especificas da aplicao
Informaes textuais de ttulo (elemento <displayname />, nome para exibio no Manager) e comentrio da descrio (<description />) do contexto, teis para identificao e documentao O elemento <servlet /> indica o nome do Servlet bem como sua classe No elemento <servlet-mapping /> voc mapeia o Servlet para que seja melhor acessvel no navegador

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

Outras formas de Mapear um Servlet

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

Classe HttpServlet Mtodo Post


O mtodo POST no requisita informaes, e sim as envia (posta), dados para o servidor As utilizaes mais comuns de solicitaes POST consistem em enviar ao servidor informaes de um formulrio HTML em que o cliente insere dados ou enviar informaes ao servidor para que esse possa pesquisar em um banco de dados e etc A classe HttpServlet define os mtodos doGet e doPost para responder as solicitaes GET e POST vindas de um cliente Os dois mtodos recebem como argumentos um objeto HttpServletRequest e um objeto HttpServletResponse que permitem interao entre o cliente e o servidor.

07/03/2012

Classe HttpServlet
Mtodo Post

Classe HttpServlet
Mtodo Post

Exemplo Prtico - 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)

Introduo Por que JSP ?


A histria da programao Java do lado servidor, comeou com Servlets, lanado em 1996 pela Sun Microsystems, com pequenos aplicativos para web semelhentes ao CGI. Para programar um pgina relativamente grande em HTML e com pouco cdigo Java, era muito penoso para o programador que tinha que escrever muitas linhas de cdigo. O HTML embutido dentro do cdigo Java como um String o que aumenta o trabalho ser realizado. JSP resolve este problema, pois permite ao programador mesclar cdigo em Java com contedo esttico do HTML.

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

Comparando as tecnologias existentes


JSP x Servlets
Servlets so classes em Java que promovem o controle do lado do servidor.Difcil de trabalhar, pois a quantidade de cdigo HTML muito grande.

Comparando as tecnologias existentes


JSP X PHP
PHP(Personal Home Page) um padro aberto de tecnologia para Web que possui quase todas as funcionalidades de JSP, pode-se utilizar orientao a objetos, gratuito, e mantido por uma forte comunidade de desenvolvedores Uso focado em aplicaes Web, a integrao outras aplicaes no to fcil quanto com JSP

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

Arquitetura JSP (simplificada)

Arquitetura JSP (detalhada)


O utilizador vai a uma pgina feita com JSP. O browser web efectua o pedido atravs da Internet. O pedido JSP enviado para o servidor web. O servidor web reconhece o pedido especial (extenso .jsp) e entrega o JSP ao JSP Servlet Engine.

07/03/2012

Arquitetura JSP (detalhada)


Se o JSP acessado pela primeira vez, processado, caso contrrio passa para o passo 7. O prximo passo gerar um Servlet especial do JSP. Todo o HTML necessrio convertido em declaraes println. O cdigo-fonte do servlet compilado numa classe

Arquitetura JSP (detalhada)


instanciado o Servlet, chamando os mtodos init e service. O cdigo HTML produzido pelo Servlet enviado via Internet. Os resultados HTML so visualizados no web browser do utilizador.

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" %>

Teste de Estruturas de Controle


Exemplo com if
<html><body> <% java.util.Date dateNow = new java.util.Date(); int hourNow = dateNow.getHours(); %> <% if ((hourNow >= 5) && (hourNow < 13)) { %> <font face="verdana">Bom Dia!!!</font> <% } else if ((hourNow >= 13) && (hourNow < 19)) { %> < font face="verdana">Boa Tarde!!!</font> <% } else if ((hourNow >= 19) && (hourNow < 24)) { %> <font face="verdana">Boa Noite!!!</font> <% } else { %> <font face="verdana">Boa Madrugada!!!</font> <% } %></body></html>

Expresses
<%= varivel %>

Tratamento de Erro
<%@ page isErrorPage="true" %> <%@ page errorPage="errorpage.jsp"%>

Teste de Estruturas de Controle


Exemplo com if
<html><body> <% java.util.Date dateNow = new java.util.Date(); int hourNow = dateNow.getHours(); %> <% String mensagem; mensagem = ((hourNow < 12)? "Onde voc vai almoar hoje?" : "Onde voc almoou hoje?"); %> <font face="verdana">Ol, Tudo bem? <%= mensagem%> </font></body></html>

Teste de Estruturas de Controle


Exemplo com laos de repetio

<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

Teste de Estruturas de Controle


Exemplo com laos de repetio

Teste de Estruturas de Controle


Exemplo com laos de repetio

<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

Os objetos gerados ficam todos sob controle do programador.


Quando o servidor recebe uma solicitao de uma pgina JSP, gerado um Servlet, e durante esta transformao alguns objetos so gerados automaticamente sem a interveno do programador. Esses objetos so chamados de objetos implcitos

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

Dados compartilhados por todas as pginas de aplicao

exception

javax.lang.Throwable

Excees ou erros desconhecidos

Os dados passados so elementos bsicos do HTML com caixas de texto e e seleo por exemplo.

pageContext

javax.servlet.Jsp.PageContext

Dados de contexto para execuo da pgina

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

Para publicar o atributo na sesso utilizado o mtodo


pageContext.setAttribute()

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

Anda mungkin juga menyukai