Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso de Java para Web - Marcos Mendes
Curso de Java para Web - Marcos Mendes
2010
Marcos Mendes
1
Objetivo Principal do Curso
2
Bibliografia de Referência
Desenvolvendo Aplicações Web com JSP, Servlets,
JSF, Hibernate, EJB 3 Persistence e Ajax
Edson Gonçalves
Editora Ciência Moderna
Desenvolvendo na Web com JavaServer Pages
Duane K. Fields & Mark A. Kolb
Editora Ciência Moderna – Manning
Java - Servlet: Programação
Jason Hunter & William Crawford
Editora Ciência Moderna – O´Reilly
Revista Java Magazine – Edições 6, 7, 8, 66 e 67
www.caelum.com.br - Apostila FJ-21
www.jeebrasil.com.br
3
Servlets
Servlets são classes Java executadas
no lado Servidor que atendem a
requisições e podem gerar uma
resposta a elas.
44
Aplicações Executadas no Servidor
Servidor Web HTTP
JavaServer Web Development Kit (JSWDK).
Jakarta TomCat.
TomCat
Configuração e ativação do Servidor.
Servlets
Formato de um Servlet.
API Servlet (pacotes javax.servlet e javax.servlet.http) .
Exemplo (TestServlet.java)
Invocando o Servlet via formulário HTML.
Gravação de dados de um formulário HTML em um Banco
de Dados Remoto.
Exibição de dados de um Banco de Dados em uma página
HTML.
Invocando o Servlet através de uma applet.
5
Instalação do Jakarta Tomcat
Baixe o Tomcat no endereço:
http://jakarta.apache.org/tomcat/
Clique no link download;
download
Clique no link binaries;
binaries
Procure por Tomcat 5.0.25 keys (ou mais recente);
Clique em 5.0.25 exe (arquivo de instalação executável).
Após o download, execute o arquivo baixado.
Aceite as opções padrão.
Após instalado, inicie o browser e acesse o endereço
http://localhost:8080/
6
Instalação do Plugin EclipseHtmlEditor
7
Instalação do TomcatPlugin para o Eclipse
Baixe o TomcatPlugin no endereço:
http://www.sysdeo.com/eclipse/tomcatplugin
Após o download, descompacte o arquivo na pasta "plugins"
do Eclipse ("c:/eclipse/plugins").
Inicie o Eclipse, abra o menu "Window", selecione "Preferences"
e clique na opção "Tomcat".
Na janela "Preferences": Marque a versão instalada do Tomcat;
Preencha a caixa de texto "Tomcat home" com o nome da pasta
de instalação do Tomcat; Em "Context declaration mode",
selecione a opção "Server.xml". Aplique as alterações e clique
em "Ok".
Inicie o Tomcat através do botão "Start Tomcat" da barra de
ferramentas do Eclipse.
Após finalizadas as mensagens na aba "console", inicie o
browser e acesse o endereço http://localhost:8080
8
Criação de um Projeto Web no Eclipse
Selecione File / New / Project / Java / Tomcat Project.
Preencha a caixa "Project name" com o nome do seu projeto e
clique em "Next".
Preencha a caixa "Context name" com "/Teste" e a caixa
"Subdirectory to set as web application root (optional)" com
"/web" e clique em "Finish".
Configure o plugin EclipseHtmlEditor da Amateras: Clique com o
botão direito no projeto e selecione "Properties", clique no item
"Amateras", preencha a caixa de texto "Root" com "/web".
Clique em "Apply" e "Ok".
9
Criação de uma classe Servlet no Projeto Web
Clique com o botão direito no projeto e selecione New / Class.
Preencha a caixa "Name" com o nome da classe "TestServlet".
Preencha a caixa "Package" com o nome do pacote "servlets".
Clique em "Finish".
Copie o código do slide seguinte no corpo da classe.
Crie o arquivo "web.xml"
web.xml (nos próximos slides) na pasta
"WEB-INF"
WEB-INF clicando com o botão direito na pasta "WEB-INF" e
selecionando New / File.
No browse, abra o endereço
http://localhost:8080/Teste/oi
10
Exemplo de recebimento e envio de dados
package servlets; TestServlet.java
Neste exemplo, o servlet recebe
import java.io.*; um nome e retorna uma
import javax.servlet.*; mensagem de saudação
import javax.servlet.http.*;
<servlet>
<servlet-name>Teste</servlet-name>
Teste
<servlet-class>servlets.TestServlet</servlet-class>
servlets.TestServlet
</servlet>
<servlet-mapping>
<servlet-name>Teste</servlet-name>
Teste
<url-pattern>/oi</url-pattern>
/oi
</servlet-mapping>
</web-app>
12
Criação de um formulário html para acessar um servlet
No projeto eclipse, clique com o botão direito na pasta web,
web e
selecione New / File. Preencha a caixa "File name" com
"Teste.html". Copie o código abaixo no arquivo criado.
<html>
<head>
<title> Formulário com servlet </title>
</head>
<body>
<h1>Teste de formulário acionando uma servlet</h1>
<form action=
action "oi" method="post">
method
<p>Nome: <input type="text" name="nome">
<p> <input type="submit" value="Enviar">
</form>
</body>
</html>
No browser, abra o endereço
http://localhost:8080/Teste/Teste.html
13
Aplicações MultiCamadas
Camada Camada Web Camada de Camada EIS
Cliente Negócios
Aplicação Request
Desktop / Web HttpServletRequest
Servidor de
Aplicações /
JCA
Servidor Web MainFrame
Browser
HTML Servlet
XML JSP
JavaScript
Applet JPA / JDBC
Response EJB
HttpServletResponse
Aplicações Java
Bancos de Dados
Desktop
14
Requisição / Resposta em um Servlet HTTP
doGet()
doPost()
Request service() doPut()
Browser
Response doDelete()
doOption()
doTrave()
15
Árvore de diretórios da Aplicação
A estrutura pode estar em uma árvore fora do Tomcat,
basta editar o arquivo server.xml do diretório de configuração
do Tomcat ([TOMCAT_HOME]\conf) e incluir um novo contexto:
<Context path= "/Teste" docBase="c:\teste\" debug="0" />
[Tomcat_Home]
Webapps
Arquivos .html,
applets e
Sua_Aplicaçã imagens
o
Arquivo web.xml
WEB-INF
Servlets (.class)
classes
16
Árvore de diretórios gerada pelo TomcatPlugin
Servlets (.class)
Arquivos .html e
páginas JSP
Arquivo web.xml
Arquivos (. jar)
17
Acesso a dados no MySQL por um servlet
Uma das formas de acessar um banco de dados
MySQL através de um servlet é copiar o driver do
MySQL "Connector/J"
Connector/J presente no arquivo mysql-
connector-java-5.0.6-bin.jar para o diretório
"WEB-INF\lib"
WEB-INF\lib da sua aplicação.
18
Modelo de Dados para teste
Cliente Pedido
Item Produto
19
Tabela Cliente
20
Tabela Pedido
21
Tabela Item
22
Tabela Produto
23
Classes DAO – ConnectionFactory.java
package model;
import java.sql.*;
24
Classes DAO – Produto.java
package model;
import java.text.NumberFormat;
25
Classes DAO – Produto.java
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public String getPrecoFormatado() {
return nf.format(preco);
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
}
26
Classes DAO – ProdutoDAO.java
package model;
import java.sql.*;
import java.util.*;
27
Classes DAO – ProdutoDAO.java (cont.)
28
Classes DAO – ProdutoDAO.java (cont.)
29
Classes DAO – ProdutoDAO.java (cont.)
pst.close();
con.close();
30
Classes DAO – Cliente.java
package model;
31
Classes DAO – Cliente.java (cont.)
32
Classes DAO – ClienteDAO.java
package model;
import java.sql.*;
public class ClienteDAO {
private ConnectionFactory fabrica;
33
Classes DAO – ClienteDAO.java (cont.)
34
Classes DAO – Pedido.java
package model;
import java.util.Date;
35
Classes DAO – Pedido.java (cont.)
36
Classes DAO – PedidoDAO.java
package model;
import java.sql.*;
37
Classes DAO – PedidoDAO.java (cont.)
38
Classes DAO – Item.java
package model;
39
Classes DAO – ItemDAO.java
package model;
import java.sql.*;
40
Gravando dados
package servlets; GravaServlet.java
Este exemplo recebe dados de uma
import java.io.*; requisição e os grava em uma tabela
import javax.servlet.*; de banco de dados.
import javax.servlet.http.*;
import model.*;
import model.*;
43
Lendo todos os dados (cont.)
try {
ProdutoDAO dao = new ProdutoDAO();
ArrayList<Produto> produtos = dao.todosProdutos();
if (!produtos.isEmpty()) {
out.println("<table border='1'><tr> <th>Código <th>Descrição");
out.println("<th>Preço <th>Foto");
for(Produto p : produtos) {
out.println("<tr><td>" + p.getId());
out.println("<td>" + p.getDescricao());
out.println("<td>" + p.getPreco());
out.println ("<td> <img src='" + p.getFoto() + "'>" );
}
out.println("</table>");
}
} catch (Exception e) {
out.println(e);
}
out.println("</body> </html>");
out.close();
}
}
44
Buscando dados
package servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import model.*;
45
Buscando dados (cont.)
try {
ProdutoDAO dao = new ProdutoDAO();
ArrayList<Produto> produtos = dao.todosProdutos(descricao);
if (!produtos.isEmpty()) {
out.println("<table border='1'><tr> <th>Código <th>Descrição");
out.println("<th>Preço <th>Foto <th>Excluir");
for(Produto p : produtos) {
out.println("<tr><td>" + p.getId());
out.println("<td>" + p.getDescricao());
out.println("<td>" + p.getPreco());
out.println ("<td> <img src='" + p.getFoto() + "'>" );
out.println ("<td> <a href = 'apagar?idProd=" + p.getId() + "'>" );
out.println ("<img src='lixo.gif'> </a>" );
}
out.println("</table>");
}
} catch (Exception e) {
out.println(e);
}
out.println("</body> </html>");
out.close();
}
}
46
Apagando dados
package servlets;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import model.*;
47
Apagando dados (cont.)
try {
ProdutoDAO dao = new ProdutoDAO();
result = dao.excluiProduto(Integer.parseInt(idProd));
} catch (Exception e) {
out.println(e);
}
if (result) {
out.println("<br>Produto excluído com sucesso");
} else {
out.println("<br>Problemas na exclusão");
}
out.println("</h1></body> </html>");
out.close();
}
}
48
Gravando dados na Sessão HTTP (HttpSession)
package servlets;
GravandoSessaoServlet.java
import java.io.*;
Este exemplo armazena
import javax.servlet.*; dados na sessão HTTP
import javax.servlet.http.*;
import model.*;
49
Lendo dados da Sessão HTTP (HttpSession)
package servlets;
LeSessaoServlet.java
import java.io.*; Este exemplo recupera
import javax.servlet.*; dados da sessão HTTP
import javax.servlet.http.*;
import model.*;
void init ( )
ServletResponse res )
ServletRequest (interface)
ServletInputStream getInputStream ( )
BufferedReader getReader ( )
ServletResponse (interface)
ServletOutputStream getOutputStream ( )
PrintWriter getWriter ( )
void setContentType ( String type )
52
Pacote javax.servlet.http
javax.servlet.http.HttpServlet
void doGet ( HttpServletRequest req,
HttpServletResponse res )
void doPost ( HttpServletRequest req,
HttpServletResponse res )
HttpServletRequest (interface)
Derivada de javax.servlet.ServletRequest
HttpServletResponse (interface)
Derivada de javax.servlet.ServletResponse
void sendRedirect ( String location )
53
Compilação de Servlets no Eclipse
Para se compilar um servlet no Eclipse é necessário que se
adicione o arquivo servlet.jar (Tomcat 4.x) ou servlet-api.jar
(Tomcat 5.x ou mais recente) no classpath do Eclipse.
Para tanto, no Eclipse, Selecione o menu "Project"
Project opção
"Properties",
Properties clique em "Java Build Path",
Path selecione a aba
"Libraries",
Libraries clique no botão "Add External Jars..."
Jars... selecione o
arquivo servlet-api.jar em "[Tomcat_Home]\common\lib",
[Tomcat_Home]\common\lib
clique em "abrir"
abrir e finalmente clique em "ok".
ok
Pode-se utilizar também um build do Apache Ant, que é o mais
recomendável.
54
Como testar o Servlet exemplo no Tomcat
Crie a pasta Teste sob [Tomcat_Home]\Webapps.
[Tomcat_Home]\Webapps Crie a
pasta WEB-INF sob Teste.
Teste E a pasta classes sob WEB-
INF
55
Como testar o Servlet exemplo no JSWDK
Descarregue o JavaServer Web Development Kit a partir do
endereço: http://java.sun.com/products/jsp/download.html
Istale o kit no diretório \jswdk
Mude a propriedade port para port NMTOKEN “80” no
arquivo \jswdk\webserver.xml
Compile o código do servlet: javac –classpath
\jswdk\lib\servlet.jar;. TestServlet.java
Copie o arquivo de classe Testservlet.class no diretório
\jswdk\webpages\WEB-INF\servlets
Edite o arquivo \jswdk\webpages\WEB-INF\mappings.
properties,
properties incluindo a linha: /testservlet=testservlet
Edite o arquivo \jswdk\webpages\WEB-INF\servlets.
properties,
properties incluindo a linha: testservlet.code=TestServlet
Copie os arquivos testservlet.html e TestServlet.class no
diretório \jswdk\webpages
Inicie o servidor da Web executando: \jswdk\startserver
Abra o endereço http://localhost/testservlet.html
56
Instalação do Apache ANT
Baixe o Ant do site: http://ant.apache.org
Descompacte o arquivo na raíz do hd.
Renomeie a pasta para "ant".
Crie uma variável de ambiente chamada
"ANT_HOME" apontando para a pasta "<drive>:\ant"
Inclua a pasta "ANT_HOME\bin" no path do sistema.
Crie um buildfile para sua aplicação. (slides seguintes)
57
Build de aplicação web usando o ANT
<?xml version="1.0" encoding="iso-8859-1" ?>
60
Invocando um servlet via Applet
import java.awt.*; TestServapp.java
import java.awt.event.*; Este exemplo usa uma applet para
import javax.swing.*; enviar e receber dados do servlet
import java.net.*; TestServlet visto anteriormente
import java.io.*;
Container cp = getContentPane( );
cp.setLayout( new FlowLayout( ) );
cp.add (lblnome);
cp.add (txtnome);
cp.add (btnsend);
cp.add (txtStatus);
pagina = new JEditorPane
("text/html","<html><body> Oi </body></html>" );
cp.add (pagina);
}
public void actionPerformed(ActionEvent evt) {
try {
URL app = new
URL("http://localhost/Teste/Test");
URLConnection con = app.openConnection(
openConnection );
con.setDoInput(true);
setDoInput
con.setDoOutput(true);
setDoOutput
62
Invocando um servlet via Applet (cont.)
63
JSP
JSP – JavaServer Pages, são páginas
web com conteúdo dinâmico.
64
Introdução a JSP
O que é JSP, e sua função.
É uma tecnologia baseada na linguagem Java utilizada
para a criação de sites dinâmicos na Web.
As páginas JSP são arquivos texto normalmente com a
extensão .jsp contendo tags html juntamente com tags
(código) JSP para acesso a dados e qualquer outra
funcionalidade dinâmica. O código dessas tags JSP é
executado em um container no servidor e o resultado
desse código é enviado ao cliente (browser) normalmente
na forma de texto html.
São utilizadas na camada "View" da aplicação. Enquanto
os servlets, na camada "Controller".
65
Introdução a JSP
Ambiente de desenvolvimento (Servidor
HTTP e Container).
As páginas JSP são arquivos texto, portanto, podem ser
escritas por qualquer editor ascii. Elas são compiladas em
servlets e executadas em um container JSP (também
chamado de JSP engine) rodando em um servidor web.
Utilizaremos o servidor Tomcat (projeto Jakarta – Apache
Software Foundation).
66
Introdução a JSP
Servlet X CGI
Programas de CGI rodam fora do servidor da web, cada
solicitação que um deles recebe, ele gera um novo
processo no servidor, o que, em grande escala, ocasiona
em consumo de recursos e problemas de performance.
Já os servlets são executados em um único processo no
servidor. As solicitações a um servlets geram uma nova
linha de execução (thread) que consome muito menos
recursos que um novo processo.
67
Introdução a JSP
Separação da lógica de implementação da
camada de apresentação.
Uma exigência na criação de sites dinâmicos é que haja
um alto grau na separação da lógica de negócios da lógica
de apresentação.
Normalmente estão envolvidas na construção de um site
duas equipes, uma de designers, responsáveis pela
apresentação, e uma de programadores (webmasters),
responsáveis pelo acesso a banco de dados, autenticação
de usuários, etc.
Quanto menos código de programação aparecer nas
páginas, maior será a separação das tarefas e menores as
chances de um designer alterar um código que não
deveria.
68
Introdução a JSP
Design de aplicações centradas em componentes.
Boa parte da separação mencionada anteriormente é
conseguida através da utilização de componentes, os
JavaBeans.
JavaBeans são componentes reutilizáveis (um componente
pode ser utilizado em várias aplicações) que encapsulam
dados e código. Esses componentes são acessados pelas
páginas JSP através de um conjunto de tags específicas.
Portanto, simplificando, nas páginas JSP aparecem apenas
as tags que enviam ou lêem dados em um bean. A lógica de
implementação, ou seja, se esse bean está fazendo
comunicação com um banco de dados, quais as tabelas que
ele deve acessar, se o banco de dados está no servidor ou
em outra máquina, e assim por diante, ficam escondidas da
página mantida pelo designer.
69
Primeiro Exemplo de Página JSP
Página exemplo: Oi.jsp
Clique com o botão direito na pasta "web" do projeto, selecione
New / Other... / Amateras / JSP File.
File Preencha a caixa "File name"
com "Oi.jsp". Copie o trecho de código abaixo entre as tags
"<body>" e "</body>" do arquivo criado.
<%
String usr = request.getParameter("nome");
request
if (usr == null) {
usr = "Ninguém";
}
%>
Oi <%=
<% usr %>,
%> tudo bem ?
70
Exemplo usando o Padrão MVC
<html> InsereProduto.html
<head> Formulário para cadastrar
<title>Cadastro de Produtos</title> um novo produto
</head>
<body>
<h1>Cadastro de Produtos</h1>
<form action= "inserirproduto" method="post">
<p>Descrição<input type="text" name="descProd">
<p>Preço<input type="text" name="precoProd">
<p>Foto<input type="text" name="fotoProd">
<p> <input type="submit" value="Inserir">
</form>
</body>
</html>
71
Exemplo usando o Padrão MVC (cont.)
package controller; InsereProdutoServlet.java
Classe que recebe os dados
import java.io.*; do formulário e grava no
import javax.servlet.*;
Banco de dados
import javax.servlet.http.*;
import model.*;
72
Exemplo usando o Padrão MVC (cont.)
try {
ProdutoDAO dao = new ProdutoDAO();
result = dao.insereProduto(p);
} catch (Exception e) {
e.printStackTrace();
}
HttpSession sessao = req.getSession();
sessao.setAttribute("prod", p);
RequestDispatcher rd =
req.getRequestDispatcher("ProdutoGravado.jsp");
rd.forward(req, resp);
}
}
73
Exemplo usando o Padrão MVC (cont.)
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
74
Compra em uma Loja Virtual
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@ page import = "java.util.*, model.*" %>
<jsp:useBean id="dao" class="model.ProdutoDAO"/> Catalogo.jsp
Página JSP que exibe os produtos
<html> para que o usuário possa
<head> adicioná-los no carrinho de compras
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title>Catálogo de Produtos</title>
</head>
<body>
<%ArrayList<Produto> produtos = dao.todosProdutos(); %>
<table border="1">
<% for(Produto p : produtos) { %>
<tr><td> <%=p.getDescricao()%> </td>
<td> <%=p.getPreco()%> </td>
<td> <img src="<%=p.getFoto()%>"> </td>
<td> <a href="Carrinho.jsp?id=<%=p.getId()%>">comprar</a> </td>
</tr>
<%} %>
</table>
</body>
</html>
75
Compra em uma Loja Virtual (cont.)
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@ page import = "java.util.*, model.*" %>
Carrinho.jsp
Página JSP que armazena sessão os
<% produtos selelecionados pelo usuário
HashMap<Integer, Integer> carrinho;
carrinho = (HashMap<Integer, Integer>) session.getAttribute("carrinho");
if (carrinho == null) {
carrinho = new HashMap<Integer, Integer>();
}
int id = Integer.parseInt(request.getParameter("id"));
carrinho.put(id, 1);
session.setAttribute("carrinho", carrinho);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title>Carrinho de Compras</title>
</head>
76
Compra em uma Loja Virtual (cont.)
<body>
<table border="1">
<tr><th>Código<th>Descrição do Produto<th>Quantidade</tr>
<%
ProdutoDAO dao = new ProdutoDAO();
Set<Integer> ids = carrinho.keySet();
%> Carrinho.jsp (cont.)
<form action="fecharpedido">
<%
for(int idProd : ids) {
Produto p = dao.umProduto(idProd);
%>
<tr><td><input type="text" name="id" readonly size=5
value="<%=p.getId()%>">
<td><%=p.getDescricao()%>
<td><input type="text" name="qtd" size=10
value="<%=carrinho.get(idProd)%>">
<%
}
%>
<tr><td colspan="3" align="center">
<input type="submit" value="Fechar Pedido">
</form>
</table>
<p><a href="Catalogo.jsp">Continuar Comprando</a>
</body>
</html>
77
Compra em uma Loja Virtual (cont.)
package controller;
import java.io.*;
import java.util.*;
78
Compra em uma Loja Virtual (cont.)
// Cria novo Pedido
try {
PedidoDAO daoPed = new PedidoDAO();
Pedido ped = new Pedido();
ped.setCli(cli);
Date data = new Date();
ped.setData(data);
daoPed.inserePedido(ped);
int idPed = daoPed.getIdPedido(cli.getId(), data);
FechaPedidoServlet.java
Cont.
79
Compra em uma Loja Virtual (cont.)
for (int cont = 0; cont < ids.length; cont++) {
Produto prod = new Produto();
prod = daoProd.umProduto(
Integer.parseInt(ids[cont]));
Item item = new Item();
item.setProduto(prod);
item.setQuantidade(Integer.parseInt(qtds[cont]));
daoItem.insereItem(idPed, item);
}
} catch (Exception e) {
e.printStackTrace();
}
RequestDispatcher rd = req.getRequestDispatcher("ConfirmaPedido.jsp");
rd.forward(req, resp);
}
}
}
FechaPedidoServlet.java
Cont.
80
Compra em uma Loja Virtual (cont.)
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@ page import = "model.*"%>
<%
String email = request.getParameter("email"); Login.jsp
String senha = request.getParameter("senha"); Página para efetuar o
if (email != null) { login do cliente
try {
ClienteDAO daoCli = new ClienteDAO();
Cliente cli = daoCli.umCliente(email);
if (cli != null) {
if (senha.equals(cli.getSenha())) {
session.setAttribute("cliente", cli);
RequestDispatcher rd =
request.getRequestDispatcher("Catalogo.jsp");
rd.forward(request, response);
} else {
out.println("<h1>Senha Inválida</h1>");
}
} else {
out.println("<h1>Cliente não cadastrado</h1>");
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
%>
81
Compra em uma Loja Virtual (cont.)
<html>
<head>
Login.jsp
<title>Login do Sistema</title> Cont.
</head>
<body>
<h1>Login do Sistema</h1>
</form>
</body>
</html>
82
Compra em uma Loja Virtual (cont.)
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<jsp:useBean id="cliente" class="model.Cliente" scope="session">
<jsp:setProperty name="cliente" property="*"/>
</jsp:useBean> ConfirmaPedido.jsp
Página de confirmação
<html> do cadastro do pedido
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title>Confirmação do Pedido</title>
</head>
<body>
<h1>Pedido Cadastrado com Sucesso</h1>
<h1><%=cliente.getNome()%> </h1>
<h1><%=cliente.getEmail()%> </h1>
</body>
</html>
83
Comentários
Comentários de conteúdo. Serão incluídos no output da página
JSP.
<!-- ... -->
Comentários JSP. São independentes da linguagem de criação de
scripts. São ignorados pelo container JSP. Não aparecem no
servlet resultante.
<%-- ... -->
Comentários em scriptlets. Aparecem no servlet resultante. São
dependentes da linguagem de criação de scripts. No caso de Java
são /* ... */ ou // ...
<% /* ... */
// ... %>
84
Diretivas
As diretivas são tags utilizadas como uma espécie de
configuração da página JSP. São indicadas com as tags:
page
<%@ page atrib1 = “val1” atrib2 = “val2” ... %>
<jsp:directive.page atrib1 = “val1” atrib2 = “val2” ... />
Atributos aceitos:
autoFlush
“true” o buffer será esvaziado automaticamente enviando
os dados ao cliente.
“false” se o buffer ficar cheio, será emitida uma exceção.
padrão: <%@ page autoFlush = “true” %>
85
Diretivas
buffer
define o tamanho do buffer de saída, “none” para
desativar o buffer.
padrão: <%@ page buffer = “6kb” %>
contentType
define o tipo MIME da resposta gerada pela página JSP
padrão: <%@ page contentType = “text/html;
charset=ISO=8859-1” %>
errorPage
especifica uma página a ser exibida caso ocorra um erro.
Deve-se indicar um URL no mesmo servidor (local).
ex: <%@ page errorPage = “paginaerro.jsp” %>
86
Diretivas
extends
define a superclasse a ser usada pelo container para a
compilação da página JSP em servlet.
import
indica os pacotes das classes a serem utilizadas na
página. É o único atributo que pode ser repetido em uma
diretiva page.
ex: <%@ page import = “java.util.List, java.text.*” %>
info
usado para documentação da página.
ex: <%@ page info = “Página Principal, 2009” %>
isErrorPage
indica se a página é uma página de erro.
padrão: <%@ page isErrorPage = “false” %>
87
Diretivas
isThreadSafe
indica se a página poderá responder a múltiplas
solicitações simultaneamente.
padrão: <%@ page isThreadSafe = “true” %>
language
especifica a linguagem de criação de scripts a ser usada
pela página em todos os seus elementos de scripts.
padrão: <%@ page language = “java” %>
session
define se a página participa ou não do gerenciamento de
sessão.
padrão: <%@ page session = “true” %>
88
Diretivas
include
usada para incluir arquivos de outras páginas na página
corrente. As páginas incluídas devem estar no mesmo
servidor. Não há limitações para o número de páginas
incluídas.
ex: <%@ include file = “cabecalho.jsp” %>
taglib
indica uma biblioteca de tags personalizadas em que a página
corrente se apoia. É indicado o URI do arquivo Tag Library
Descriptior (TLD) e um prefixo de referência para a
biblioteca. A biblioteca deve estar no mesmo servidor da
página. Pode-se indicar várias bibliotecas, mas cada uma com
um prefixo.
ex: <%@ taglib uri = “tlds/persontags” prefix = “pt” %>
89
Declarações
São usadas para definir variáveis e métodos.
<%! ... %>
<jsp:declaration> ... </jsp:declaration>
Variáveis
As variáveis definidas como declarações se tornam variáveis
da classe de servlet e podem ser acessadas por qualquer
elemento da página.
Exemplo:
<%! int x = 5, y = 10; String nome = “João” %>
90
Declarações
Métodos
Os métodos definidos através das declarações se tornam os
métodos da classe de servlet.
Exemplo:
<%!
long fatorial(int x) {
if ( x == 0 ) return 1;
return x * fatorial(x-1);
}
%>
91
Declarações
Podem ser definidos vários métodos e variáveis em uma única tag
de declaração:
<%!
String nome = “Maria”;
int idade = 23;
String getNome( ) {
return nome;
}
int getIdade( ) {
return idade;
}
%>
92
Expressões
Destinadas ao output da página JSP. Os elementos de expressão
são substituídos por seu valor resultante na exibição da página.
<%= ... %>
<jsp:expression> ... </jsp:expression>
Exemplo:
<html> <body>
<%! double raio = 5; %>
A área da circunferência de raio <%= raio %> é
<%= Math.PI * Math.pow(raio, 2) %>
</body></html>
93
Expressões
No caso onde o output é condicional, pode-se utilizar em uma
expressão o operador condicional terciário ? :
<html> <body>
<%@ page import = “java.util.Calendar” %>
<%! Calendar tempo = Calendar.getInstance();
int hora = tempo.get(Calendar.HOUR_OF_DAY);
%>
Período do dia é <%= hora < 12 ? “AM”: “PM” %>
</body></html>
94
scriptlets
95
Objetos Implícitos relacionados a Servlets
page (javax.servlet.jsp.HttpJspPage)
config (javax.servlet.ServletConfig)
getInitParameterNames( )
getInitParameter( String name )
96
Objetos Implícitos relacionados a Input/Output
request (javax.servlet.http.HttpServletRequest)
getParameterNames ( )
getParameter (String name)
getParameterValues (String name)
getHeaderNames ( )
getHeaders (String name)
getIntHeader (String name)
getDateHeader (String name)
getCookies ( )
97
Objetos Implícitos relacionados a Input/Output
getMethod ( )
getRequestURL ( )
getQueryString ( )
getSession (boolean flag)
getRequestDispatcher(String path)
getRemoteHost ( )
getRemoteAddr ( )
getRemoteUser ( )
98
Objetos Implícitos relacionados a Input/Output
response (javax.servlet.http.HttpServletResponse)
setContentType ( )
getCharacterEncoding ( )
addCookie (cookie)
containsHeader (String name)
setHeader (name, value)
setIntHeader (name, value)
setDateHeader (name, date)
addHeader (name, value)
addIntHeader (name, value)
addDateHeader (name, date)
setStatus (code)
sendError (status, msg)
sendRedirect (url)
encodeRedirectURL (url)
encodeURL (name)
99
Objetos Implícitos relacionados a Input/Output
out (javax.servlet.jsp.JspWriter)
isAutoFlush ( )
getBufferSize ( )
getRemaining ( )
clearBuffer ( )
clear ( )
newLine ( )
flush ( )
close ( )
100
Objetos Implícitos Contextuais
session (javax.servlet.http.HttpSession)
getId ( )
getCreationTime ( )
getLastAccessedTime ( )
getMaxInactiveInterval ( )
setMaxInactiveInterval (t)
isNew ( )
invalidate ( )
application (javax.servlet.ServletContext)
pageContext (javax.servlet.jsp.PageContext)
101
Objetos Implícitos Contextuais
application (javax.servlet.ServletContext)
getServerInfo ( )
getMajorVersion ( )
getMinorVersion ( )
getMimeType (filename)
getResource (path)
getResourceAsStream (path)
getRealPath (path)
getContext (path)
getRequestDispatcher (path)
log (message)
log (message, exception)
102
Objetos Implícitos Contextuais
pageContext (javax.servlet.jsp.PageContext)
getPage ( )
getRequest ( )
getResponse ( )
getOut ( )
getSession ( )
getServletConfig ( )
getServletContext ( )
getException ( )
forward (path)
include (path)
103
Objetos Implícitos Contextuais
pageContext (javax.servlet.jsp.PageContext)
setAttribute (key, value, scope)
getAttributeNamesInScope (scope)
getAttribute (key, scope)
removeAttribute (key, scope)
findAttribute (name)
getAttributeScope (name)
PAGE_SCOPE
REQUEST_SCOPE
SESSION_SCOPE
APPLICATION_SCOPE
104
Objeto Implícito de Tratamento de Erros
exception (javax.lang.Throwable)
getMessage ( )
printStackTrace (out)
toString ( )
105
Ações
Forward
Include
Plug-in
Tags Bean
106
Introdução a EL (Expression Language)
107
Introdução a EL (Expression Language)
108
Introdução a JSTL (JSP Standard Tag Library)
109
Componentes Java Beans
Arquitetura
Abstração
Reusabilidade
Construção
Utilização
110
Distribuição e Implantação de Aplicações Web
Arquivos War
111
Validação de Formulários
Cliente
Servidor
112
Tratamento de Cookies
113
Envio de email
114
Tags Personalizadas
115