Você está na página 1de 29

Aplicao Web

JSP, Servlet, Estrutura de um WAR, web.xml (principais tags)

Java Server Pages

Declaraes, Expresses, Scriptlets, Comentrios e Diretivas

Java Server Pages

JSP uma tecnologia para desenvolvimento de aplicaes WEB que utiliza Java como linguagem de script. A rigor, toda a pgina jsp convertida pelo servidor para uma Servlet.
Na primeira vez em que a pgina executada, o container JSP gera o arquivo .java e .class correspondente pgina jsp (por isso a primeira chamada pgina mais lenta). Nas prximas vezes o container utiliza o .class que j foi gerado para executar a pgina. Uma nova Servlet s ser gerada quando o arquivo jsp for alterado.

Organizado por Rosimeire Teixeira e Alex Nrio

Java Server Pages

Um arquivo jsp contm alm de tags HTML, cdigo java que possibilitam a criao de contedo dinmico. A organizao deste cdigo java na pgina feita atravs de delimitadores especficos divididos 5 categorias:
Declaraes Expresses Scriptlets Comentrios Diretivas

Organizado por Rosimeire Teixeira e Alex Nrio

JSP - Declaraes

So usadas para definir atributos e mtodos especficos para a pgina jsp em questo. A sintaxe de uma declarao : <%! declarao %> O contedo deve seguir a mesma estrutura de declarao de mtodos e atributos em Java.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo declaracao.jsp

<html> <head> <title>Curso de Java 2 - JSP - Declaraes</title> </head> <body> <%! int num; int idade=30; void decrementaIdade() { idade--; } %> </body> </html>

Organizado por Rosimeire Teixeira e Alex Nrio

JSP - Expresses

So utilizadas para retornar um valor String a partir de um trecho de cdigo Java. A sintaxe de uma expresso : <%= expresso %>
O que o servidor jsp faz de fato ao encontrar esta tag numa ) pgina substitu-la por: out.print(expresso). out.print( Por isso o contedo de uma expresso no possui ponto-evrgula no final.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo expressao.jsp
<html> <head> <title>Curso Java 2 - JSP - Expresses</title> </head> <body> <%!int num=9;%> <table border="1"> <tr> <td> A raiz de <%=num%> </td> <td> <input type="text" name="txt_raiz" value="<%=Math.sqrt(num)%>"> </td> </tr> </table> </body> </html>

Organizado por Rosimeire Teixeira e Alex Nrio

JSP - Scriptlets

So utilizados para escrever trechos de cdigos Java na pgina. A sintaxe de um scriptlet : <% cdigo Java %>
Simplificando, o cdigo Java que vlido aqui o mesmo que utilizado dentro de um mtodo numa classe Java

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo scriptlet.jsp
<html> <head> <title>Curso Java 2 - JSP - Scriptlets</title> </head> <body> <table border="1"> <% for (int cont=1;cont < 10;cont++) { %> <tr> <% if (cont%2 == 0) { %> <td bgcolor="pink">Linha Par!</td> <% } else { %> <td bgcolor="green">Linha Impar!</td> <% } %> </tr> <% } %> </table> </body> </html>

Organizado por Rosimeire Teixeira e Alex Nrio

JSP - Comentrios

Existem dois tipos principais de comentrios que podem ser usados em uma pgina JSP :
Comentrios de contedo, que so enviados para o cliente mas no geram uma sada visvel. S possvel v-los editando o cdigo HTML da pgina. Sintaxe: <! comentrio --> <! --> Comentrios JSP, que no so enviados para o cliente. Esto disponiveis apenas nos arquivos JSP. As sintaxes possveis so: <%-- comentrio --%> e <% /* comentrio */ %> <%---%>

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo comentarios.jsp

<html> <head> <title>Curso Java 2 - JSP - Comentrios</title> </head> <body> <table border="1"> <!--Este comentrio vai ser escrito na pgina HTML resultante--> <%--Este comentrio no vai para a pgina resultante--%> <% /*Este comentrio tambm no vai para a pgina resultante*/ %> </table> </body> </html>

Organizado por Rosimeire Teixeira e Alex Nrio

JSP - Diretivas

As diretivas so usadas para fornecer informaes especiais ao container JSP sobre a pgina JSP quando esta compilada para uma Servlet. A sintaxe de uma diretiva : <%@ diretiva %> Os dois tipos principais de diretivas so:
page include

Organizado por Rosimeire Teixeira e Alex Nrio

JSP Diretivas - page

A diretiva page segue a seguinte sintaxe:


<%@ page atributo1=valor1 atributo2=valor2 ... %>

Dos atributos de page, o mais importante para ns neste momento o import. O atributo import funciona de maneira anloga ao import das classes. A sintaxe da diretiva page com o atributo import preenchido fica assim:
<%@ page import=pacote.classe1,pacote.classe2 %> Ou <%@ page import=pacote.classe1%> %> <%@ page import=pacote.classe2%> %>
Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo diretiva_page.jsp
<%@page import="java.util.ArrayList" %> <%@page import="java.util.Date" %> <html> <head> <title>Curso Java 2 - JSP - Diretiva page</title> </head> <body> <% ArrayList listaNomes = new ArrayList(); listaNomes.add("Fulano"); listaNomes.add("Sicrano"); listaNomes.add("Beltrano"); listaNomes.trimToSize(); %> <center> <%=listaNomes.get(0)%>, <%=listaNomes.get(1)%>, <%=listaNomes.get(2)%> <br/> <%=new Date()%> </center> </body> </html>
Organizado por Rosimeire Teixeira e Alex Nrio

JSP Diretivas - include

A diretiva include permite que um arquivo seja includo pagina atual. A sintaxe da diretiva include : <%@ include file=pgina %> Uma boa ilustrao de utilizao de includes quando se deseja reproduzir um cabealho padro para vrias pginas.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo cabecalho.html
<table> <tr> <td colspan="5"> <b>Exemplos da Sintaxe Padro JSP</b> </td> </tr> <tr> <td> <a href="declaracao.jsp">Declarao</a>. </td> <td> <a href="expressao.jsp">Expresses</a>. </td> <td> <a href="scriptlet.jsp">ScriptLets</a>. </td> <td> <a href="comentarios.jsp">Comentrios</a>. </td> <td> Diretivas: <a href="diretiva_page.jsp">page</a> e <a href="diretiva_include.jsp">include</a>. </td> </tr> </table>

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo diretiva_include.jsp

<html> <head> <title>Curso Java 2 - JSP - Diretiva include</title> </head> <body> <%@ include file="cabecalho.html"%> </body> </html>

Organizado por Rosimeire Teixeira e Alex Nrio

Java Server Pages

Objetos implcitos

JSP - Objetos Implcitos

Alm do cdigo e das classes criadas pelo programador, as pginas jsp possuem uma srie de objetos implcitos que so instanciados pelo container JSP para viabilizar o acesso e a transferncia de dados durante a execuo da aplicao web. Assim como todo objeto em Java, cada objeto implcito uma instncia de uma classe ou interface. Segue uma tabela com os nove objetos implcitos disponveis nas pginas jsp

Organizado por Rosimeire Teixeira e Alex Nrio

10

JSP - Objetos Implcitos


OBJETO page config request response out session application pageContext exception CLASSE OU INTERFACE javax.servlet.jsp.HttpJspPage javax.servlet.ServletConfig javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.jsp.JspWriter javax.servlet.http.HttpSession javax.servlet.ServletContext javax.servlet.jsp.PageContext javax.lang.Throwable
Organizado por Rosimeire Teixeira e Alex Nrio

DESCRIO Instncia de servlet da pgina Dados de configurao de servlet Dados de solicitao, incluindo parmetros Dados de resposta Fluxo de sada para contedo da pgina Dados de sesso especficos de usurio Dados compartilhados por todas as pginas de aplicao Dados de contexto para execuo da pgina Erros no capturados ou exceo

JSP Objetos Implcitos

Dentre estes todos estes objetos, os mais relevantes para iniciantes em JSP so:
Os objetos que se referem ao contexto da pgina.
request, session, application e pageContext Mtodos importantes: Object getAttribute(String key) void setAttribute(String key, Object value)

O objeto que representa um fluxo de sada para a pgina


out Mtodos: print() e println()

O objeto que representa um erro inesperado


exception Mtodo importante: String getMessage()

Organizado por Rosimeire Teixeira e Alex Nrio

11

Java Server Pages

Trabalhando com Formulrios

JSP Formulrios (um pouco de HTML)

Um formulrio um modelo para a entrada de um conjunto de dados. O elemento <FORM> delimita um formulrio e contm uma seqncia de elementos de entrada e de formatao do documento. <FORM ACTION="URL" METHOD=mtodo>...</FORM> Os atributos de FORM que nos interessam agora so:
ACTION
Especifica a pgina para a qual sero enviados os dados do formulrio.

METHOD
Seleciona um mtodo para acessar o URL de ao. Os mtodos usados atualmente so GET e POST. Ambos os mtodos transferem dados do browser para o servidor, com a seguinte diferena bsica: POST os dados entrados fazem parte do corpo da mensagem enviada para o servidor; transfere grande quantidade de dados. GET os dados entrados fazem parte do URL (endereo) associado consulta enviada para o servidor; suporta at 128 caracteres.
Organizado por Rosimeire Teixeira e Alex Nrio

12

JSP Formulrios (um pouco de HTML)

Os formulrios podem conter qualquer formatao - pargrafos, listas, tabelas, imagens - exceto outros formulrios. Em especial, colocamos dentro da marcao de <FORM> as formataes para campos de entrada de dados, que so trs: <INPUT>, <SELECT> e <TEXTAREA>. Todos os campos de entrada de dados tm um atributo NAME, ao qual associamos um nome, que ser utilizado posteriormente para capturar estes dados em Java. O envio dos dados do formulrio para a pgina indicada no action da tag <FORM> feito atravs do boto submit. <INPUT TYPE=SUBMIT VALUE="Enviar"> Para manipular os dados vindos do formulrio esta pgina destino deve receber estes dados e trat-los em Java.
Organizado por Rosimeire Teixeira e Alex Nrio

Servlets

Ciclo de vida, Principais mtodos, Requisies e respostas, Sesso

13

Servlet Introduo

Mdulos de software executados em um servidor Web para atender requisies de aplicaes cliente e prestarlhe algum servio. Protocolo utilizado: HTTP; Processa dados de um formulrio HTML e gera resposta dinmicas para o cliente. Servidor Web:
Software desenvolvido de acordo a especificao de Servlet Exemplo: Apache Tomcat (http://jakarta.apache.org/tomcat)

Biblioteca necessria:
servlet.jar
Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Estrutura bsica

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { //Insira o codigo aqui. } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { //Insira o codigo aqui. } }

Organizado por Rosimeire Teixeira e Alex Nrio

14

Servlet Ciclo de vida

HttpServlet : init(), destroy(), service(); Mapeamento de requisies para servlets:


Se no existe uma instncia para a servlet invocada:
Cria-se uma instncia da servlet; Invoca o mtodo init();

Invoca o mtodo service() passando os objetos de requisio e resposta como parmetro;

Ao remover uma servlet:


Invoca o mtodo destroy();

Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Principais mtodos

doGet(...)
Processam requisies do tipo GET;

doPost(...)
Processam requisies do tipo POST;

So invocados automaticamente pelo mtodo service() da classe HttpServlet;

Organizado por Rosimeire Teixeira e Alex Nrio

15

Servlet

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AloMundo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println(Al mundo dos Servlets!); out.close; } } /* ANEXO 2 CODIGO 1 */
Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Executando

Copiar a classe compilada para:


<TOMCAT_HOME>/webapps/ROOT/WEB-INF/classes

Para executar a servlet:


http://<server>:<porta>/servlet/AloMundo Exemplo:
http://localhost:8080/servlet/AloMundo

Exerccio:
Criar a servlet AloMundo e invoc-la a partir do navegador web.

Organizado por Rosimeire Teixeira e Alex Nrio

16

Servlet Contexto

Considerando a execuo de servlet demonstrada, imaginemos agora um servidor, no qual tenhamos diversas aplicaes rodando. Problemas:
Teramos classes de aplicaes diferentes misturadas; Dificuldade de manuteno; Desorganizao;

Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Contexto

Diretrio no servidor onde colocaremos nossa aplicao; O nome desse diretrio identificar nossa aplicao no servidor; A aplicao ser mapeada para um contexto especifico; Cada aplicao ter seu prprio contexto; Nomenclatura:
<TOMCAT_HOME>/webapps/<DIR_CONTEXTO>

Exemplo:
<TOMCAT_HOME>/webapps/treinamento/

Organizado por Rosimeire Teixeira e Alex Nrio

17

Aplicao Web

Organizado por Rosimeire Teixeira e Alex Nrio

Aplicao Web arquivo compactado

Organizado por Rosimeire Teixeira e Alex Nrio

18

Web.xml

Arquivo de configuraes de uma aplicao web.


Deployment Descriptor.

ANEXO 2 CODIGO 2.

Organizado por Rosimeire Teixeira e Alex Nrio

Configurando Servlet

A classe deve ser colocada no diretrio:


<CONTEXTO>/<WEB-INF>/classes

Alterar o arquivo web.xml


Incluir configurao referente a nova servlet

Organizado por Rosimeire Teixeira e Alex Nrio

19

Configurando Servlet

Exerccio:
Criar um contexto no servidor; Criar os diretrios <CONTEXTO>WEB-INF/classes; Copiar a servlet para o diretrio WEB-INF/classes; Incluir a servlet AloMundo no arquivo web.xml; Executar a servlet a partir do browser.

Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Requisio HTTP

Resposta HTTP

Organizado por Rosimeire Teixeira e Alex Nrio

20

Modelo Requisio e Resposta

Trabalhando com requisies:


Objeto HttpServletRequest
request.getParameter(NOME_PARAM); Retorno: String. - NOME_PARAM: Nome do parmetro da requisio. request.setAttribute(NOME_ATTRIB, Object); request.getAttribute(NOME_ATTRIB); Retorno: Object;
Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Trabalhando com requisies:


Objeto HttpServletRequest
request.getParameterNames(); request.getParameterValues(NOME_PARAM); request.setAttribute(NOME_ATTRIB, Object); request.getAttribute(NOME_ATTRIB); request.getRequestDispatcher(/URL).forward(request, response);

Organizado por Rosimeire Teixeira e Alex Nrio

21

Modelo Requisio e Resposta

Trabalhando com requisies:


Objeto HttpServletRequest
Encaminhando a requisio para um JSP ou outra servlet: JSP: request.getRequestDispatcher("/jsp/formulario.jsp").forward( request, response); Servlet: request.getRequestDispatcher("/teste/AloMundo").forward(request, response);

Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Exerccio:
ANEXO 2 CODIGO 3 e 4 Exerccios Prticos

Organizado por Rosimeire Teixeira e Alex Nrio

22

Modelo Requisio e Resposta

Trabalhando com resposta:


Objeto HttpServletResponse
response.getWriter(); Retorno: PrintWriter response.getOutputStream(); Retorno: PrintStream;

Exemplo:
PrintWriter writer = response.getWriter(); OutputStream out = response.getOutputStream();
Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Exerccio:
Exerccio Prtico 8 ANEXO 2 CODIGO 6, 7 e 8

Organizado por Rosimeire Teixeira e Alex Nrio

23

Sesso

Em uma pgina de comrcio eletrnico, tal como Americanas.com, possvel navegar por diversas pginas e comprar diversos produtos, bastando adicion-los no carrinho de compras. Em aplicaes web desenvolvidas em Java isso pode ser implementado atravs do conceito de sesses.

Organizado por Rosimeire Teixeira e Alex Nrio

Sesso

Uma sesso um espao de memria reservado no servidor para cada usurio logado na aplicao. A sesso restrita para cada usurio. Independe de configuraes feitas pelo usurio.
Diferente dos cookies.

Toda sesso tem um tempo de vida limitado.


Informaes permanentes devem ser guardadas em banco de dados.

Organizado por Rosimeire Teixeira e Alex Nrio

24

Sesso

Objeto HttpSession :
HttpSession session = request.getSession(); session.setAttribute(NOME_ATTRIB, Object); session.getAttribute(NOME_ATTRIB); session.getAttributeNames(); session.invalidate();

Organizado por Rosimeire Teixeira e Alex Nrio

Sesso

Exerccio:
Criar uma tabela usurio com os campos: nome, login, senha. Criar a classe UsuarioDAO com o mtodo:
public UsuarioVO login(UsuarioVO usuario) {} O mtodo devera retornar um objeto UsuarioVO preenchido caso o usurio seja autenticado. Caso contrarrio, lance uma AplicacaoException (Anexo 2 Cod. 9) com a mensagem: Login ou senha invlidos.

Criar um servlet para processar a requisio de login e guardar o objeto UsuarioVO na sesso. Crie uma servlet, UsuarioLogadoServlet, para obter o usurio logado da sesso e exibir seus dados numa pgina web.

Organizado por Rosimeire Teixeira e Alex Nrio

25

JSTL

Configurando:
web.xml
<taglib> <taglib-uri>/jstl/core</taglib-uri> <taglib-location>/WEB-INF/tlds/c.tld</taglib-location> </taglib>

JSP
<%@taglib prefix="c" uri="/jstl/core"%>

<CONTEXTO>/WEB-INF/lib
Colocar o arquivo jstl.jar

Organizado por Rosimeire Teixeira e Alex Nrio

JSTL

<c:out>
<c:out value=${requestScope.cliente.nome}>

<c:set>
<c:set var="style" value="grid_style_item1" />

<c:url>
<c:url value=/treinamento/Formulario/>

Organizado por Rosimeire Teixeira e Alex Nrio

26

JSTL

<c:if>
<c:if test=${not empty requestScope.cliente}>

<! Faa alguma coisa -->


</c:if>

<c:choose>
<c:choose test=${not empty requestScope.cliente}> <c:when> <! Faa alguma coisa --> </c:when> <c:otherwise> <! Se no faa isso --> </c:otherwise> </c:choose>
Organizado por Rosimeire Teixeira e Alex Nrio

JSTL

<c:forEach>
<c:forEach itens=requestScope.collCliente var=cliente > <! Repita esse bloco --> <c:out value="${cliente.nome}"/> </c:forEach>

<fmt:formatDate
<jsp:useBean id="now" class="java.util.Date" /> <fmt:formatDate value="${now}" pattern="dd/MM/yyyy" />
Organizado por Rosimeire Teixeira e Alex Nrio

27

Um pouco de Padres de Projetos

Value Object VO DAO Data Access Object MVC Model View Controler RN ou BO Business Object Business Delegate Facade

Organizado por Rosimeire Teixeira e Alex Nrio

Padres de Projetos

Value Object VO
Usado para transferir dados de negcio.

DAO Data Access Object


Abstrai e encapsula todo acesso a fonte de dados tal como um Banco de Dados.

MVC Model View Controler


Separa as funcionalidades do modelo de negcio da camada de apresentao e do controle lgico que usa essas funcionalidades.

Organizado por Rosimeire Teixeira e Alex Nrio

28

Padres de Projetos

RN ou BO Business Object
Encapsula as regras de negcio do sistema.

Business Delegate
Age na camada de cliente como uma abstrao para o servio de negcio.

Facade
Encapsula a complexidade de interees entre os objetos de negcios que participam no fluxo de trabalho do sistema. Ele gerencia os objetos de negcio e prov camada cliente um servio de acesso uniforme a camada de negcio.

Organizado por Rosimeire Teixeira e Alex Nrio

Referncias

Santos, Rui Rossi dos. Programando em Java 2 Teoria e Aplicaes. Rio de Janeiro: Axcel Books, 2004. Caelum Ensino e Solues em Java. Java e Orientao a Objetos. So Paulo: 2004. The J2EE Tutorial. <http://java.sun.com/j2ee/1.4/docs/tutorial/doc/> Core J2EE Patterns: <http://java.sun.com/blueprints/corej2eepatterns/index.html>

vedada a utilizao deste material para ministrar cursos.


Organizado por Rosimeire Teixeira e Alex Nrio

29