Java Server Pages JSP O que uma pgina

  • Slides: 53
Download presentation
Java Server Pages (JSP)

Java Server Pages (JSP)

O que é uma página JSP n É uma página HTML com trechos de

O que é uma página JSP n É uma página HTML com trechos de programa Java embutidos e outras tags especiais n n A parte dinâmica da página é gerada pelo JSP e a parte estática pelo HTML. Simplificam a geração de conteúdo dinâmico para Web Designers A página JSP é automaticamente transformada em servlet JSP pode ser expresso através do seu formato padrão e do seu formato XML.

Servlet x JSP n Servlets n n Melhor em termos de Eng. Software Mais

Servlet x JSP n Servlets n n Melhor em termos de Eng. Software Mais flexível Não permite independência entre o designer e o programador JSP n n n Bem mais fácil de aprender!!!! Um nível maior de abstração pro Servlets (no final, tudo vira servlets. . . ) O Web Designer pode trabalhar independente do Web Developer e vice-versa.

Introdução

Introdução

Problemas de servlets n Servlets forçam o programador a embutir código HTML dentro de

Problemas de servlets n Servlets forçam o programador a embutir código HTML dentro de código Java n n n Desvantagem: se a maior parte do que tem que ser gerado é texto ou código HTML estático Mistura as coisas: programador tem que ser bom Web Designer e se virar sem ferramentas de Web Design Uma solução inteligente é escrever um arquivo de template

O que são Java. Server Pages n n JSP é uma tecnologia padrão, baseada

O que são Java. Server Pages n n JSP é uma tecnologia padrão, baseada em templates para servlets. O mecanismo que a traduz é embutido no servidor. Há várias outras alternativas populares n n n Apache Cocoon XSP: baseado em XML (xml. apache. org/cocoon) Jakarta Velocity (jakarta. apache. org/velocity) Web. Macro (www. webmacro. org) Solução do problema anterior usando templates JSP Em um servidor que suporta JSP, processamento de JSP passa por uma camada adicional onde a página é transformada (compilada) em um servlet Acesso via URL usa como localizador a própria página

Exemplos de JSP n A forma mais simples de criar documentos JSP, é n

Exemplos de JSP n A forma mais simples de criar documentos JSP, é n n n Fazendo isto, a página será transformada em um servlet n n n 1. Mudar a extensão de um arquivo HTML para. jsp 2. Colocar o documento em um servidor que suporte JSP A compilação é feita no primeiro acesso Nos acessos subseqüentes, a requisição é redirecionada ao servlet que foi gerado a partir da página Transformado em um JSP, um arquivo HTML pode conter blocos de código (scriptlets): <%. . . %> e expressões <%=. . . %>

Exemplo de JSP

Exemplo de JSP

Ciclo de vida n Quando uma requisição é mapeada a uma página JSP, o

Ciclo de vida n Quando uma requisição é mapeada a uma página JSP, o container n n Verifica se o servlet correspondente à página é mais antigo que a página (ou se não existe) Se o servlet não existe ou é mais antigo, a página JSP será compilada para gerar novo servlet, em seguida, a requisição é repassada ao servlet Se o servlet está atualizado, a requisição é redirecionada para ele Deste ponto em diante, o comportamento equivale ao ciclo de vida do servlet, mas os métodos são diferentes n n n Se o servlet ainda não estiver na memória, ele é instanciado, carregado e seu método jsp. Init() é chamado Para cada requisição, seu método _jsp. Service(req, res) é chamado. Ele é resultado da compilação do corpo da página JSP No fim da vida, o método jsp. Destroy() é chamado

Como funciona JSP

Como funciona JSP

Sintaxe dos elementos JSP n n Podem ser usados em documentos de texto (geralmente

Sintaxe dos elementos JSP n n Podem ser usados em documentos de texto (geralmente HTML ou XML) Todos são interpretados no servidor (jamais chegam ao browser) n n n n diretivas: declarações: expressões: scriptlets: comentários: ações: custom tags: <%@. . . %> <%!. . . %> <%=. . . %> <%--. . . --%> <jsp: ação. . . /> <prefixo: elemento. . . />

(a) diretivas n n Contém informações necessárias ao processamento da classe do servlet que

(a) diretivas n n Contém informações necessárias ao processamento da classe do servlet que gera a página JSP Sintaxe : <%@ diretiva atrib 1 atrib 2. . . %> n Principais diretivas: n n page: atributos relacionados à página include: inclui outros arquivos na página taglib: declara biblioteca de custom tags usada no documento Exemplos <%@ page import="java. net. *, java. io. *" session="false" error. Page="/erro. jsp" %> <%@ include file="navbar. jsp" %>

(a) diretiva page n Atributos de <%@page. . . %> info="Texto informativo" default: nenhum

(a) diretiva page n Atributos de <%@page. . . %> info="Texto informativo" default: nenhum language="java" (default) content. Type="text/html; charset=ISO-8859 -1" (default) extends="acme. Fonte. Jsp" default: nenhum import="java. io. *, java. net. *" default: java. lang session="true" (default) buffer="8 kb" (default) auto. Flush="true" (default) is. Thread. Safe="true" (default) error. Page="/erros/404. jsp" default: nenhum is. Error. Page= "false" (default)

Alguns atributos de @page n session n is. Thread. Safe n n Se true,

Alguns atributos de @page n session n is. Thread. Safe n n Se true, só um cliente poderá acessar a página ao mesmo tempo is. Error. Page n n Se true, aplicações JSP podem manter sessões do usuário abertas usando Http. Session Se uma página declara session=false, ela não terá acesso a objetos gravados na sessão do usuário (objeto Http. Session) Se true, a página possui um objeto exception (Throwable) e pode extrair seus dados quando alvo de redirecionamento devido a erro. Possui também os dois atributos padrão de páginas de error. Page n URL da página para o qual o controle será redirecionado na ocorrência de um erro ou exceção. Deve ser uma página com is. Error. Page=true.

Atributos de @page: buffer e autoflush n Pode-se redirecionar, criar um cookie ou modificar

Atributos de @page: buffer e autoflush n Pode-se redirecionar, criar um cookie ou modificar o tipo de dados gerado por uma página JSP em qualquer parte dela n n n Essas operações são realizadas pelo browser e devem ser passadas através do cabeçalho de resposta do servidor Lembre-se que o cabeçalho termina ANTES que os dados comecem O servidor JSP armazena os dados da resposta do servidor em um buffer (de 8 k. B, default) antes de enviar n n n Assim é possível montar o cabeçalho corretamente antes dos dados, e permitir que o programador escolha onde e quando definir informações de cabeçalho O buffer pode ser redefinido por página (diretiva page buffer). Aumente-o se sua página for grande. auto. Flush determina se dados serão enviados quando buffer encher ou se o programa lançará uma exceção.

(b) declarações n n Dão acesso ao corpo da classe do servlet. Permitem a

(b) declarações n n Dão acesso ao corpo da classe do servlet. Permitem a declaração de variáveis e métodos em uma página Úteis para declarar: n n 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. Sintaxe <%! declaração %> n Exemplos

(b) declarações (métodos especiais) n jsp. Init() e jsp. Destroy() permitem maior controle sobre

(b) declarações (métodos especiais) n jsp. Init() e jsp. Destroy() permitem maior controle sobre o ciclo de vida do servlet n n n Ambos são opcionais Úteis para inicializar conexões, obter recursos via JNDI, ler parâmetros de inicialização do web. xml, etc. Inicialização da página (chamado uma vez, antes daprimeira requisição, após o instanciamento do servlet) <%! public void jsp. Init() {. . . } %> n Destruição da página (ocorre quando o servlet deixa a memória) <%! public void jsp. Destroy() {. . . } %>

(c) expressões e (d) scriptlets n n Expressões: Quando processadas, retornam um valor que

(c) expressões e (d) scriptlets n n Expressões: Quando processadas, retornam um valor que é inserido na página no lugar da expressão Sintaxe: <%= expressão %> n Equivale a out. print(expressão), portanto, não pode terminar em ponto-e-vírgula n n Todos os valores resultantes das expressões são convertidos em String antes de serem redirecionados à saída padrão Scriptlets: Blocos de código que são executados sempre que uma página JSP é processada Correspondem a inserção de seqüências de instruções no método _jsp. Service() do servlet gerado Sintaxe: <% instruções Java; %>

(e) comentários n Comentários HTML <!-- --> não servem para comentar JSP <!-- Texto

(e) comentários n Comentários HTML <!-- --> não servem para comentar JSP <!-- Texto ignorado pelo browser mas não pelo servidor. Tags são processados --> n Comentários JSP: podem ser usados para comentar blocos JSP <%-- Texto, código Java, <HTML> ou tags <%JSP%> ignorados pelo servidor --%> n Pode-se também usar comentários Java quando dentro de scriptlets, expressões ou declarações: <% código JSP. . . /* texto ou comandos Java ignorados pelo servidor */. . . mais código %>

(f) ações padronizadas n Sintaxe: <jsp: nome_ação atrib 1 atrib 2. . . >

(f) ações padronizadas n Sintaxe: <jsp: nome_ação atrib 1 atrib 2. . . > <jsp: param name="xxx" value="yyy"/>. . . </jsp: nome_ação> n Permitem realizar operações (e meta-operações) externas ao servlet (tempo de execução) n n n Concatenação de várias páginas em uma única resposta <jsp: forward> e <jsp: include> Inclusão de Java. Beans <jsp: use. Bean>, <jsp: set. Property> e <jsp: get. Property> Geração de código HTML para Applets <jsp: plugin>

(f) ações (exemplos)

(f) ações (exemplos)

Objetos implícitos JSP n São variáveis locais previamente inicializadas Disponíveis nos blocos <%. .

Objetos implícitos JSP n São variáveis locais previamente inicializadas Disponíveis nos blocos <%. . . %> (scriptlets) de qualquerpágina (exceto session e exception que dependem de @page para serem ativados/desativados) n Objetos do servlet n n Entrada e saída n n request response out Objetos contextuais n n page config session application page. Context Controle de exceções n exception

(a) page n Referência para o servlet gerado pela página n n Pode ser

(a) page n Referência para o servlet gerado pela página n n Pode ser usada para chamar qualquer método ou variável do servlet ou superclasses n n n Equivale a "this" no servlet Tem acesso aos métodos da interface javax. servlet. jsp. Jsp. Page (ou Http. Jsp. Page) Pode ter acesso a mais variáveis e métodos se estender alguma classe usando a diretiva @page extends: <%@ page extends="outra. Classe" %> Exemplo: <% Http. Session session. Copy = page. get. Session() %>

(b) config n n n Referência para os parâmetros de inicialização do servlet (se

(b) config n n n Referência para os parâmetros de inicialização do servlet (se existirem) através de objeto Servlet. Config Equivale a page. get. Servlet. Config() Exemplo: <%String user = config. get. Init. Parameter("nome"); String pass = config. get. Init. Parameter("pass"); %> n Parâmetros de inicialização são fornecidos na instalação do servlet no servidor, através de <init-param> de <servlet> em web. xml. É preciso declarar a página no web. xml

(c) request n Referência para os dados de entrada enviados na requisição do cliente

(c) request n Referência para os dados de entrada enviados na requisição do cliente (no GET ou POST, por exemplo, em HTTP) n n É um objeto do tipo javax. servlet. http. Http. Servlet. Request Usado para n n Guardar e recuperar atributos que serão usadas enquanto durar a requisição (que pode durar mais de uma página) Recuperar parâmetros passados pelo cliente (dados de um formulário HTML, por exemplo) Recuperar cookies Descobrir o método usado (GET, POST) String method = request. get. Method();

(c) exemplos n URL no browser: n n http: //servidor/programa. jsp? nome=Fulano&id=5 Recuperação dos

(c) exemplos n URL no browser: n n http: //servidor/programa. jsp? nome=Fulano&id=5 Recuperação dos parâmetros no programa JSP: <% String nome = request. get. Parameter("nome"); String id. Str = request. get. Parameter("id"); int id = Integer. parse. Int(id. Str); %> <p>Bom dia <%=nome %>! (cod: <%=id %> n Cookies n Cookie[] c = request. get. Cookies()

(d) response n Referência aos dados de saída enviados na resposta do servidor enviada

(d) response n Referência aos dados de saída enviados na resposta do servidor enviada ao cliente n n É um objeto do tipo javax. servlet. http. Http. Servlet. Response Usado para n n Definir o tipo dos dados retornados (default: text/thml) Criar cookies Cookie c = new Cookie("nome", "valor"); response. add. Cookie(c); Definir cabeçalhos de resposta Redirecionar response. send. Redirect("pagina 2. html");

(e) out n n Representa o stream de saída da página (texto que compõe

(e) out n n Representa o stream de saída da página (texto que compõe o HTML que chegará ao cliente). É instância da classe javax. servlet. jsp. Jsp. Writer (implementação de java. io. Writer) Equivalente a response. get. Writer(); Principais métodos print() e println() - imprimem Unicode n Os trechos de código abaixo são equivalentes

(f) session n Representa a sessão do usuário n n O objeto é uma

(f) session n Representa a sessão do usuário n n O objeto é uma instância da classe javax. servlet. http. Http. Session Útil para armazenar valores que deverão permanecer durante a sessão (set/get. Attribute())

(g) application n Representa o contexto ao qual a página pertence n n n

(g) application n Representa o contexto ao qual a página pertence n n n Instância de javax. servlet. Servlet. Context Útil para guardar valores que devem persistir pelo tempo que durar a aplicação (até que o servlet seja descarregado do servidor) Exemplo

(h) page. Context n n n Instância de javax. servlet. jsp. Page. Context Oferece

(h) page. Context n n n Instância de javax. servlet. jsp. Page. Context Oferece acesso a todos os outros objetos implícitos. Métodos: n n n n n get. Page() - retorna page get. Request() - retorna request get. Response() - retorna response get. Out() - retorna out get. Session() - retorna session get. Servlet. Config() - retorna config get. Servlet. Context() - retorna application get. Exception() - retorna exception Constrói a página (mesma resposta) com informações localizadas em outras URLs n n page. Context. forward(String) - mesmo que ação <jsp: forward> page. Context. include(String) - mesmo que ação <jsp: include>

Escopo dos objetos n n A persistência das informações depende do escopo dos objetos

Escopo dos objetos n n A persistência das informações depende do escopo dos objetos onde elas estão disponíveis Constantes da classe javax. servlet. jsp. Page. Context identificam escopo de objetos n n n page. Context Page. Context. PAGE_SCOPE request Page. Context. REQUEST_SCOPE session Page. Context. SESSION_SCOPE application Page. Context. APPLICATION_SCOPE Métodos de page. Context permitem setar ou buscar atributos em qualquer objeto de escopo: n n set. Attribute(nome, valor, escopo) get. Attribute(nome, escopo)

(i) exception n Não existe em todas as páginas - apenas em páginas designadas

(i) exception n Não existe em todas as páginas - apenas em páginas designadas como páginas de erro <%@ page is. Error. Page="true" %> n n Instância de java. lang. Throwable Exemplo: <h 1>Ocoreu um erro!</h 1> <p>A exceção é <%= exception %> Detalhes: <hr> <% exception. print. Stack. Trace(out); %>

Sessões n n Representa a sessão atual de um usuário individual; Em geral, expira

Sessões n n Representa a sessão atual de um usuário individual; Em geral, expira após 30 min n n Setando uma session: n n pode ser configurado através de set. Max. Inactive. Interval(); Session. set. Attribute(“nome. Da. Sessao”, ”valor”); Recuperando uma session: n String temp = (String) session. get. Attribute(“sessao”);

Autenticando um usuário <html> <head></head> <body> <form action=“autenticar_usuario 2. jsp” method=“post”> Login: <input name="login"

Autenticando um usuário <html> <head></head> <body> <form action=“autenticar_usuario 2. jsp” method=“post”> Login: <input name="login" type="text" size="12" maxlength="15" > Senha <input name="senha" type="password" size="12" maxlength="15"> <input type=“submit" value="Entrar"> </form> </body> </html>

Autenticando um usuário <%@ page import=“métodos necessários" %> <% String login = request. get.

Autenticando um usuário <%@ page import=“métodos necessários" %> <% String login = request. get. Parameter("login"); String senha = request. get. Parameter("senha"); Fachada fachada = new Fachada(); Usuario usuario = fachada. autentica. Usuario(login, senha); if (usuario != null) { /* Criar session do usuario */ session. set. Attribute("cod. Func", usuario. get. Cod. Func()); out. println(“Acesso Permitido!”); } else { out. println(“Acesso Negado!”); } %>

Listando e atualizando objetos <%@ page import=“métodos necessários" %> <% Fachada fachada = new

Listando e atualizando objetos <%@ page import=“métodos necessários" %> <% Fachada fachada = new Fachada(); Vector carros = fachada. get. Carros(); Enumeration e = carros. elements(); while (e. has. More. Elements()){ Carro car = (Carro) e. next. Element(); %> <tr> <td>Carro: </td><%= car. get. Nome(); %></td> </tr> %> } %>

Listando e atualizando objetos <%@ page import=“métodos necessários" %> <% Fachada fachada = new

Listando e atualizando objetos <%@ page import=“métodos necessários" %> <% Fachada fachada = new Fachada(); String nome = “Uno Mille”; String marca = “Fiat”; Carro car = new Carro(nome, marca); try { fachada. inserir. Carro(car); } catch (Exception e) { /* Trato a exceção */ } %>

Imports Funcionam como os imports de java <%@page import = “<pacote>. <classe>" %> n

Imports Funcionam como os imports de java <%@page import = “<pacote>. <classe>" %> n Ex: <%@page import = = "fachada. Fachada" %> “usuario. Usuario" %> "java. util. Vector"%> "java. util. Enumeration"%>

Include Serve para dar modularidade ao sistema; Ex: n header. inc ou header. jsp

Include Serve para dar modularidade ao sistema; Ex: n header. inc ou header. jsp <html> <head><title>Meu site</title></head> <body> <img src=“meu_logotipo. jpg”> n

Include n footer. inc ou footer. jsp </body> </html>

Include n footer. inc ou footer. jsp </body> </html>

Include n form_logar. jsp <form action=“autenticar_usuario 2. jsp” method=“post”> Login: <input name="login" type="text" size="12"

Include n form_logar. jsp <form action=“autenticar_usuario 2. jsp” method=“post”> Login: <input name="login" type="text" size="12" maxlength="15" > Senha <input name="senha" type="password" size="12" maxlength="15"> <input type=“submit" value="Entrar"> </form>

Include Juntando tudo num único arquivo. . . Logar. jsp n <%@ include file=“header.

Include Juntando tudo num único arquivo. . . Logar. jsp n <%@ include file=“header. jsp" %> <%@ include file=“form_logar. jsp" %> <%@ include file="footer. jsp" %>

Exercícios n 1. Escreva um JSP data. jsp que imprima a data de hoje.

Exercícios n 1. Escreva um JSP data. jsp que imprima a data de hoje. n n 2. Escreva um JSP temperatura. jsp que imprima uma tabela HTML de conversão Celsius-Fahrenheit entre -40 e 100 graus Celsius com incrementos de 10 em 10 n n Use Calendar e Gregorian. Calendar A fórmula é F = 9/5 C + 32 3. Altere o exercício anterior para que a página também apresente um campo de textos para entrada de temperatura em um formulário que envie os dados com POST. Faça com que a própria página JSP receba a mensagem n n a) Identifique, no início, o método com request. get. Method() (retorna POST ou GET, em maiúsculas). b) Se o método for POST, mostre, em vermelho, antes da exibição do formulário, o texto: "x graus F = y graus C" onde x é o valor digitado pelo usuário e y é a resposta.

Exercícios n 4. JSP simples usando objeto de sessão n n n a. Escreva

Exercícios n 4. JSP simples usando objeto de sessão n n n a. Escreva uma página JSP nova. Mensagem. jsp que mostre formulário na tela com dois campos: email e mensagem. b. Escreva uma outra página gravar. Mensagem. jsp que receba parâmetros: email e mensagem e grave esses dois parâmetros na sessão do usuário. c. Faça com que a primeira página aponte para a segunda. d. Crie uma terceira página listar. Mensagens. jsp que mostre mensagens criadas até o momento. 5. Altere o exercício anterior fazendo com que n n n a. A página gravar. Mensagem. jsp mostre todas as mensagens da sessão como resposta, mas grave a mensagem em disco usando parâmetro de inicialização do web. xml b. A página listar. Mensagens. jsp liste todas as mensagens em disco. Obs: garanta uma gravação thread-safe para os dados.

Segurança n Não depende só da aplicação, envolve: n n n Servidor Web Sistema

Segurança n Não depende só da aplicação, envolve: n n n Servidor Web Sistema Operacional Rede Pessoal ligado à aplicação direta ou indiretamente Orçamento Necessidade

Segurança n Na prática são usados quatro métodos: n n Nas páginas que só

Segurança n Na prática são usados quatro métodos: n n Nas páginas que só devam ser acessadas após o login do usuário, podemos verificar se a session foi setada (I) Verificar de onde o usuário veio e só permitir o acesso às páginas se ele as acessou através do seu site (II)

Segurança n n Verificar código malicioso nos campos onde o usuário insere informações (III)

Segurança n n Verificar código malicioso nos campos onde o usuário insere informações (III) Verificar variáveis que compõe instrução SQL antes de enviá-la ao SGBD (IV)

Segurança n Implementando o método (I) : seguranca. inc <% if(session. get. Attribute("cod. Func")

Segurança n Implementando o método (I) : seguranca. inc <% if(session. get. Attribute("cod. Func") == null) { response. send. Redirect("index. html"); } else if(session. get. Attribute("cod. Func"). equals("")) { response. send. Redirect("index. html"); } %>

Segurança n Implementando o método (II) : n n Geralmente usa-se uma variável de

Segurança n Implementando o método (II) : n n Geralmente usa-se uma variável de servidor chamada HTTP_REFER; Compara-se o HTTP_REFER com a URL do seu site ; Se a parte padrão bater, então o acesso é válido; Caso contrário, redirecione o usuário para a página inicial.

Segurança n Implementando o método (III) : n Nos campos recebidos com informações do

Segurança n Implementando o método (III) : n Nos campos recebidos com informações do usuário, substitua: n “<Script” por “<!--”; n “</Script” por “-->”;

Segurança n Implementando o método (IV) : n n Verifique se variáveis string possuem

Segurança n Implementando o método (IV) : n n Verifique se variáveis string possuem aspa simples e substitua por duas aspas simples ou pelo correspondente ASCII; Verifique se variáveis string possuem sinais interpretados pelo SGBD como comentário; Verifique se o tipo das variáveis a serem inseridas no SGBD correspondem aos tipos declarados na tabela; Verifique se o tamanho das variáveis correspondem aos tamanhos declarados na criação das tabelas;

Segurança n E ainda tem mais!!! n n n Criptografia; Buffer Overflow; Acesso de

Segurança n E ainda tem mais!!! n n n Criptografia; Buffer Overflow; Acesso de escrita e de leitura aos diretórios que compõem a página; . . . entre outros!