Curso Java - JSP e Servlet

Embed Size (px)

Citation preview

Aplicao Web

JSP, Servlet, Estrutura de um WAR, web.xml (principais tags)

Java Server Pages

Declaraes, Expresses, Scriptlets, Comentrios e Diretivas

1

Java Server Pages

JSP uma tecnologia para desenvolvimento de aplicaes WEB que utiliza Java como linguagem de script. A rigor, toda a pgina jsp convertida pelo servidor para uma Servlet. Na primeira vez em que a pgina executada, o container JSP gera o arquivo .java e .class correspondente pgina jsp (por isso a primeira chamada pgina mais lenta). Nas prximas vezes o container utiliza o .class que j foi gerado para executar a pgina. Uma nova Servlet s ser gerada quando o arquivo jsp for alterado.

Organizado por Rosimeire Teixeira e Alex Nrio

Java Server Pages

Um arquivo jsp contm alm de tags HTML, cdigo java que possibilitam a criao de contedo dinmico. A organizao deste cdigo java na pgina feita atravs de delimitadores especficos divididos 5 categorias: Declaraes Expresses Scriptlets Comentrios Diretivas

Organizado por Rosimeire Teixeira e Alex Nrio

2

JSP - Declaraes

So usadas para definir atributos e mtodos especficos para a pgina jsp em questo. A sintaxe de uma declarao : O contedo deve seguir a mesma estrutura de declarao de mtodos e atributos em Java.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo declaracao.jsp

Curso de Java 2 - JSP - Declaraes

Organizado por Rosimeire Teixeira e Alex Nrio

3

JSP - Expresses

So utilizadas para retornar um valor String a partir de um trecho de cdigo Java. A sintaxe de uma expresso : O que o servidor jsp faz de fato ao encontrar esta tag numa ) pgina substitu-la por: out.print(expresso). out.print( Por isso o contedo de uma expresso no possui ponto-evrgula no final.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo expressao.jsp Curso Java 2 - JSP - Expresses A raiz de

Organizado por Rosimeire Teixeira e Alex Nrio

4

JSP - Scriptlets

So utilizados para escrever trechos de cdigos Java na pgina. A sintaxe de um scriptlet : Simplificando, o cdigo Java que vlido aqui o mesmo que utilizado dentro de um mtodo numa classe Java

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo scriptlet.jsp Curso Java 2 - JSP - Scriptlets Linha Par! Linha Impar!

Organizado por Rosimeire Teixeira e Alex Nrio

5

JSP - Comentrios

Existem dois tipos principais de comentrios que podem ser usados em uma pgina JSP : Comentrios de contedo, que so enviados para o cliente mas no geram uma sada visvel. S possvel v-los editando o cdigo HTML da pgina. Sintaxe: Comentrios JSP, que no so enviados para o cliente. Esto disponiveis apenas nos arquivos JSP. As sintaxes possveis so: e

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo comentarios.jsp

Curso Java 2 - JSP - Comentrios

Organizado por Rosimeire Teixeira e Alex Nrio

6

JSP - Diretivas

As diretivas so usadas para fornecer informaes especiais ao container JSP sobre a pgina JSP quando esta compilada para uma Servlet. A sintaxe de uma diretiva : Os dois tipos principais de diretivas so: page include

Organizado por Rosimeire Teixeira e Alex Nrio

JSP Diretivas - page

A diretiva page segue a seguinte sintaxe:

Dos atributos de page, o mais importante para ns neste momento o import. O atributo import funciona de maneira anloga ao import das classes. A sintaxe da diretiva page com o atributo import preenchido fica assim: Ou %> %>Organizado por Rosimeire Teixeira e Alex Nrio

7

Exemplo diretiva_page.jsp Curso Java 2 - JSP - Diretiva page , ,
Organizado por Rosimeire Teixeira e Alex Nrio

JSP Diretivas - include

A diretiva include permite que um arquivo seja includo pagina atual. A sintaxe da diretiva include : Uma boa ilustrao de utilizao de includes quando se deseja reproduzir um cabealho padro para vrias pginas.

Organizado por Rosimeire Teixeira e Alex Nrio

8

Exemplo cabecalho.html Exemplos da Sintaxe Padro JSP Declarao. Expresses. ScriptLets. Comentrios. Diretivas: page e include.

Organizado por Rosimeire Teixeira e Alex Nrio

Exemplo diretiva_include.jsp

Curso Java 2 - JSP - Diretiva include

Organizado por Rosimeire Teixeira e Alex Nrio

9

Java Server Pages

Objetos implcitos

JSP - Objetos Implcitos

Alm do cdigo e das classes criadas pelo programador, as pginas jsp possuem uma srie de objetos implcitos que so instanciados pelo container JSP para viabilizar o acesso e a transferncia de dados durante a execuo da aplicao web. Assim como todo objeto em Java, cada objeto implcito uma instncia de uma classe ou interface. Segue uma tabela com os nove objetos implcitos disponveis nas pginas jsp

Organizado por Rosimeire Teixeira e Alex Nrio

10

JSP - Objetos ImplcitosOBJETO page config request response out session application pageContext exception CLASSE OU INTERFACE javax.servlet.jsp.HttpJspPage javax.servlet.ServletConfig javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.jsp.JspWriter javax.servlet.http.HttpSession javax.servlet.ServletContext javax.servlet.jsp.PageContext javax.lang.ThrowableOrganizado por Rosimeire Teixeira e Alex Nrio

DESCRIO Instncia de servlet da pgina Dados de configurao de servlet Dados de solicitao, incluindo parmetros Dados de resposta Fluxo de sada para contedo da pgina Dados de sesso especficos de usurio Dados compartilhados por todas as pginas de aplicao Dados de contexto para execuo da pgina Erros no capturados ou exceo

JSP Objetos Implcitos

Dentre estes todos estes objetos, os mais relevantes para iniciantes em JSP so: Os objetos que se referem ao contexto da pgina. request, session, application e pageContext Mtodos importantes: Object getAttribute(String key) void setAttribute(String key, Object value)

O objeto que representa um fluxo de sada para a pgina out Mtodos: print() e println()

O objeto que representa um erro inesperado exception Mtodo importante: String getMessage()

Organizado por Rosimeire Teixeira e Alex Nrio

11

Java Server Pages

Trabalhando com Formulrios

JSP Formulrios (um pouco de HTML)

Um formulrio um modelo para a entrada de um conjunto de dados. O elemento delimita um formulrio e contm uma seqncia de elementos de entrada e de formatao do documento. ... Os atributos de FORM que nos interessam agora so: ACTION Especifica a pgina para a qual sero enviados os dados do formulrio.

METHOD Seleciona um mtodo para acessar o URL de ao. Os mtodos usados atualmente so GET e POST. Ambos os mtodos transferem dados do browser para o servidor, com a seguinte diferena bsica: POST os dados entrados fazem parte do corpo da mensagem enviada para o servidor; transfere grande quantidade de dados. GET os dados entrados fazem parte do URL (endereo) associado consulta enviada para o servidor; suporta at 128 caracteres.Organizado por Rosimeire Teixeira e Alex Nrio

12

JSP Formulrios (um pouco de HTML)

Os formulrios podem conter qualquer formatao - pargrafos, listas, tabelas, imagens - exceto outros formulrios. Em especial, colocamos dentro da marcao de as formataes para campos de entrada de dados, que so trs: , e . Todos os campos de entrada de dados tm um atributo NAME, ao qual associamos um nome, que ser utilizado posteriormente para capturar estes dados em Java. O envio dos dados do formulrio para a pgina indicada no action da tag feito atravs do boto submit. Para manipular os dados vindos do formulrio esta pgina destino deve receber estes dados e trat-los em Java.Organizado por Rosimeire Teixeira e Alex Nrio

Servlets

Ciclo de vida, Principais mtodos, Requisies e respostas, Sesso

13

Servlet Introduo

Mdulos de software executados em um servidor Web para atender requisies de aplicaes cliente e prestarlhe algum servio. Protocolo utilizado: HTTP; Processa dados de um formulrio HTML e gera resposta dinmicas para o cliente. Servidor Web: Software desenvolvido de acordo a especificao de Servlet Exemplo: Apache Tomcat (http://jakarta.apache.org/tomcat)

Biblioteca necessria: servlet.jarOrganizado por Rosimeire Teixeira e Alex Nrio

Servlet Estrutura bsica

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { //Insira o codigo aqui. } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { //Insira o codigo aqui. } }

Organizado por Rosimeire Teixeira e Alex Nrio

14

Servlet Ciclo de vida

HttpServlet : init(), destroy(), service(); Mapeamento de requisies para servlets: Se no existe uma instncia para a servlet invocada: Cria-se uma instncia da servlet; Invoca o mtodo init();

Invoca o mtodo service() passando os objetos de requisio e resposta como parmetro;

Ao remover uma servlet: Invoca o mtodo destroy();

Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Principais mtodos

doGet(...) Processam requisies do tipo GET;

doPost(...) Processam requisies do tipo POST;

So invocados automaticamente pelo mtodo service() da classe HttpServlet;

Organizado por Rosimeire Teixeira e Alex Nrio

15

Servlet

import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AloMundo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); out.println(Al mundo dos Servlets!); out.close; } } /* ANEXO 2 CODIGO 1 */Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Executando

Copiar a classe compilada para: /webapps/ROOT/WEB-INF/classes

Para executar a servlet: http://:/servlet/AloMundo Exemplo: http://localhost:8080/servlet/AloMundo

Exerccio: Criar a servlet AloMundo e invoc-la a partir do navegador web.

Organizado por Rosimeire Teixeira e Alex Nrio

16

Servlet Contexto

Considerando a execuo de servlet demonstrada, imaginemos agora um servidor, no qual tenhamos diversas aplicaes rodando. Problemas: Teramos classes de aplicaes diferentes misturadas; Dificuldade de manuteno; Desorganizao;

Organizado por Rosimeire Teixeira e Alex Nrio

Servlet Contexto

Diretrio no servidor onde colocaremos nossa aplicao; O nome desse diretrio identificar nossa aplicao no servidor; A aplicao ser mapeada para um contexto especifico; Cada aplicao ter seu prprio contexto; Nomenclatura: /webapps/

Exemplo: /webapps/treinamento/

Organizado por Rosimeire Teixeira e Alex Nrio

17

Aplicao Web

Organizado por Rosimeire Teixeira e Alex Nrio

Aplicao Web arquivo compactado

Organizado por Rosimeire Teixeira e Alex Nrio

18

Web.xml

Arquivo de configuraes de uma aplicao web. Deployment Descriptor.

ANEXO 2 CODIGO 2.

Organizado por Rosimeire Teixeira e Alex Nrio

Configurando Servlet

A classe deve ser colocada no diretrio: //classes

Alterar o arquivo web.xml Incluir configurao referente a nova servlet

Organizado por Rosimeire Teixeira e Alex Nrio

19

Configurando Servlet

Exerccio: Criar um contexto no servidor; Criar os diretrios WEB-INF/classes; Copiar a servlet para o diretrio WEB-INF/classes; Incluir a servlet AloMundo no arquivo web.xml; Executar a servlet a partir do browser.

Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Requisio HTTP

Resposta HTTP

Organizado por Rosimeire Teixeira e Alex Nrio

20

Modelo Requisio e Resposta

Trabalhando com requisies: Objeto HttpServletRequest request.getParameter(NOME_PARAM); Retorno: String. - NOME_PARAM: Nome do parmetro da requisio. request.setAttribute(NOME_ATTRIB, Object); request.getAttribute(NOME_ATTRIB); Retorno: Object;Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Trabalhando com requisies: Objeto HttpServletRequest request.getParameterNames(); request.getParameterValues(NOME_PARAM); request.setAttribute(NOME_ATTRIB, Object); request.getAttribute(NOME_ATTRIB); request.getRequestDispatcher(/URL).forward(request, response);

Organizado por Rosimeire Teixeira e Alex Nrio

21

Modelo Requisio e Resposta

Trabalhando com requisies: Objeto HttpServletRequest Encaminhando a requisio para um JSP ou outra servlet: JSP: request.getRequestDispatcher("/jsp/formulario.jsp").forward( request, response); Servlet: request.getRequestDispatcher("/teste/AloMundo").forward(request, response);

Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Exerccio: ANEXO 2 CODIGO 3 e 4 Exerccios Prticos

Organizado por Rosimeire Teixeira e Alex Nrio

22

Modelo Requisio e Resposta

Trabalhando com resposta: Objeto HttpServletResponse response.getWriter(); Retorno: PrintWriter response.getOutputStream(); Retorno: PrintStream;

Exemplo: PrintWriter writer = response.getWriter(); OutputStream out = response.getOutputStream();Organizado por Rosimeire Teixeira e Alex Nrio

Modelo Requisio e Resposta

Exerccio: Exerccio Prtico 8 ANEXO 2 CODIGO 6, 7 e 8

Organizado por Rosimeire Teixeira e Alex Nrio

23

Sesso

Em uma pgina de comrcio eletrnico, tal como Americanas.com, possvel navegar por diversas pginas e comprar diversos produtos, bastando adicion-los no carrinho de compras. Em aplicaes web desenvolvidas em Java isso pode ser implementado atravs do conceito de sesses.

Organizado por Rosimeire Teixeira e Alex Nrio

Sesso

Uma sesso um espao de memria reservado no servidor para cada usurio logado na aplicao. A sesso restrita para cada usurio. Independe de configuraes feitas pelo usurio. Diferente dos cookies.

Toda sesso tem um tempo de vida limitado. Informaes permanentes devem ser guardadas em banco de dados.

Organizado por Rosimeire Teixeira e Alex Nrio

24

Sesso

Objeto HttpSession : HttpSession session = request.getSession(); session.setAttribute(NOME_ATTRIB, Object); session.getAttribute(NOME_ATTRIB); session.getAttributeNames(); session.invalidate();

Organizado por Rosimeire Teixeira e Alex Nrio

Sesso

Exerccio: Criar uma tabela usurio com os campos: nome, login, senha. Criar a classe UsuarioDAO com o mtodo: public UsuarioVO login(UsuarioVO usuario) {} O mtodo devera retornar um objeto UsuarioVO preenchido caso o usurio seja autenticado. Caso contrarrio, lance uma AplicacaoException (Anexo 2 Cod. 9) com a mensagem: Login ou senha invlidos.

Criar um servlet para processar a requisio de login e guardar o objeto UsuarioVO na sesso. Crie uma servlet, UsuarioLogadoServlet, para obter o usurio logado da sesso e exibir seus dados numa pgina web.

Organizado por Rosimeire Teixeira e Alex Nrio

25

JSTL

Configurando: web.xml /jstl/core /WEB-INF/tlds/c.tld

JSP

/WEB-INF/lib Colocar o arquivo jstl.jar

Organizado por Rosimeire Teixeira e Alex Nrio

JSTL

Organizado por Rosimeire Teixeira e Alex Nrio

26

JSTL

Organizado por Rosimeire Teixeira e Alex Nrio

JSTL