Você está na página 1de 115

Curso de Java para Web

Servlets e JavaServer Pages

2010

Marcos Mendes

1
Objetivo Principal do Curso

 Possibilitar a construção de páginas


Web com conteúdo dinâmico,
enfatizando o acesso a bancos de
dados.

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

 Baixe o EclipseHtmlEditor no endereço:


http://amateras.sourceforge.jp/
 Após o download, descompacte o arquivo na pasta "eclipse"
do Eclipse ("c:/eclipse").

 O EclipseHtmlEditor necessita da instalação do GEF (Graphical


Editing Framework). Baixe o arquivo do próprio site do Eclipse e
o descompacte na pasta raiz do seu HD ("c:/").

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.*;

public class TestServlet extends HttpServlet {


public void service (HttpServletRequest req, HttpServletResponse resp)
throws ServletException,
ServletException IOException {
resp.setContentType ("text/html");
PrintWriter out = resp.getWriter();
resp.getWriter
String nome = req.getParameter("nome");
req.getParameter
out.println("<html><head><title> Exemplo Servlet </title>");
out.println("</head>
out.println <body> Oi " + nome + ", tudo bem ?");
out.println("</body> </html>");
out.close();
out.close
}
}
11
Arquivo descritor da aplicação web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<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

Cliente Container Web

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.*;

public class ConnectionFactory {


public ConnectionFactory() throws ClassNotFoundException {
Class.forName("com.mysql.jdbc.Driver");
}

public Connection abreConexao() throws SQLException {


String url = "jdbc:mysql://localhost:3306/alcina";
return DriverManager.getConnection(url, "root", "admin");
}
}

24
Classes DAO – Produto.java
package model;

import java.text.NumberFormat;

public class Produto {


private int id;
private String descricao;
private double preco;
private String foto;

private static NumberFormat nf = NumberFormat.getCurrencyInstance();

public int getId() {


return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}

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.*;

public class ProdutoDAO {


private ConnectionFactory fabrica;

public ProdutoDAO() throws ClassNotFoundException {


fabrica = new ConnectionFactory();
}

public boolean insereProduto(Produto p) throws SQLException {


Connection con = fabrica.abreConexao();
String sql = "Insert into Tbl_Produto(desc_Prod, preco_Prod, foto_Prod) values(?, ?, ?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, p.getDescricao());
pst.setDouble(2, p.getPreco());
pst.setString(3, p.getFoto());
int resp = pst.executeUpdate();
pst.close();
con.close();
return resp == 1 ? true : false;
}

27
Classes DAO – ProdutoDAO.java (cont.)

public ArrayList<Produto> todosProdutos(String desc) throws SQLException {


ArrayList<Produto> produtos = new ArrayList<Produto>();
Connection con = fabrica.abreConexao();
String sql = "Select * from Tbl_Produto where desc_Prod like ? order by desc_Prod";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, "%" + desc + "%");
ResultSet rs = pst.executeQuery();
while (rs.next()) {
Produto p = new Produto();
p.setId(rs.getInt("id_Prod"));
p.setDescricao(rs.getString("desc_Prod"));
p.setPreco(rs.getDouble("preco_Prod"));
p.setFoto(rs.getString("foto_Prod"));
produtos.add(p);
}
rs.close();
pst.close();
con.close();
return produtos;
}

public ArrayList<Produto> todosProdutos() throws SQLException {


return todosProdutos("");
}

28
Classes DAO – ProdutoDAO.java (cont.)

public Produto umProduto(int idProd) throws SQLException {


Produto p = new Produto();
Connection con = fabrica.abreConexao();
String sql = "Select * from Tbl_Produto where id_Prod = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, idProd);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
p.setId(rs.getInt("id_Prod"));
p.setDescricao(rs.getString("desc_Prod"));
p.setPreco(rs.getDouble("preco_Prod"));
p.setFoto(rs.getString("foto_Prod"));
}
rs.close();
pst.close();
con.close();
return p;
}

29
Classes DAO – ProdutoDAO.java (cont.)

public boolean excluiProduto(int idProd) throws SQLException {


Connection con = fabrica.abreConexao();
String sql = "Delete from Tbl_Produto where id_Prod = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, idProd);

int resp = pst.executeUpdate();

pst.close();
con.close();

return resp == 1 ? true : false;


}
}

30
Classes DAO – Cliente.java
package model;

public class Cliente {


private int id;
private String nome;
private String fone;
private String email;
private String senha;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}

31
Classes DAO – Cliente.java (cont.)

public String getFone() {


return fone;
}
public void setFone(String fone) {
this.fone = fone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}

32
Classes DAO – ClienteDAO.java
package model;
import java.sql.*;
public class ClienteDAO {
private ConnectionFactory fabrica;

public ClienteDAO() throws ClassNotFoundException {


fabrica = new ConnectionFactory();
}

public boolean insereCliente(Cliente c) throws SQLException {


Connection con = fabrica.abreConexao();
String sql = "Insert into Tbl_Cliente(nome_Cli, fone_Cli, email_Cli, senha_Cli)" +
"values(?, ?, ?, ?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, c.getNome());
pst.setString(2, c.getFone());
pst.setString(3, c.getEmail());
pst.setString(4, c.getSenha());
int resp = pst.executeUpdate();
pst.close();
con.close();
return resp == 1 ? true : false;
}

33
Classes DAO – ClienteDAO.java (cont.)

public Cliente umCliente(String email) throws SQLException {


Cliente c = null;
Connection con = fabrica.abreConexao();
String sql = "Select * from Tbl_Cliente where email_Cli = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, email);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
c = new Cliente();
c.setId(rs.getInt("id_Cli"));
c.setNome(rs.getString("nome_Cli"));
c.setFone(rs.getString("fone_Cli"));
c.setEmail(rs.getString("email_Cli"));
c.setSenha(rs.getString("senha_Cli"));
}
rs.close();
pst.close();
con.close();
return c;
}
}

34
Classes DAO – Pedido.java
package model;

import java.util.Date;

public class Pedido {


private int id;
private Date data;
private Cliente cli;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}

35
Classes DAO – Pedido.java (cont.)

public Cliente getCli() {


return cli;
}
public void setCli(Cliente cli) {
this.cli = cli;
}

36
Classes DAO – PedidoDAO.java
package model;

import java.sql.*;

public class PedidoDAO {


private ConnectionFactory fabrica;

public PedidoDAO() throws ClassNotFoundException {


fabrica = new ConnectionFactory();
}

public boolean inserePedido(Pedido p) throws SQLException {


Connection con = fabrica.abreConexao();
String sql = "Insert into Tbl_Pedido(data_Ped, id_Cli)" +
"values(?, ?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setTimestamp(1, new java.sql.Timestamp(p.getData().getTime()));
pst.setInt(2, p.getCli().getId());
int resp = pst.executeUpdate();
pst.close();
con.close();
return resp == 1 ? true : false;
}

37
Classes DAO – PedidoDAO.java (cont.)

public int getIdPedido(int idCli, java.util.Date data) throws SQLException {


int id = 0;
Connection con = fabrica.abreConexao();
String sql = "Select id_Ped from Tbl_Pedido where id_Cli = ? and data_Ped = ?";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, idCli);
pst.setTimestamp(2, new java.sql.Timestamp(data.getTime()));
ResultSet rs = pst.executeQuery();
if (rs.next()) {
id = rs.getInt("id_Ped");
}
rs.close();
pst.close();
con.close();
return id;
}
}

38
Classes DAO – Item.java
package model;

public class Item {


private Produto produto;
private int quantidade;
public Produto getProduto() {
return produto;
}
public void setProduto(Produto produto) {
this.produto = produto;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
}

39
Classes DAO – ItemDAO.java
package model;
import java.sql.*;

public class ItemDAO {


private ConnectionFactory fabrica;

public ItemDAO() throws ClassNotFoundException {


fabrica = new ConnectionFactory();
}
public boolean insereItem(int idPed, Item i) throws SQLException {
Connection con = fabrica.abreConexao();
String sql = "Insert into Tbl_Item(id_Ped, id_Prod, qtd_Prod, preco_Prod) values(?, ?, ?, ?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setInt(1, idPed);
pst.setInt(2, i.getProduto().getId());
pst.setInt(3, i.getQuantidade());
pst.setDouble(4, i.getProduto().getPreco());
int resp = pst.executeUpdate();
pst.close();
con.close();
return resp == 1 ? true : false;
}
}

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.*;

public class GravaServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title> Cadastro de Produtos");
out.println("</title> </head> <body> <h1>");
boolean result = false;
String descricao = req.getParameter("descProd");
String preco = req.getParameter("precoProd");
String foto = req.getParameter("fotoProd");
41
Gravando dados (cont.)
Produto p = new Produto();
p.setDescricao(descricao);
p.setPreco(Double.parseDouble(preco));
p.setFoto(foto);
try {
ProdutoDAO dao = new ProdutoDAO();
result = dao.insereProduto(p);
} catch (Exception e) {
out.println(e);
}
if (result) {
out.println("<br>Produto gravado com sucesso");
} else {
out.println("<br>Problemas no cadastramento");
}
out.println("</h1></body> </html>");
out.close();
}
}
42
Lendo todos os dados
package servlets; LerServlet.java
import java.io.*;
Este exemplo lê dados de uma
import javax.servlet.*; tabela de banco de dados e os
import javax.servlet.http.*; exibe na forma de uma tabela HTML
import java.util.*;

import model.*;

public class LeServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title> Cadastro de Produtos");
out.println("</title> </head> <body>");

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.*;

public class BuscaServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title> Cadastro de Produtos");
out.println("</title> </head> <body>");
String descricao = req.getParameter("descProd");
if (descricao == null) {
descricao = "";
}

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.*;

public class ApagaServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html><head><title> Cadastro de Produtos");
out.println("</title> </head> <body> <h1>");
boolean result = false;
String idProd = req.getParameter("idProd");

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.*;

public class GravandoSessaoServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Produto p = new Produto();
p.setDescricao("Produto Sessão");
p.setPreco(1.99);

HttpSession sessao = req.getSession();


sessao.setAttribute("dados", p);
resp.sendRedirect(resp.encodeURL("lersessao"));
}
}

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.*;

public class LeSessaoServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("<html> <body> <h1>");

HttpSession sessao = req.getSession();


Produto p = (Produto) sessao.getAttribute("dados");

out.println("Produto: " + p.getDescricao() + "<br> Preço: " + p.getPreco());


out.println("</h1></body> </html>");
out.close();
}
}
50
Formato de um Servlet
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestServlet extends HttpServlet {


public void init ( ) throws ServletException { }

public void service (ServletRequest req, ServletResponse resp)


throws ServletException,
ServletException IOException { }
public void destroy ( ) { }

protect void doGet (HttpServletRequest req, HttpServletResponse resp)


throws ServletException,
ServletException IOException { }

protect void doPost (HttpServletRequest req, HttpServletResponse resp)


throws ServletException,
ServletException IOException { }
}
51
Pacote javax.servlet
 javax.servlet.GenericServlet
 void destroy ( )

 void init ( )

 void service (ServletRequest req,

ServletResponse res )
 ServletRequest (interface)
 ServletInputStream getInputStream ( )

 String getParameter ( String name )

 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

 Copie o arquivo de classe Testservlet.class no diretório


Teste\WEB-INF\classes

 Crie o arquivo web.xml mostrado no slide anterior na pasta


WEB-INF.
WEB-INF

 Verifique se o Tomcat está sendo executado.

 Abra o endereço http://localhost:8080/Teste/oi

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)

 Integre o Ant com o Eclipse. (slides seguintes)

57
Build de aplicação web usando o ANT
<?xml version="1.0" encoding="iso-8859-1" ?>

<project name="loja" default= "all" >


<target name="all" depends= "compile,war,deploy" >
</target>
<target name="init" >
<property name="src" value="./src" />
<property name="bin" value="./WEB-INF/classes" />
<property name="war" value= "./loja.war" />

<property name="tomcatHome" value= "c:/tomcat" />


<property name="deployDir" value="${tomcatHome}/webapps" />
<property name="servletApi" value="$
{tomcatHome}/common/lib/servlet-api.jar"
servlet-api.jar />
</target>
58
Build de aplicação web usando o ANT
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${bin}">
<classpath path= "WEB-INF/lib/connectorj.jar" />
<classpath path="${servletApi}" />
</javac>
</target>
<target name="war" depends="init">
<jar destfile="${war}" >
<fileSet dir="." includes="*.html" />
<fileSet dir="." includes="WEB-INF/**" />
</jar>
</target>
<target name="deploy" depends="war">
<copy file="${war}" todir="${deployDir}" overwrite="yes"/>
</target>
</project> 59
Integrando o ANT com o Eclipse
 Selecione o menu "Project";
 Selecione "properties";
 Selecione "Builders";
 Clique em "new";
 Escolha "Ant Build";
 Em "Name Buildfile" clique em xxx e selecione o
arquivo de build criado anteriormente;
 Com o build selecionado clique no botão "up" para
que o "ant build" apareça em primeiro lugar na lista.

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.*;

public class TestServApp extends JApplet implements ActionListener {


JTextField txtnome, txtStatus;
JButton btnsend;
JEditorPane pagina;
public void init () {
JLabel lblnome = new JLabel ("Nome: ");
txtnome = new JTextField(20);
txtStatus = new JTextField(" ", 20);
btnsend = new JButton("Enviar");
btnsend.addActionListener(this);
61
Invocando um servlet via Applet (cont.)

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.)

PrintWriter out = new


PrintWriter(con.getOutputStream(
getOutputStream ));
out.println("nome="
println + txtnome.getText() );
out.close();
close
BufferedReader in = new BufferedReader
(new InputStreamReader(con.
InputStreamReader getInputStream()));
getInputStream
String line;
txtStatus.setText("");
while ( (line = in.readLine(
readLine ) ) != null ) {
String texto = new String
(txtStatus.getText() + line);
txtStatus.setText(texto);
}
pagina.setText( txtStatus.getText());
} catch (Exception e) {
System.out.println (e);
}
}
}

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 ?

 No browser, abra o endereço


http://localhost:8080/Teste/Oi.jsp?nome=SeuNome

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.*;

public class InsereProdutoServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
boolean result = false;
String descricao = req.getParameter("descProd");
String preco = req.getParameter("precoProd");
String foto = req.getParameter("fotoProd");
Produto p = new Produto();
p.setDescricao(descricao);
p.setPreco(Double.parseDouble(preco));
p.setFoto(foto);

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" %>

<jsp:useBean id="prod" class="model.Produto" scope="session">


<jsp:setProperty name="prod" property="*"/>
</jsp:useBean>
ProdutoGravado.jsp
<html> Página JSP que recebe o
<head> produto gravado e exibe
<title>Cadastro de Produtos</title> Uma confirmação para o
</head>
usuário
<body>
Produto Gravado com Sucesso!!!
<table border = "1">
<tr><td>Produto<td><%=prod.getDescricao()%>
<tr><td>Preço<td><%=prod.getPreco()%>
<tr><td>Foto<td><%=prod.getFoto()%>
</table>
</body>
</html>

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.*;

import javax.servlet.*; FechaPedidoServlet.java


import javax.servlet.http.*; Verifica se o cliente está logado,
Cria um novo pedido e grava os
import model.*; Itens do carrinho no pedido

public class FechaPedidoServlet extends HttpServlet {


public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

// Verifica se cliente está logado


HttpSession sessao = req.getSession();
Cliente cli = (Cliente) sessao.getAttribute("cliente");
if (cli == null) {
resp.sendRedirect("Login.jsp");
} else {

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);

// Cria Itens do Pedido


ItemDAO daoItem = new ItemDAO();
ProdutoDAO daoProd = new ProdutoDAO();
String[] ids = req.getParameterValues("id");
String[] qtds = req.getParameterValues("qtd");

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 method = "post">

<p>Email:<input type="text" name="email"></p>

<p>Senha:<input type="text" name="senha"></p>

<p><input type="submit" value="Fazer Login"></p>

</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

<% ... %>


<jsp:scriptlet> ... </jsp:scriptlet>

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)

A Linguagem de Expressões facilita o acesso a


objetos e seus membros.
As expressões são escritas entre ${ e }, podendo
estar em qualquer parte da página, exceto em
scriptlets.
O código JSP:
<jsp:getProperty name = "usuario" property = "nome" />
Pode ser escrito em EL da seguinte forma:
${usuario.nome}
Como esse acesso é traduzido para uma chamada
getXXX(), os objetos devem seguir o padrão
JavaBeans.

107
Introdução a EL (Expression Language)

A EL oferece alguns objetos implícitos, que facilitam


o acesso a informações da página.
 param – Usado para acessar parâmetros do request.
 paramValues - Usado para acessar parâmetros de
múltiplos valores.
 header – Usado para acessar valores dos atributos do
cabeçalho HTTP.
 headerValues – Usado para acessar atributos de múltiplos
valores.
 cookie – Retorna um cookie através de seu nome.
 initParam – Permite o acesso aos parâmetros de
inicialização da aplicação.

108
Introdução a JSTL (JSP Standard Tag Library)

A JSTL é um conjunto de bibliotecas de tags que tem


como objetivo aumentar a produtividade e a
legibilidade das páginas JSP, facilitando assim, a
manutenção dessas páginas.
Teve seu lançamento em Julho de 2002 e está
presente na JSP a partir da versão 2.0
É composta por quatro TagLibs
 Core – Controle de fluxo da página e saída de mensagens.
 Format – Formatação de textos e números com base na
localização do usuário (Internacionalização – I18N).
 SQL – Acesso a bancos de dados relacionais.
 XML – Processamento de XML.

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

Você também pode gostar