JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
▼ É 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
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
JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
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:
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
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:
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:
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:
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>
JavaServer Page
Prof. Enzo Seraphim Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
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="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
<html> <head>
<meta httpequiv="ContentType" content="text/html; charset=UTF8">
<title>JSP PAGE</title> </head> <body> <% Random rd = new Random(); for(int i=0;i<6; i++){ out.println(rd.nextInt(60)+" "); } %> </body> </html>
JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
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:
JSP sem entrada de dados
<%@page import="java.util.Date"%>
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
<html> <head>
<meta httpequiv="ContentType" content="text/html; charset=UTF8">
<title>JSP PAGE</title> </head> <body> Data: <%= new Date()%><br /> Hostname: <%= request.getRemoteHost()%><br /> Session ID: <%= session.getId() %><br /> </body> </html>
JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
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
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)
JSP sem entrada de dados
<%@page import="java.util.Calendar"%>
<%@page import="java.util.GregorianCalendar"%>
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
<html> <head>
<meta httpequiv="ContentType" content="text/html; charset=UTF8">
<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>
JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
Comentários
▼ Comentários HTML
<!-- --> não servem para comentar JSP
▼ Comentários JSP
– Podem ser usados para comentar
blocos JSP
JavaServer Page
Prof. Enzo Seraphim
Scriptlets Diretivas Introdução Expressões Declarações Comentários Pre-definições
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.ThrowableRequest
▼ 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 – getContenTypeObjetos 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.ThrowableResponse
▼ 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
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);
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▼ 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.
JavaServer Page
Exemplo
Locadora
Prof. Enzo Seraphim -login:String -cpf:String -nome:String -id:int -locacao:Date -devolucao:Date -codigo:int -nome:String Cliente Locacao Filme *
br.edu.unifei.ecoe07.controle.dao br.edu.unifei.ecoe07.modelo
Classes Modelo e
Classes ControleDAO
FonteDados ClienteDao create retrieve update delete FilmeDao LocacaoDao create retrieve update delete create retrieve update delete Cliente -login:String -cpf:String -nome:String Locacao -id:int -locacao:Calendar -devolucao:Calendar Filme -codigo:int -nome:String * 1<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<meta httpequiv="ContentType"
content="text/html; charset=UTF8">
<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="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<meta httpequiv="ContentType"
content="text/html; charset=UTF8"> <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>
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<meta httpequiv="ContentType"
content="text/html; charset=UTF8"> <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>
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<meta httpequiv="ContentType"
content="text/html; charset=UTF8"> <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>
<%@page contentType="text/html" pageEncoding="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN"
<html> <head>
<meta httpequiv="ContentType" content="text/html; charset=UTF8"> <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="UTF8"%>
<!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<meta httpequiv="ContentType"
content="text/html; charset=UTF8"> <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
JavaServer Page
Prof. Enzo SeraphimOs 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.