Anda di halaman 1dari 43

Manual JAVA - JSP

Ambiente de Desenvolvimento

A plataforma Java

Java uma plataforma de desenvolvimento de software, sendo composta de vrias partes: conjuntos de bibliotecas, linguagem de programao e mquina virtual Java (JVM). A linguagem totalmente orientada a objetos, robusta, segura e independente de plataforma (sistema operacional). A mquina virtual Java torna possvel que aplicaes feitas em Java funcionem em diferentes sistemas operacionais. Permitindo tambm a utilizao de servios como coleta de lixo automtica e implementao de threads.

JSE Java Standard Edition a especificao do Java que contm APIs com as funes bsicas do Java como I/O, multithread, network, conectividade com bancos de dados entre outras.

JME Java Micro Edition a especificao Java que contm APIs com funcionalidades para desenvolvimento de aplicaes para pequenos dispositivos como agendas eletrnicas, telefones celulares, palmtop e aparelhos eletrnicos em geral que possuam uma KVM (Mquina Virtual para pequenos dispositivos).

JEE Java Enterprise Edition a especificao Java que contm APIs com funcionalidades especficas para o desenvolvimento de aplicaes para servidores tais como: Servlets, JSP, entre outras.

Caractersticas da Plataforma Java: 100% Orientada a Objetos; Independente de Plataforma (Windows, Unix, Linux, Macintosh, Solaris); Segura; Distribuda;

Manual JAVA - JSP Dinmica; Multithread; Java Virtual Machine(JVM) Principal funo alocao e desalocao de memria, entre outras. Class Loader Carrega arquivos .class para memria. ByteCode verifier - Verifica integridade do arquivo .class. Atualmente, temos a JVM disponibilizada em diversas formas: JRE Java Runtime Environment; KVM Mquina Virtual para pequenos dispositivos; JavaCard; JVM na maioria dos browsers do mercado.

Web Container Java Podemos dizer que um Web Container um servidor web que contm toda a infraestrutura necessria para hospedar nossas pginas, incluindo tambm suporte a linguagem de programao Java, dando a possibilidade de desenvolver sites dinmicos com acesso a banco de dados. Um Web Container Java deve seguir as especificaes JEE. O Web Container gerencia o ciclo de vida, da suporte ao multithread, segurana e suporte a pginas JSP e Servlets.

Principais Web Containers:

Manual JAVA - JSP Apache Tomcat; Jetty.

Apache Tomcat O Tomcat tem evoludo paralelamente evoluo da Plataforma Java EE e suas especificaes para web, especialmente Java Servlet e JavaServer Pages (JSP). O quadro a seguir relaciona as verses de Tomcat com as respectivas verses de tecnologias suportadas.

Tomcat 6.0 5.5 4.1

Servlet 2.5 2.4 2.3

JSP 2.1 2.0 1.2

JEE JEE 1.5 J2EE 1.4 J2EE 1.3

O Tomcat exige a instalao prvia do Java, ele procura a varivel de ambiente JAVA_HOME que deve apontar para o diretrio de instalao do Java. Exemplo: set JAVA_HOME=[caminho da instalao do Java]

Estrutura de diretrio de uma aplicao Web Java Toda aplicao web Java deve conter uma estrutura que esta definida na especificao JEE. Exemplo: WebContent (Raiz da aplicao); WEB-INF(Protegido pelo Web Container); lib(Bibliotecas utilizadas pela aplicao ); classes(Pacotes e classes da aplicao);

No diretrio raiz teremos nossas pginas, arquivos CSS, JavaScript(JS), imagens. O diretrio WEB-INF protegido pelo Web Container, no podendo ser acessado externamente, dentro dele fica o deployment descriptor ( web.xml ).

Manual JAVA - JSP

Java Servlet Servlets so programas Java que rodam dentro de um web container. So desenhados para suportar um modelo de processamento baseado em request/response utilizado em web server. No modelo de request/response, um cliente manda uma mensagem (request) ao servidor e o servidor responde com uma mensagem de resposta (response).

Java Server Pages JSP Java Server Pages so pginas Html que possuem cdigo Java embutido entre suas tags visando facilitar a manipulao dos dados, e a interao com os componentes Java que transportam estas informaes. O arquivo JSP no ambiente de desenvolvimento fica localizado na pasta web juntamente com as pginas html, figuras, js, css, etc. Sugerimos que estes arquivos fiquem organizados em pastas e subpastas de acordo com a lgica do negcio e das boas prticas de desenvolvimento como, por exemplo, colocar as figuras em uma subpasta especifica para figuras, entre outras. Uma vez que a pgina JSP foi colocada em um Web Container, quando ela for chamada pela primeira vez, o Web Container ir interpret-lo gerando seu cdigo Java, transformando-o em um servlet e em seguida compilando-o gerando seu class. A partir da segunda chamada j estar pronto. Por causa deste procedimento perceberemos que somente na primeira vez, o display da pgina chamada ser um pouco mais lenta. Exemplo JSP:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO8859-1"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>PrimeiroJSP</title> </head> <body>

Manual JAVA - JSP


Nosso primeiro JSP <br><br> <% double res = 20%3; %> O Resto da diviso de 20 por 3 :<%=res%><br> </body> </html>

Ambiente de Desenvolvimento Para montarmos nosso ambiente de desenvolvimento devemos seguir os seguintes passos: 1. Instalao do Java SE (JSE), poder ser encontrado no link http://www.java.com/pt_BR/download/

2. Instalao do Web Container Apache Tomcat, poder ser encontrado no link http://tomcat.apache.org/download-60.cgi

3. Instalao do Ferramenta NetBeans, poder ser encontrado no link http://netbeans.org/

Dicas para a Instalao do Java: Lembre-se de baixar o JDK (java development kit, kit de desenvolvimento java), e no o JRE (java runtime environment, ambiente de execuo java). O JDK j vem com um JRE, porm o contrrio no verdade. O JRE vem sem compilador e ferramentas para desenvolvimento. Depois de ter feito o downloads, execute o arquivo e faa a instalao normalmente. Aps instalado hora de configurar seu computador para rodar o JAVA. Configurar a varivel PATH do seu Windows. V em iniciar->painel de controle->system->variveis de ambiente-> Criar varivel JAVA_HOME VALOR: "Endereo de onde voc instalou o JDK". Alterar a varivel PATH VALOR: C:\Sun\AppServer\bin;C:\Java\jdk1.5.0_6\bin Execute o comando : java -version (mostra verso do java instalado) 5

Manual JAVA - JSP

Dicas para a Instalao do Apache Tomcat: Baixe a verso zipada e descompacte em um diretrio de fcil acesso. Para iniciar o Tomcat, dentro do diretrio apache-tomcat-xxx\bin, execute o arquivo startup.bat Para finalizar o Tomcat, dentro do diretrio apache-tomcat-xxx\bin, execute o arquivo shutdown.bat Caso no tenha criado a varivel de ambiente JAVA_HOME, o Tomcat no ir funcionar, ento ser necessrio criar as variveis dentro do arquivo statup.bat e shutdown.bat

Dicas para a Instalao do NetBeans: Baixe a verso completa sem o JDK. Durante o processo de instalao ser solicitado que voc indique o diretrio de instalao do Java.

JSP Aplicaes Java para Web - Java Servlets , JSP - Relao entre Servlets e JSP
Java Servlet API Servlets so programas Java que rodam dentro do web container. So desenhados para suportar um modelo de processamento baseado em request/response utilizado em web servers. No modelo de request/response, um cliente manda uma mensagem (request) ao servidor e o servidor responde com uma mensagem de resposta (response). Voc utilizar a Java Servlet API para criar seus servlets. Para utilizarmos os recursos do servlet, devemos herdar a classe: javax.servlet.http.HttpServlet Mtodos do ciclo de vida. init(): mtodo chamado no momento em que o servlet instanciado service(): todas as chamadas de clientes so gerenciadas por este mtodo destroy(): antes do garbage collector remover o servlet da memria, o mtodo destroy executado e a partir da o ciclo de vida do servlet finalizado

Outros mtodos. 6

Manual JAVA - JSP getServletConfig(): utilizado na obteno de configuraes do servlet getServletInfo(): utilizado na obteno de informaes do servlet, como por exemplo autor,verso, etc. doGet(): todas as requisies que so encaminhadas para um servlert via HTTP GET so tratadas neste mtodo doPost(): todas as requisies que so encaminhadas para um servlert via HTTP POST so tratadas neste mtodo doPut(): todas as requisies que so encaminhadas para um servlert via HTTP PUT so tratadas neste mtodo doDelete(): todas as requisies que so encaminhadas para um servlert via HTTP DELETE so tratadas neste mtodo

Primeiro Servlet A funo de um servlet receber as requisies de um cliente (browser) fazer o tratamento desta requisio e retornar uma resposta para o cliente. Esta resposta deve ser em formato HTML para que o browser possa interpret-la e mostrar as informaes requisitadas pelo usurio de uma forma amigvel. O objeto HttpServletResponse o canal que possumos para tratar as respostas ao browser e neste primeiro exemplo estaremos utilizando tambm o objeto PrintWriter que escreve os comandos HTML. Todo Servlet deve ser configurado e mapeado no arquivo web.xml (deployment descriptor ). Seguir a orientao do professor para montagem do projeto no eclipse.
package br.com.dw.servlet; 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; /** * PrimeiroServlet */ public class PrimeiroServlet extends HttpServlet { private static final long serialVersionUID = 1L; public PrimeiroServlet() { super();

Manual JAVA - JSP


} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println(" <head> <title> Primeiro Servlet </title> </head>"); out.println(" <body>"); out.println(" <h1> Primeiro Servlet</h1>"); out.println(" </body>"); out.println("</html>"); out.close(); } }

Web.xml deployment descriptor <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>DWaula2</display-name> <servlet> <description> </description> <display-name>PrimeiroServlet</display-name> <servlet-name>PrimeiroServlet</servlet-name> <servlet-class> br.com.dw.servlet.PrimeiroServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PrimeiroServlet</servlet-name> <url-pattern>/primeiroServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>

Request / Response

Manual JAVA - JSP Um servlet se comunica com um cliente atravs do protocolo HTTP (request/response) e para isto utiliza a implementao das interfaces javax.servlet.HttpServleRequest e javax.servlet.HttpServletResponse. - javax.servlet.http.HttpServletRequest HttpServletRequest estende a interface ServletRequest provendo informaes de requisio aos servlets HTTP.O container cria um HttpServletRequest e passa como argumento para os mtodos doGet, doPost, etc. - javax.servlet.http.HttpServletResponse Esta interface estende a interface ServletResponse provendo funcionalidades especficas para o protocolo http no envio de respostas.O container cria um HttpServletResponse e passa como argumento para os mtodos doGet, doPost, etc. Seguir a orientao do professor.

texto.html <html> <head> <title>texto</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <form name="formName" method="GET" action="converte"> Digite uma palavra: <input type="text" name="txtNome"><br> <input type="submit" name="submit" value="Enviar"> <input type="reset" name="reset" value="Reset"></form> </body> </html> TextoMaiusculo.Java import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: TextoMaiusculo * */ public class TextoMaiusculo extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public TextoMaiusculo() { super(); } public void destroy() { System.out.println("DESTROY");

Manual JAVA - JSP


super.destroy(); } public void init() throws ServletException { super.init(); System.out.println("INIT"); }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String texto = request.getParameter("txtNome").toUpperCase(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println(" <head><title>Maiusculo</title></head>"); out.println(" <body>"); out.println(" <h1>" + texto + "</h1>"); out.println(" </body>"); out.println("</html>"); } }

Veja que o Web.xml sofre alterao, deve ser adicionado s linhas abaixo, por favor incluir a configurao de <load-on-startup> no xml. <servlet> <description> </description> <display-name> TextoMaiusculo</display-name> <servlet-name>TextoMaiusculo</servlet-name> <servlet-class> br.com.treinamento.servlet.TextoMaiusculo</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>TextoMaiusculo</servlet-name> <url-pattern>/converte</url-pattern> </servlet-mapping> O servlet TextoMaiusculo.java recebe a seguinte url: http://localhost:8080/<nomeProjeto>/converte?txtNome=joao+virgulino&submit=Enviar Se verificarmos o arquivo Texto.html no formulrio HTML existe um parmetro chamado method que possui o valor GET. Esta no uma forma segura pois os dados da pgina esto disponveis na URL. Quando especificamos o mtodo de transferncia como POST, os dados so transferidos via stream, isto , de uma forma que no fique visvel na URL . 10

Manual JAVA - JSP Para verificarmos a diferena, no arquivo texto.html onde aparece a string method="GET" substitua por method="POST". E no servlet TextoMaiusculo.java altere e acrescente o mtodo doPost com o mesmo cdigo que temos no mtodo doGet.

Java Server Pages

Java Server Pages so pginas Html que possuem cdigo java embutido entre suas tags visando facilitar a manipulao dos dados e a interao com os componentes java que transportam estas informaes. O arquivo jsp no ambiente de desenvolvimento fica localizado na pasta web juntamente com as pginas html, figuras, js, css, etc. Sugerimos que estes arquivos fiquem organizados em pastas e subpastas de acordo com a lgica do negcio e das boas praticas de desenvolvimento como, por exemplo, colocar as figuras em uma subpasta especifica para figuras, entre outras. Uma vez que a pgina jsp foi colocada em um Web Container, quando ele for chamado pela primeira vez, o Web Container ir interpret-lo gerando seu cdigo Java transformando-o em um servlet e em seguida compilando-o gerando seu class e a partir da segunda chamada j estar pronto. Por causa deste procedimento, perceberemos que somente na primeira vez, o display da pgina chamada ser um pouco mais lenta.

Scriptlets Scriptlets so blocos de cdigo java que so executados durante o processo de request de uma pgina e ficam dentro de tags <% %>.

Expressions Com as Expressions podemos passar valores de variveis java ao cdigo html. 11

Manual JAVA - JSP Para isto, criamos um scriptlet, como mostrado acima, e antes da varivel colocamos um sinal de igualdade para indicar que queremos mostrar o contedo da varivel. Ex: <%= obj.get..... %>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Primeiro JSP</title> </head> <body> Nosso primeiro JSP <br><br> <% double res = 20%3; %> O Resto da diviso de 20 por 3 :<%=res%><br> </body> </html>

Declaraes So scriptlets iniciados por um sinal de exclamao ! onde podemos declarar variveis e mtodos que sero utilizados na pgina. <%! declaraes %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%! String aux = "Declaraes"; public String chamandoUmMetodo() { return aux; } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Declaraco</title> </head> <body> <p><%=chamandoUmMetodo()%></p> </body> </html>

12

Manual JAVA - JSP

Relao entre Servlets e JSP

As paginas JSP s interagem com os Servlets atravs do envio de formulrios HTML ou link chamando a URL mapeada para o funcionamento do Servlet dessa forma podemos dar dinamismo para nossas paginas. Podemos verificar em todos os exemplos executados ate agora essa forma de relao, como j explicado acima os Servlets atendem os pedidos das JSPs atravs dos mtodos doGet e doPost. Vamos criar uma pagina index.jsp, nela teremos os link para acessar os exemplos executados at o momento.

Web.xml <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>NFeWeb</display-name> <listener> <listener-class>com.ford.nfe.listener.NFeListener</listener-class> </listener> <listener> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet> <display-name>MFGAction</display-name> <servlet-name>MFGAction</servlet-name> <servlet-class>com.ford.nfe.actions.MFGActionServlet</servlet-class> </servlet> <servlet> <display-name>XmlQG</display-name> <servlet-name>XmlQG</servlet-name> <servlet-class>com.ford.nfe.servlets.XmlQGServlet</servlet-class> </servlet> 13

Manual JAVA - JSP

<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MFGAction</servlet-name> <url-pattern>/MFGAction</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XmlQG</servlet-name> <url-pattern>/XmlQG</url-pattern> </servlet-mapping> <session-config> <session-timeout>20</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <taglib> <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <resource-ref id="ResourceRef_1215085977300"> <res-ref-name>jdbc/DynaPropDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Application</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> </web-app>

Elementos de Criao de Scripts Tags Declarao,Expresso,Scriplet e Comentrios.


14

Manual JAVA - JSP

Scriptlets Scriptlets so blocos de cdigo java que so executados durante o processo de request de uma pgina e ficam dentro de tags <% %>. Veja, por exemplo, como formatar a data exibida no documento:
<%@ page language="java" import="java.util.*" %> <html> <head> <title>Data Atual Formatada</title> </head> <body> <% String dias[] = {"Domingo", "Segunda-feira", "Tera-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sbado"}; String meses[] = {"Janeiro", "Fevereiro", "Maro", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; Calendar hoje = Calendar.getInstance(); String data = dias[hoje.get(Calendar.DAY_OF_WEEK) - 1] + ", " + hoje.get(Calendar.DAY_OF_MONTH) + " de " + meses[hoje.get(Calendar.MONTH)] + " de " + hoje.get(Calendar.YEAR);

%>

<p><b>Hoje :</b> <%= data %></p> </body> </html>

Expresses (Expressions) Com as Expressions podemos passar valores de variveis java ao cdigo html. Para isto, criamos um scriptlet, como mostrado acima, e antes da varivel colocamos um sinal de igualdade para indicar que queremos mostrar o contedo da varivel. Agora hora de aprofundarmos um pouco e entender como expresses realmente funcionam. O primeiro ponto a observar que voc no precisa colocar ponto-e-vrgula aps o trecho de cdigo contido em uma expresso. Por exemplo, veja o que acontece quando executamos uma pgina JSP contendo o seguinte trecho de cdigo:
<%= Calendar.getInstance().getTime(); %>

15

Manual JAVA - JSP

O container reclamar do ponto-e-vrgula no final do cdigo da expresso e exibir a seguinte mensagem de erro: org.apache.jasper.JasperException: Unable to compile class for JSP An error occurred at line: 8 in the jsp file: /data.jsp Generated servlet error: Syntax error on token ";", delete this token Retire o ponto-e-vrgula e a pgina ser executada sem erros. Outro ponto a observar que o contedo de uma expresso precisa ser do tipo String. Se esta exigncia no for cumprida, o mtodo toString da classe referenciada chamado automaticamente. Veja um exemplo:
<%@ page language="java" import="java.util.*" %> <html> <head> <title>Data e Hora Atual</title> </head> <body> <% %> <p><b>Data e Hora Atual:</b> <%= data %></p> </body> </html> Date data = new Date();

Veja que aqui ns usamos um Scriptlet para criar uma instancia da classe Date e armazen-la na varivel data:
<% %> Date data = new Date();

Em seguida exibimos o contedo desta varivel na pagina usando uma expresso:


<%= data %>

Como a varivel data do tipo Date, o mtodo toString desta classe chamado automaticamente, produzindo o resultado j esperado. Tenha isso em mente quando comear a desenvolver suas prprias classes para uso em pginas JSP. Para finalizar este estudo sobre expresses, vamos ver como usar a sintaxe XML. Veja um exemplo:
<%@ page language="java" import="java.util.*" %> <html> <head> <title>Data e Hora Atual</title>

16

Manual JAVA - JSP


</head> <body> <b>Data: </b><jsp:expression>new Date()</jsp:expression> </body> </html>

Veja que agora a expresso est contida entre as tags <jsp:expression> e </jsp:expression>. No existe nenhuma imposio sobre qual estilo usar. claro que se suas pginas JSP forem projetadas para serem armazenadas como XML, a sintaxe XML ser a mais adequada.

Declaraes(Declaration) So scriptlets iniciados por um sinal de exclamao ! onde podemos declarar variveis e mtodos que sero utilizados na pgina. Mtodos so declarados em uma pgina JSP usando as tags <%! e %>. Veja um exemplo:
<html> <head><title>Aprendendo JSP</title></head> <body> <%! // declara um mtodo que retorna o fatorial de um // nmero informado long fatorial(int n){ if(n < 0){ return -1; } else if(n == 0){ return 1; } else{ return n * fatorial(n-1); } } %> O fatorial de 5 : <%= fatorial(5) %> </body> </html>

Comentrios (Comments)
17

Manual JAVA - JSP

So utilizados para o propsito de documentao entre os desenvolvedores e no afetam a sada da pgina JSP. A sintaxe de um comentrio JSP a seguinte:
JSP <%--comentario, aqui podemos colocar o texto que for necessario--%>

Html

<!-- Comentario em html ou xml -->

Converso de Tipos - Mtodos de converses de tipos.


Convertendo tipos. Em uma aplicao Web, quando estamos passando parmetros via POST ou GET, esses parmetros sempre sero recebidos como String atravs do mtodo getParameter(nome do parmetro que deseja ler) do objeto Resquest. Dessa forma quando temos a necessidade de trabalha com outros tipos precisamos fazer a converso para o tipo que queremos utilizar.

Exemplo:

<% int valor = resquest.getParameter(nome parmetro ); %>

O cdigo acima gera um erro na nossa pagina web (JSP), pois no possvel atribuir o objeto String para uma varivel do tipo inteiro.

18

Manual JAVA - JSP

Convertendo uma String em inteiro <% int valor = Integer.parseInt(resquest.getParameter(nome parmetro )); %>

Nesses casos devemos nos preocupar um tratar uma possvel exceo, pois poderemos ter um exceo por erro de converso de tipo. Exemplo: No possvel converter um texto maria e um int, caso isso ocorra ser lanada uma NumberFormatException.

Convertendo uma String em float <% float valor = Float.parseFloat(resquest.getParameter(nome parmetro )); %>

Convertendo uma String em double <% double valor = Double.parseDouble(resquest.getParameter(nome parmetro )); %>

Convertendo uma String em long <% long valor = Long.parseLong(resquest.getParameter(nome parmetro )); %>

Convertendo uma String em Date


19

Manual JAVA - JSP

<% DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); Date data = (Date)formatter.parse(request.getParameter("nome parmetro")); %>

Exemplo: tipos.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-88591"> <title>tipos</title> </head> <body> <form method="post" action="converte.jsp" > Inteiro : <input type="text" name="valorInteiro" value="" /><br> Float : <input type="text" name="valorFloat" value="" /><br> Double : <input type="text" name="valorDouble" value="" /><br> Long : <input type="text" name="valorLong" value="" /><br> Date : <input type="text" name="valorData " value="" /><br> <input type="submit" name="bt1" value="Converter Tipos" /> </form> </body> </html>

Exemplo: converte.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <% int i = 0; float f = 0; double d = 0; long l = 0; Date data= null; boolean erro = false; DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); try{

i = Integer.parseInt(request.getParameter("valorInteiro")); f = Float.parseFloat(request.getParameter("valorFloat")); d = Double.parseDouble(request.getParameter("valorDouble")); l = Long.parseLong(request.getParameter("valorLong")); data = (Date)formatter.parse(request.getParameter("valorData"));

20

Manual JAVA - JSP

}catch(Exception e){ // tratar erro de converso System.out.println("Erro : " + e.toString()); erro = true; } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-88591"> <title>Exemplo de Converso</title> </head> <body> Valores Convertidos:<br> <% %> <p>No foi possivel converter alguns dos valores por favor tente novamente</p> <% %> }else{ if(erro){

inteiro : <%=i%><br> float : <%=f%><br> double : <%=d%><br> long : <%=l%><br> data : <%=data%><br> <% %> }

</body> </html>

Objetos implcitos JSP.


So variveis locais previamente inicializadas Disponveis nos blocos <% ... %> (scriptlets) de qualquer pgina (exceto session que precisa ter o atributo session da diretiva @page habilitado e exception que dependem do atributo isErrorPage habilitado)

Objetos do servlet
21

Manual JAVA - JSP

1. page 2. config

Entrada e sada 1. request 2. response 3. out

Objetos contextuais 1. session 2. application 3. pageContext

Controle de excees 1. exception

22

Manual JAVA - JSP

Objeto page Referncia para o servlet gerado pela pgina Equivale a "this" no servlet

Pode ser usada para chamar qualquer mtodo ou varivel do servlet ou superclasses Tem acesso aos mtodos da interface javax.servlet.jsp.JspPage (ou HttpJspPage) Pode ter acesso a mais variveis e mtodos se estender alguma classe usando a diretiva @page extends: <%@ page extends="outra.Classe" %>

Exemplo: <%@ page info="Demonstrao do Objeto Implcito Page" %> Page Info: <%= getServletInfo() %>

Objeto config Referncia para os parmetros de inicializao do servlet (se existirem) atravs de objeto ServletConfig Equivale a page.getServletConfig() Exemplo <%= config.getInitParameter("nome parmetro")%>

Parmetros de inicializao so fornecidos na instalao do servlet no servidor, atravs de <init-param> de <servlet> em web.xml. preciso declarar a pgina no web.xml
<servlet> <servlet-name>pagina</servlet-name> <jsp-file>/pagina.jsp</jsp-file> <init-param> <param-name>usuario</param-name> <param-value>test</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>pagina</servlet-name>

23

Manual JAVA - JSP


<url-pattern>/pagina.jsp</url-pattern> </servlet-mapping>

Objeto request

Referncia para os dados de entrada enviados na requisio do cliente (no GET ou POST, por exemplo, em HTTP) um objeto do tipo javax.servlet.http.HttpServletRequest

Usado para: Guardar e recuperar atributos que sero usadas enquanto durar a requisio (que pode durar mais de uma pgina) Recuperar parmetros passados pelo cliente (dados de um formulrio HTML, por exemplo) Recuperar cookies Descobrir o mtodo usado (GET, POST)

String method = request.getMethod();

Exemplo

URL no browser:

http://servidor/programa.jsp?nome=Fulano&id=5

Recuperao dos parmetros no programa JSP: <% String nome = request.getParameter("nome"); String idStr = request.getParameter("id"); int id = Integer.parseInt(idStr);
24

Manual JAVA - JSP

%> <p>Bom dia <%=nome %>! (cod: <%=id %>

Cookies Cookie[] c = request.getCookies()

Objeto response

Referncia aos dados de sada enviados na resposta do servidor enviada ao cliente um objeto do tipo javax.servlet.http.HttpServletResponse

Usado para: Definir o tipo dos dados retornados (default: text/thml) Criar cookies Cookie c = new Cookie("nome", "valor"); response.addCookie(c); Definir cabealhos de resposta Redirecionar

response.sendRedirect("pagina2.html");

25

Manual JAVA - JSP

Objeto out Representa o stream de sada da pgina (texto que compe o HTML que chegar ao cliente). instncia da classe javax.servlet.jsp.JspWriter (implementao de java.io.Writer) Equivalente a response.getWriter(); Principais mtodos: print() e println() - imprimem Unicode Os trechos de cdigo abaixo so equivalentes
<% for(int i =0;i<10;i++){ out.println("<p>Linha = ["+i+"]</p>"); }

%>

Ou
<% %> <% %> } for(int i =0;i<10;i++){ <p>Linha = [<%=i%>]</p>

26

Manual JAVA - JSP

Objeto session Representa a sesso do usurio. O objeto uma instncia da classe javax.servlet.http.HttpSession. til para armazenar valores que devero permanecer durante a sesso atravs dos mtodos (set/getAttribute()).

Atribui objeto na session.


<% %> Date hoje = new Date(); session.setAttribute("hoje",hoje);

Recupera objeto da session.


<% %> Date data = (Date)session.getAttribute("hoje");

Objeto application Representa o contexto ao qual a pgina pertence. Instncia de javax.servlet.ServletContext. til para armazenar valores que devem persistir pelo tempo que durar a aplicao (at que o servlet seja descarregado do servidor). Atribui objeto na aplicao(application).
<% %> Date hoje = new Date(); application.setAttribute("hoje",hoje);

Recupera objeto da aplicao(application).


<% %> Date data = (Date)application.getAttribute("hoje");

27

Manual JAVA - JSP

Objeto pageContext

Instncia de javax.servlet.jsp.PageContext Oferece acesso a todos os outros objetos implcitos. Implementa mtodos para transferir controle da pgina atual para outra pgina. Mtodos: o getPage() - retorna page o getRequest() - retorna request o getResponse() - retorna response o getOut() - retorna out o getSession() - retorna session o getServletConfig() - retorna config o getServletContext() - retorna application o getException() - retorna exception o pageContext.forward(String) - mesmo que ao <jsp:forward> o pageContext.include(String) - mesmo que ao <jsp:include>

28

Manual JAVA - JSP

Escopo dos objetos

A persistncia das informaes depende do escopo dos objetos onde elas esto disponveis Constantes da classe javax.servlet.jsp.PageContext identificam escopo de objetos o pageContext PageContext.PAGE_SCOPE o request PageContext.REQUEST_SCOPE o session PageContext.SESSION_SCOPE o application PageContext.APPLICATION_SCOPE Mtodos de pageContext permitem setar ou buscar atributos em qualquer objeto de escopo: o setAttribute(nome, valor, escopo) o getAttribute(nome, escopo)

Objeto exception No existe em todas as pginas - apenas em pginas designadas como pginas de erro <%@ page isErrorPage="true" %> Instncia de java.lang.Throwable

Exemplo: Na pgina JSP normal <%@page errorPage="error.jsp" %> Na pgina para controle de erro <%@page isErrorPage="true" %> Erro:<%= exception.toString() %> Mensagem:<%= exception.getMessage() %>
29

Manual JAVA - JSP

FORMULRIOS

Os formulrios Html enviam dados atravs dos mtodos GET e POST, dessa forma podemos usar em JSP o objeto implcito request.getParameter(nome campo formulario) ou se os dados forem enviados para um Servlet podemos usar os mesmos objetos para recuperar as informaes, vamos ver isso nos exemplos abaixo:

Exemplo - JSP enviando dados para outro JSP.

exemploFormulario.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <title>Exemplo Formulario</title> </head> <body> <form name="formulario" method="post" action="recebePagina.jsp"> <input type="hidden" name="campo1" value="campo escondido para o usuario" /> Campo 2<input type="text" name="campo2" size="60" /><br> Campo 3 <input type="text" name="campo3" size="60" /><br> <input type="submit" name="bto" value="Enviar" /> </form> </body> </html>

recebePagina.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <% String campoEscondido = request.getParameter("campo1"); String campo2 = request.getParameter("campo2");

30

Manual JAVA - JSP


String campo3 = request.getParameter("campo3"); %> <html> <head> <title>Exemplo Formulario</title> </head> <body> Campo 1<input type="text" value="<%=campoEscondido%>" size="60" /><br> Campo 2<input type="text" value="<%=campo2%>" size="60" /><br> Campo 3<input type="text" value="<%=campo3%>" size="60" /><br> </body> </html>

Exemplo - JSP enviando dados para Servlet.

exemploFormulario2.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head> <title>Exemplo Formulario</title> </head> <body> <form name="formulario" method="post" action="recebe"> <input type="hidden" name="campo1" value="campo escondido para o usuario" /> Campo 2<input type="text" name="campo2" size="60" /><br> Campo 3 <input type="text" name="campo3" size="60" /><br> <input type="submit" name="bto" value="Enviar" /> </form> </body> </html>

31

Manual JAVA - JSP

Trecho do web.xml onde fica a configurao do servlet.


<servlet> <description> </description> <servlet-name>RecebeFormulario</servlet-name> <servlet-class> exemplo.RecebeFormulario</servlet-class> </servlet> <servlet-mapping> <servlet-name>RecebeFormulario</servlet-name> <url-pattern>/recebe</url-pattern> </servlet-mapping>

RecebeFormulario.java
package exemplo; import java.io.IOException; import java.io.PrintWriter; import import import import javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse;

/** * Servlet implementation class RecebeFormulario */ public class RecebeFormulario extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public RecebeFormulario() { // TODO Auto-generated constructor stub } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String campo1 = request.getParameter("campo1").toUpperCase(); String campo2 = request.getParameter("campo2"); String campo3 = request.getParameter("campo3"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println(" <head><title>Resposta</title></head>"); out.println(" <body>"); out.println(" Campo 1 (Escondido) " + campo1 + " <br>"); out.println(" Campo 2 " + campo2 + " <br>"); out.println(" Campo 3 " + campo3 + " <br>"); out.println(" </body>"); out.println("</html>");

32

Manual JAVA - JSP

Aes Tags Personalizadas forward, include, plugin, useBean (exemplo), getProperty, setProperty.
Standard Actions

Standard Actions so comando construdos com sintaxe XML para controlar o comportamento e funcionamento de um JSP. Voc pode dinamicamente inserir um arquivo,reutilizar componentes JavaBeans, fazer um forward para outra pgina , etc. Uma boa prtica a de colocarmos a lgica de um processamento dentro de um objeto java (JavaBeans) e instancia-lo dentro de uma pgina JSP. Com isto a pgina JSP no ficar poluda com cdigo de processamento e ter somente o cdigo de apresentao. Com isto ganhamos mais produtividade no nosso desenvolvimento pelo fato de que o JavaBean pode ser reutilizado em outras pginas e o nosso cdigo fica mais fcil de ser lido e de se fazer manutenes. Um JavaBean deve seguir algumas regras: Possuir construtor default (sem parmetros e sem exceptions) Atributos private com setters e getters Ser serializavel, isto , implementar a interface java.io.Serializable Tags:

<jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:param> <jsp:include> <jsp:forward>


33

Manual JAVA - JSP

<jsp:useBean>

utilizada para carregarmos um JavaBean que ser utilizada em uma pgina Jsp e determinando tambm seu escopo. muito interessante pois podemos aproveitar a reutilizao de componentes que a programao orientada a objetos nos fornece. <jsp:useBean id = "xpto" scope = "page" class = "br.com.treinamento.bean.Xpto"/>

O scope pode ser:

Application Antes do objeto ser instanciado, o container verifica se no existe este mesmo objeto no ServletContext j associado ao id xpto.

Session

Antes do objeto ser instanciado, o container verifica se no existe este mesmo objeto na Session j associado ao id xpto.

Request

Antes do objeto ser instanciado, o container verifica se no existe este mesmo objeto na Request j associado ao id xpto.

Page

34

Manual JAVA - JSP

Antes do objeto ser instanciado, o container verifica se no existe este mesmo objeto na Page j associado ao id xpto.

<jsp:setProperty>

utilizada para passarmos um valor um determinado atributo pertencente ao objeto instanciado na tag <jsp:useBean>. <jsp:setProperty property="nome" name="xpto" value="Jose"/>

<jsp:getProperty>

utilizada para obtermos um valor de um determinado atributo pertencente ao objeto instanciado na tag <jsp:useBean>. <jsp:getProperty property="nome" name="xpto"/>

<jsp:param>

utilizada para passarmos pares de chave/valor utilizada juntamenete com as tags <jsp:include> e <jsp:forward>. <jsp:param value="chave" name="valor"/>

<jsp:include>

O seu funcionamento igual ao da diretiva include. <jsp:include flush="true" page="cabecalho.jsp"></jsp:include> Um exemplo com parametros:

<jsp:include flush="true" page="cabecalho.jsp">


35

Manual JAVA - JSP

<jsp:param value="chave1" name="valor1"/> <jsp:param value="chave2" name="valor2"/> </jsp:include>

<jsp:forward>

Permite que a request seja reenviada a outra pgina Jsp. <jsp:forward page="URL" flush="true"></jsp:forward> Um exemplo com parametros: <jsp:forward page="URL" flush="true"> <jsp:param value="chave1" name="valor1"/> <jsp:param value="chave2" name="valor2"/> </jsp:forward>

COOKIES Criando e gravando um cookie. Mtodos de envio de dados para cookies gravados. Mtodos de recuperao de dados gravados em cookies.
Atravs dos Cookies podemos gravar informaes no browser do usurio, essas informaes podem ser teis, por exemplo, para personalizar nosso site de acordo com o visitante, lembrando que a gravao de cookies pode ser desabilitada na configurao do browser. As informaes gravadas em cookies no podem ser informaes confidenciais uma vez que a informao fica gravada na prpria maquina do usurio. Cookie uma classe java que pertence ao pacote javax.servlet.http.Cookie, para sua utilizao no necessrio fazer import do pacote. Sintaxe:
Cookie meuCookie = new Cookie(String nome,String valor)

36

Manual JAVA - JSP

Exemplo:
<% //instancia o cookie passando seu nome e valor Cookie meuCookie = new Cookie(meuCookie,informacao cookie); //adiciona o cookie ao objeto implicito response response.addCookie(meuCookie); %>

Alguns mtodos importantes : setDomain(String dominio) => Atribui o domnio do Cookie. getDomain() => Retorna o domnio do Cookie. setMaxAge(int expiry) => Atribui o tempo maximo de vida do Cookie em segundos. getMaxAge() => Retorna o tempo maximo de vida do Cookie.

37

Manual JAVA - JSP

Exemplo:

pagina1.jsp.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <body> <form action="pagina2.jsp" method="post"> Seu nome : <input name="nome"> <br><br> <input type="submit" value=" Enviar "> </form> </body> </html>

pagina2.jsp.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> <% Cookie nomeCok = new Cookie("meuCookie",request.getParameter("nome")); response.addCookie(nomeCok); %> Cookie Gravado com Sucesso !!! <input type="button" onClick="JavaScript:window.location.href='pagina3.jsp'" value=" Prxima "> </body> </html>

pagina3.jsp.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <body> <% Cookie acheiCookie = null; Cookie[] meusCookies = request.getCookies();

for (int i = 0; i < meusCookies.length; i++)

38

Manual JAVA - JSP

if (meusCookies[i].getName().equals("meuCookie")){ acheiCookie = meusCookies[i]; } if (acheiCookie == null){ out.println("Cookie no localizado"); }else{ out.println("Cookie encontrado. Seu nome " + acheiCookie.getValue()); } %> </body> </html>

Sesses, Gravando dados em sesses.Recuperando dados de sesses.

Trabalhando com Sesso Http Toda vez que um browser faz um post ou get a um servidor, uma nova conexo TCP/IP feita, isto porque o protocolo http no mantm conexo constante com o cliente. A sesso existe para podemos guardar informaes sobre o cliente que est conectado facilitando a lgica da aplicao como, por exemplo, em um site de compras, podemos guardar as informaes dos itens selecionados pelo cliente. Podemos obter ou criar uma sesso com o usurio da seguinte maneira: HttpSession session = request.getSession(); A classe HttpSession responsavel por gerenciar a sesso e seu funcionamento parecido com o Hashtable. E atravs do objeto request utilizamos o mtodo getSession() para recuperarmos a sesso para o usurio. HttpSession um meio de identificar os dados de um usurio entre as varias requisies feitas por ele.

39

Manual JAVA - JSP

ficha.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <html> <head>Ficha</head> <body> <form name="formName" method="post" action="ficha"> <table> <tr> <td>Nome</td> <td><input type="text" name="nome"></td> </tr> <tr> <td>Endereco</td> <td><input type="text" name="endereco"></td> </tr> <tr> <td><input type="submit" name="submit" value="Enviar"> <input type="reset" name="reset" value="Limpar"> </td> </tr> </table> </form> </body> </html>

Ficha.java
package bean; import java.io.Serializable; public class Ficha implements Serializable{ private static final long serialVersionUID =1L; private String nome; private String endereco; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } @Override public String toString() { return "Ficha [endereco=" + endereco + ", nome=" + nome + "]"; } public Ficha() {

40

Manual JAVA - JSP

} }

NovaFicha.java
package servlet; import java.io.IOException; import import import import import javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; javax.servlet.http.HttpSession;

import bean.Ficha; /** * Servlet implementation class NovaFicha */ public class NovaFicha extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public NovaFicha() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter("nome"); String endereco = request.getParameter("endereco"); Ficha ficha = new Ficha(); ficha.setNome(nome); ficha.setEndereco(endereco); HttpSession session = request.getSession(); session.setAttribute("ficha",ficha); response.sendRedirect("sessaoFicha"); } }

41

Manual JAVA - JSP

TratandoSessao.java
package servlet; import java.io.IOException; import java.io.PrintWriter; import import import import import javax.servlet.ServletException; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; javax.servlet.http.HttpSession;

import bean.Ficha; /** * Servlet implementation class TratandoSessao */ public class TratandoSessao extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public TratandoSessao() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); response.setContentType("text/html"); Ficha ficha = (Ficha)session.getAttribute("ficha"); PrintWriter out = response.getWriter(); out.print("<br>Nome: " + ficha.getNome()); out.print("<br>Endereco: " + ficha.getEndereco()); } }

Web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>aula10_dw</display-name>

42

Manual JAVA - JSP


<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>NovaFicha</display-name> <servlet-name>NovaFicha</servlet-name> <servlet-class>servlet.NovaFicha</servlet-class> </servlet> <servlet-mapping> <servlet-name>NovaFicha</servlet-name> <url-pattern>/ficha</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>TratandoSessao</display-name> <servlet-name>TratandoSessao</servlet-name> <servlet-class>servlet.TratandoSessao</servlet-class> </servlet> <servlet-mapping> <servlet-name>TratandoSessao</servlet-name> <url-pattern>/sessaoFicha</url-pattern> </servlet-mapping> </web-app>

43