Java Server Pages () joao@ecomp.uefs.br Departamento de Ciências Exatas Universidade Estadual de Feira de Santana
Problemas com Sevlet Como fazer um Servlet para exibir esta página? 1
Código do Servlet GetDate.java public class GetDate extends HttpServlet { @Override protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { } } res.setcontenttype("text/html;charset=utf-8"); PrintWriter out = res.getwriter(); out.println("<!doctype html>"); out.println("<html>"); out.println("<body>"); out.println("<b>a data e hora atual é </b>" + new Date()); out.println("</body>"); out.println("</html>"); 2
Problemas com Sevlet Imagine que você deseja incluir um Qtulo e um texto na página 3
Código do Servlet HttpServlet.java public class GetDate extends HttpServlet { @Override protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { } } res.setcontenttype("text/html;charset=utf-8"); PrintWriter out = res.getwriter(); out.println("<!doctype html>"); out.println("<html>") out.println("<head><title>data e hora</title></head>"); out.println("<body>"); out.println("exibindo data e hora utilizando Servlets <br>"); out.println("<b>a data e hora atual é </b>" + new Date()); out.println("</body>"); out.println("</html>"); 4
Problemas com Servlets Qualquer alteração no HTML exige alteração no Servlet editar o código, compilar, deploy,... O permite tornar a formatação mais simples e rápida permite separar design de programação 5
: definição Java Server Page página HTML com elementos especiais o programador pode inserir conteúdo dinâmico a extensão de uma página é.jsp a página fica armazenada no Servidor 6
Página DataHora.jsp <%@page import="java.util.date %> <html> <head> <title>data e hora</title> </head> <body> Exibindo data e hora utilizando.<br> <b>a data e hora atual é </b> <%= new Date() %> </body> </html> 7
Mais sobre Alterando uma página basta alterar o texto, não precisa recompilar a modificação passa a ser visível automajcamente Funcionamento interno toda página tem um Servlet correspondente toda modificação na página requer que o Servlet seja atualizado tudo isso é feito automajcamente! Sem intervenção do programador a primeira chamada é mais lenta (cria o Servlet) 8
Elementos dinâmicos Expressões Direjvas Scriptlets Declarações 9
Expressões Toda expressão retorna um valor Sintaxe <%= <expressão java> %> Exemplo somando 2 números <%= 5+7 %> pegando a data <%= new Date() %> 10
Direjvas Direjvas são constantes que afetam a página como um todo Sintaxe <%@ dire5va nome_atributo= valor %> Principais direjvas: page e include 11
Direjva page Direjvas da página podem incluir pacotes java podem incluir atributos no cabeçalho da página Exemplos <%@ page import= java.ujl.date %> <%@ page contenttype= text/html %> 12
Direjva include Permite incluir o conteúdo de outra página HTML ou O texto incluído poder ser de parte da página Exemplos <%@ include file= cabecalho.jsp %> Miolo da página <%@ include file= rodape.html %> 13
Exemplo DataHora.jsp <%@ include file="cabecalho.jsp" %> Exibindo data e hora utilizando diretivas.<br> <b>a data e hora atual é </b> <%= new Date() %> <br> <b>a soma de 5+7= </b> <%= 5+7 %> <%@ include file="rodape.html" %> <%@page import="java.util.date"%> <%@page contenttype="text/html" pageencoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>data e hora</title> </head> <body> cabecalho.jsp </body> </html> rodape.html 14
Scriptlets Permite incluir blocos de código Java Sintaxe <% bloco de código Java %> Exemplo <%@ include file="cabecalho.jsp" %> <b>a data e hora atual é </b> <%= new Date() %> <br> <% Date date = new Date(); SimpleDateFormat dateformat = new SimpleDateFormat("EEE"); String weekday = dateformat.format(date); if(weekday.equals("sat") weekday.equals("sun")){ }else{ } %> out.println("aproveite o final de semana!"); out.println( Hoje é "+weekday); <%@ include file="rodape.html" %> 15
Scriptlets Os scripts podem ser interrompidos a qualquer momento <%@ include file="cabecalho.jsp" %> <b>a data e hora atual é </b> <%= new Date() %> <br> <% Date date = new Date(); SimpleDateFormat dateformat = new SimpleDateFormat("EEE"); String weekday = dateformat.format(date); if(weekday.equals("sat") weekday.equals("sun")){%> Aproveite o final de semana! <%}else %> Hoje é <%= weekday %> <%@ include file="rodape.html" %> 16
Declarações Permite declarar variáveis que ficam fora do método da requisição (similar ao init()) Sintaxe <%! Declaração %> Exemplo <%! String[] dia= {"Seg","Ter", "Qua", "Qui", "Sex", "Sab", "Dom"}; %> <%@ include file="cabecalho.jsp" %> Exibindo data e hora utilizando diretivas.<br> <% Calendar c = Calendar.getInstance(); c.settime(new Date()); out.println(dia[c.get(calendar.day_of_week)]); %> <%@ include file="rodape.html" %> 17
Objetos implícitos Existe uma serie de objetos implícitos em request: instância de HvpServletRequest response: instância de HvpServletResponse out: instância de JspWriter session: instância de HvpSession applica5on: instância de ServltContext config: instância de ServletConfig 18
Exemplo <%@ include file="cabecalho.jsp" %> Existe uma serie de objetos implícitos que podem ser <% String chamados, data = request.getparameter("data"); os principais são: %> if(data!= null){ SimpleDateFormat f = new SimpleDateFormat("DD/MM/YYYY"); } <br> request, instância de HvpServletRequest Date anivdate = f.parse(data); response, instância de HvpServletResponse long diffinms = new Date().getTime() - anivdate.gettime(); out, instância de Wriver que permite escrever na saída out.print("você já viveu "+ dias +" dias!"); session, instância de HvpSession long dias = TimeUnit.DAYS.convert(diffInMs, TimeUnit.MILLISECONDS); applica5on, instância de ServletContext config, instância de ServletConfig <form action="parameters.jsp" method="get"> Data nascimento (DD/MM/YYYY): <input type="text" name="data" /> <input type="submit" value="enviar" /> </form> <%@ include file="rodape.html" %> 19
Exemplo 20
Comentários Existem dois jpos de comentários Comentário HTML <!- Comentário - > Comentário Exemplo <HTML><BODY> <%- - <Comentário> - - %> <!- Este comentário irá aparecer no fonte da página -> <%-- Este comentário não irá aparecer no fonte da página --%> </BODY><HTML> 21
JavaBeans é bastante poderoso Um programador descuidado pode rapidamente criar códigos complexos e de dixcil manutenção O ideal é que uma página seja similar a uma página HTML. Sem código Java! O código deve ser desenvolvido ujlizando Servlets, JavaBeans e páginas o negócio fica nos Servlets, os resultados são enviados para as páginas ujlizando JavaBeans JavaBeans objetos criados para representar dados possuem apenas métodos set e get 22
Exemple de arquitetura com JavaBeans Controler Browser request response Servlet JavaBeans Model View 23
JavaBean Pessoa public class PersonBean implements Serializable{ private String nome; private int idade; public PersonBean(){} public PersonBean(String nome, int idade){ } this.nome = nome; this.idade = idade; Construtor default public String getnome() { return nome;} public void setnome(string nome) { this.nome = nome;} public int getidade() { return idade; } } public void setidade(int idade) { this.idade = idade;} 24
Repassando as requisições Ujliza o método getrequestdispatcher() da classe HvpServletRequest passando o caminho de uma página e requisição Exemplo @WebServlet(urlPatterns = {"/JavaBeansServlet"}) public class JavaBeansServlet extends HttpServlet { @Override protected void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { // Código do negócio vem aqui PersonBean person = new PersonBean("João", 38); req.setattribute("pessoa", person); } } req.getrequestdispatcher("/javabeans.jsp").forward(req, res); 25
Duas formas de acessar o JavaBeans A parjr da versão 2.0 é possível ujlizar Expression Language (EL) para acessar o JavaBean <%@page contenttype="text/html" pageencoding="utf-8"%> <!DOCTYPE html> <html> </html> <body> O nome da pessoa é ${pessoa.nome} e ela tem ${pessoa.idade} </body> JavaBeans.jsp 26
Arquitetura com Servlet, e JavaBeans Browser (chrome) 6. Renderiza a página e apresenta para o cliente 1. Realiza solicitação HTTP 5. Retorna página html para o Browser Servlet Servidor 4. Retorna página HTML 3. Acessa dados locais, incluindo SGBD Disco Java Beans 27
Java Server Pages () joao@ecomp.uefs.br Departamento de Ciências Exatas Universidade Estadual de Feira de Santana