Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim O que é uma Página JSP? ▼ ▼ ▼ ▼ ▼ É uma página HTML com trechos de programa Java embutidos Simplificam a geração de conteúdo dinâmico para Web Designers A página JSP é automaticamente transformada em servlet Permite o desenvolvimento de aplicações do lado do servidor Baseado em Java: – Reutilização de componentes – Vantagens do Java (segurança, portabilidade, ...) JSP versus ASP (ou PHP) JSPs são interpretados apenas uma vez (traduzidos para byte-code) e reinterpretados somente quando o arquivo é modificado, o que possibilita melhor desempenho na média ▼ JSPs executam nos principais servidores Web ▼ JSPs permitem melhor separação entre código e dados através de beans e bibliotecas de tags. ▼ JSP versus CGI JSP mantém estado no servidor entre sessões ▼ Cria uma nova thread para cada requisição ▼ Não precisa ser carregado toda vez, depois de iniciado ▼ Executa em uma JVM previamente carregada como uma extensão de um servidor Web ▼ JSP - JavaServer Pages JSP é uma tecnologia que permite a criação de páginas web que exibem um conteúdo dinâmico. ▼ Uma página JSP usa tags XML e scripts escritos em Java para encapsular a lógica que gera o conteúdo exibido pela página. ▼ – JSP sem entrada de dados – JSP com entrada de dados Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Tipos de Diretivas Existem três tipos de diretivas JSP: ▼ page, para importação de classes, alteração do tipo do conteúdo, etc. ▼ include, para inclusão de arquivos durante a execução do JSP ▼ taglib, para definição de tags próprias usadas em bibliotecas de tags ▼ Diretiva page ▼ ▼ Atributo import – Usado para importar classes para o servlet gerado pelo JSP – Pode aparecer várias vezes no JSP – Exemplo: <%@page import = “java.util.*” %> Atributo contentType – Usado para alterar o formato MIME ou o CHARSET do texto de saída – Exemplo: <%@page contentType=“text/html”%> Diretiva page ▼ ▼ Atributo isThreadSafe – Controla o uso de múltiplas threads no servlet gerado – O padrão é usar mútithread (true) – Exemplo: <%@page isThreadSate=“false”%> Atributo session – Indica se a página em questão faz parte de uma sessão sendo que o seu valor padrão é true – Exemplo <%@page session=“false” %> Diretiva page ▼ ▼ Atributo buffer – Indica o uso e tamanho do buffer usado pela variável out. – Exemplo: <%@page buffer = “32kb”%> Atributo autoflush – Controa o comportamento do buffer quando ele estiver cheio: true executa um “flush” automática e false gera uma exceção – Exemplo: <%@page autoflush=“true”%> Diretiva page ▼ ▼ Atributo extends – Altera a superclasse do servlet gerado – Exemplo: <%@page extends=“MeuServ.class”%> Atributo info – Define a string de descrição do servlet gerado que é retornada pelo método getServletInfo() – Exemplo: <%@page info=“descrição”%> Diretiva page ▼ ▼ Atributo errorPage – Indica o nome da página que deve ser mostrada em caso de erro – Exemplo: <%@page errorPage=“URL relativa”%> Atributo isErrorPage – Indica se a página atual pode ser usada como página de erro – O valor padrão deste atributo é false – Exemplo: <%@page isErrorPage=“true”%> Diretiva include Usada para incluir outros arquivos em páginas JSP ▼ A diretiva deve aparecer no ponto em que o arquivo será incluído ▼ Inclusão em tempo de compilação: <jsp:include page=“URL relativa” flush=“true”%> ▼ Inclusão em tempo de compilação: <%@include file=“URL relativa”%> ▼ Diretiva plugin Permite a inclusão de outras classes Java em JSP, como applets e beans ▼ Tem uma sintaxe semelhante a da tag applet do HTML ▼ Exemplo: ▼ <jsp:plugin type=“applet” code=“Dados.class” width=“200” height=“100”> </jsp:plugin> ▼ Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Adicionando Scripts ao JSP ▼ ▼ ▼ ▼ Os Scripts são trechos de código embutidos no código HTML do JSP. Não são Java Scripts. Os scripts em uma página JSP são interpretados no servidor. As declarações são usadas para definir trechos de código inseridos em uma página JSP. Podem ser inseridos em uma página HTML <% %> JSP sem entrada de dados <%@page import="java.util.Random"%> <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>JSP PAGE</title> </head> <body> <% Random rd = new Random(); for(int i=0;i<6; i++){ out.println(rd.nextInt(60)+" "); } %> </body> </html> Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Expressões Usadas para inserir valores diretamente na saída ▼ A expressão é avaliada, convertida para string e inserida na página ▼ Sintaxe: <%= expressão java %> ▼ As expressões podem ser qualquer comando Java que retorne valor ▼ Exemplo: Data:<%= new java.util.Date() %> ▼ JSP sem entrada de dados <%@page import="java.util.Date"%> <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>JSP PAGE</title> </head> <body> Data: <%= new Date()%><br /> Hostname: <%= request.getRemoteHost()%><br /> Session ID: <%= session.getId() %><br /> </body> </html> Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Declarações ▼ ▼ Permitem a declaração de variáveis e métodos em uma página Úteis para declarar: – Variáveis e métodos de instância (pertencentes ao servlet) – variáveis e métodos estáticos (pertencentes à classe do servlet) – Classes internas (estáticas e de instância), blocos static, etc. Declarações ▼ ▼ ▼ jspInit() e jspDestroy() permitem maior controle sobre o ciclo de vida do servlet Inicialização da página (chamado uma vez, antes da primeira requisição, após o instanciamento do servlet) <%!public void jspInit() { ... } %> Destruição da página (ocorre quando o servlet deixa a memória) <%! public void jspDestroy() { ... } %> JSP sem entrada de dados <%@page import="java.util.Calendar"%> <%@page import="java.util.GregorianCalendar"%> <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>JSP PAGE</title> </head> <body> <%! public final static String[] meses = {"jan", "fev", "mar", "abr", "mai", "jun"}; %> <%! public static String getMes() { Calendar cal = new GregorianCalendar(); return meses[cal.get(java.util.Calendar.MONTH)]; }%> <%= getMes() %> </body> </html> Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Comentários ▼ Comentários HTML <!-- --> não servem para comentar JSP ▼ Comentários JSP – Podem ser usados para comentar blocos JSP <%-- Texto --%> Introdução Diretivas Scriptlets Expressões Declarações JavaServer Page Comentários Pre-definições Prof. Enzo Seraphim Objetos JSP pre-definidos ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ request – javax.servlet.ServletRequest response – javax.servlet.ServletResponse out – javax.servlet.jsp.JspWriter session – javax.servlet.http.HttpSession pageContext – javax.servlet.jsp.PageContext application – javax.servlet.servletContext config – javax.servlet.ServletConfig page – java.lang.Object exception – java.lang.Throwable Request Comandos get - recuperar de dados ▼ Métodos Principais ▼ – – – – – – – getCookies getAuthType getQueryString getHeader getHeaderNames getServerName getServerPort Request ▼ Métodos Principais – – – – – – – – getProtocol getRequestURI getMethod getPathInfo getPathTranslated getServletPath getContentLength getContenType Objetos JSP pre-definidos ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ request – javax.servlet.ServletRequest response – javax.servlet.ServletResponse out – javax.servlet.jsp.JspWriter session – javax.servlet.http.HttpSession pageContext – javax.servlet.jsp.PageContext application – javax.servlet.servletContext config – javax.servlet.ServletConfig page – java.lang.Object exception – java.lang.Throwable Response Comandos set - enviar dados ▼ Métodos Principais ▼ – – – – – – – addCookie setContenLength setContentType setStatus setHeader sendError sendRedirect Cookies Arquivos texto gravados no cliente ▼ Surgiram no Netscape para guardar informações persistentes ▼ Somente acessados apenas pelo domínio que os criou ▼ Podem ser desabilitados pelo usuário (privacidade) ▼ Usos: Identificação de usuários, senhas, Customização de sites, Propaganda dirigida, sessões ▼ Cookies ▼ Para criar cookies: – Criar objeto da classe Cookie com o nome da informação e seu conteúdo – Definir tempo de persistência – Enviar o objeto para o cliente ▼ Para ler cookies: – O objeto request contem todos os cookies associados ao seu domínio. Criação de Cookies Nome e valor não podem conter: [ ] ()=,“/?@:; ▼ O método setMaxAge define quantos segundos durará o cookie após o termino da seção ▼ Exemplo: ▼ Cookie c=new Cookie("nome","val"); c.setMaxAge(3600); response.addCookie(c); Leitura de Cookies ▼ Exemplo: Cookie c[]= request.getCookies(); for (int i = 0; i < c.length; i++){ String nome = c[i].getName(); String valor = c[i].getValue(); } Objetos JSP pre-definidos ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ request – javax.servlet.ServletRequest response – javax.servlet.ServletResponse out – javax.servlet.jsp.JspWriter session – javax.servlet.http.HttpSession pageContext – javax.servlet.jsp.PageContext application – javax.servlet.servletContext config – javax.servlet.ServletConfig page – java.lang.Object exception – java.lang.Throwable out ▼ Utilizado para escrever informações no browser. – void print(Object dados) • Escreve dados no browser – void println(Object dados) • Escreve dados no browser inserindo uma quebra de linha no final. Cliente -login:String -cpf:String -nome:String * Locacao -id:int -locacao:Date -devolucao:Date Filme -codigo:int -nome:String JavaServer Page Exemplo Locadora Prof. Enzo Seraphim Classes Modelo e Classes ControleDAO br.edu.unifei.ecoe07.modelo FonteDados ClienteDao LocacaoDao FilmeDao create retrieve update delete create retrieve update delete create retrieve update delete br.edu.unifei.ecoe07.controle.dao Cliente -login:String -cpf:String -nome:String * Locacao -id:int -locacao:Calendar -devolucao:Calendar 1 Filme -codigo:int -nome:String <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>HTML PAGE</title> </head> <body> <a href="mensal/formCreateMensal.html"> Inserir Cliente Mensal</a><br /> <a href="diario/formCreateDiario.html"> Inserir Cliente Diário</a><br /> <a href="filme/formCreateFilme.html"> Inserir Filme</a><br /> <a href="locacao/formCreateLocacao.jsp"> Inserir Locação</a><br /> </body> </html> <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>Criação de Cliente Diário</title> </head> <body> <form action="createDiario.jsp" method="get"> <table border="1" width="400" height="200" cellpadding="4" cellspacing="0"> <tr align="left"> <th>Login:</th><th><input type="text" size=30 name="login"></th> </tr> <tr align="left"> <th>Nome:</th><th><input type="text" size=30 name="nome"></th> </tr> <tr align="left"> <th>CPF:</th><th><input type="text" size=30 name="cpf"></th> </tr> <tr align="center"> <th colspan="2"><input type="submit" value="Enviar"></th> </tr> </table> </form> </body> </html> formCreateDiario.html <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>Criação de Cliente Diário</title> </head> <body> <form action="createDiario.jsp" method="get"> <table border="1" width="400" height="200" cellpadding="4" cellspacing="0"> <tr align="left"> <th>Login:</th><th><input type="text" size=30 name="login"></th> </tr> <tr align="left"> <th>Nome:</th><th><input type="text" size=30 name="nome"></th> </tr> <tr align="left"> <th>CPF:</th><th><input type="text" size=30 name="cpf"></th> </tr> <tr align="center"> <th colspan="2"><input type="submit" value="Enviar"></th> </tr> </table> </form> </body> </html> formCreateDiario.html <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>Criação de Cliente Diário</title> </head> <body> <form action="createDiario.jsp" method="get"> <table border="1" width="400" height="200" cellpadding="4" cellspacing="0"> <tr align="left"> <th>Login:</th><th><input type="text" size=30 name="login"></th> </tr> <tr align="left"> <th>Nome:</th><th><input type="text" size=30 name="nome"></th> </tr> <tr align="left"> <th>CPF:</th><th><input type="text" size=30 name="cpf"></th> </tr> <tr align="center"> <th colspan="2"><input type="submit" value="Enviar"></th> </tr> </table> </form> </body> </html> formCreateDiario.html <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN" <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>Criado cliente Diário </title> </head> <body> <% try{ Diario obj = new Diario(); obj.setLogin(request.getParameter("login")); obj.setNome(request.getParameter("nome")); obj.setCpf(request.getParameter("cpf")); EntityManager em = FonteDados.createEntityManager(); DiarioDao dao = new DiarioDao(em); dao.create(obj); em.close(); out.print("<h1>Cliente Diário Cadastrado</h1><br />"); out.print("<a href=\"../index.html\">clique para inicio</a><br />"); }catch (RollbackException exp){ out.print("<h1>Login já cadastrado</h1><br />"); out.print("<a href=\"formCreateDiario.html\">corrigir</a><br />"); out.print("<a href=\"../index.html\">clique para inicio</a><br />"); } %> </body> </html> createDiario.jsp <%@page contentType="text/html" pageEncoding="UTF­8"%> <!DOCTYPE HTML PUBLIC "­//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http­equiv="Content­Type" content="text/html; charset=UTF­8"> <title>Criação de Cliente Diário</title> </head> <body> <form action="createDiario.jsp" method="get"> <table border="1" width="400" height="200" cellpadding="4" cellspacing="0"> . . . </table> </form> </body> </html> formCreateLocacao.html <% out.println("<select name=\"loginCliente\">"); EntityManager em = FonteDados.createEntityManager(); ClienteDao daoCliente = new ClienteDao(em); List<Cliente> listCliente=daoCliente.findAllCliente(); for(Cliente c : listCliente){ out.println("<option value=\"" + c.getLogin() + "\">" + c.getNome() + "</option>"); } out.println("</select><BR>"); %> <% out.println("<select name=\"codigoFilme\">"); FilmeDao daoFilme = new FilmeDao(em); List<Filme> listFilme = daoFilme.findAllFilme(); for(Filme f : listFilme){ out.println("<option value=\"" + f.getCodigo() + "\">" + f.getNome() + "</option>"); } out.println("</select><BR>"); %> formCreateLocacao.html <% try{ EntityManager em = FonteDados.createEntityManager(); ClienteDao daoCliente = new ClienteDao(em); Cliente cliente = daoCliente.findCliente( request.getParameter("loginCliente")); FilmeDao daoFilme = new FilmeDao(em); Filme filme = daoFilme.findFilme( Integer.parseInt(request.getParameter("codigoFilme"))); SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy"); Date date = sdf.parse(request.getParameter("locacao")); Calendar cal = Calendar.getInstance(); LocacaoDao daoLocacao = new LocacaoDao(em); Locacao locacao = new Locacao(); locacao.setCliente(cliente); locacao.setFilme(filme); locacao.setLocacao(cal); cliente.addLocacao(locacao); daoLocacao.create(locacao); createLocacao.jsp em.close(); out.print("<h1>Cliente Mensal Cadastrado</h1><br />"); out.print("<a href=\"../index.html\">clique para inicio</a><br />"); }catch (NumberFormatException exp){ out.print("<h1>Data Inválida</h1><br />"); out.print("<a href=\"formCreateLocacao.html\">clique corrigir Locação</a><br />"); out.print("<a href=\"../index.html\">clique para inicio</a><br />"); }catch (RollbackException exp){ out.print("<h1>Cliente ou Filme não informado</h1><br />"); out.print("<a href=\"formCreateLocacao.html\">clique corrigir Locação</a><br />"); out.print("<a href=\"../index.html\">clique para inicio</a><br />"); } %> createLocacao.jsp Os logotipos, marcas comerciais e nomes de produtos citados nesta publicação tem apenas o propósitos de identificação e podem ser marcas registradas de suas respectivas companhias. JavaServer Page Prof. Enzo Seraphim