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 * 1 -id:int -locacao:calendar -devolucao:calendar 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> formcreatediario.html </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> formcreatediario.html </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> formcreatediario.html </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> creatediario.jsp </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">... </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