curso de java para web - marcos mendes

115
1 Curso de Java para Web Servlets e JavaServer Pages Marcos Mendes 2010

Upload: renan-faganello-silva

Post on 25-Jun-2015

251 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Curso de Java Para Web - Marcos Mendes

1

Curso de Java para Web

Servlets e JavaServer Pages

Marcos Mendes

2010

Page 2: Curso de Java Para Web - Marcos Mendes

2

Objetivo Principal do Curso

Possibilitar a construção de

páginas Web com conteúdo

dinâmico, enfatizando o acesso a

bancos de dados.

Page 3: Curso de Java Para Web - Marcos Mendes

3

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

Page 4: Curso de Java Para Web - Marcos Mendes

44

Servlets

Servlets são classes Java executadas no lado Servidor que atendem a requisições e podem gerar uma resposta a elas.

Page 5: Curso de Java Para Web - Marcos Mendes

55

Aplicações Executadas no Servidor Servidor Web HTTP

JavaServer Web Development Kit (JSWDK). Jakarta TomCatJakarta 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.

Page 6: Curso de Java Para Web - Marcos Mendes

66

Instalação do Jakarta Tomcat

Baixe o Tomcat no endereço:

http://jakarta.apache.org/tomcat/http://jakarta.apache.org/tomcat/ Clique no link downloaddownload;

Clique no link binariesbinaries;

Procure por Tomcat 5.0.25 keysTomcat 5.0.25 keys (ou mais recente);

Clique em 5.0.25 exe5.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/http://localhost:8080/

Page 7: Curso de Java Para Web - Marcos Mendes

77

Instalação do Plugin EclipseHtmlEditor

Baixe o EclipseHtmlEditorEclipseHtmlEditor 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:/").

Page 8: Curso de Java Para Web - Marcos Mendes

88

Instalação do TomcatPlugin para o Eclipse

Baixe o TomcatPluginTomcatPlugin 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:8080http://localhost:8080

Page 9: Curso de Java Para Web - Marcos Mendes

99

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

Page 10: Curso de Java Para Web - Marcos Mendes

1010

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.xmlweb.xml" (nos próximos slides) na pasta

"WEB-INFWEB-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

Page 11: Curso de Java Para Web - Marcos Mendes

1111

Exemplo de recebimento e envio de dadospackage servlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class TestServlet extends HttpServletHttpServlet {public void serviceservice (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException {resp.setContentTyperesp.setContentType ("text/html");PrintWriterPrintWriter out = resp.getWriterresp.getWriter();String nome = req.getParameterreq.getParameter("nome");out.println("<html><head><title> Exemplo Servlet </title>");out.printlnout.println("</head> <body> Oi " + nome + ", tudo bem ?");out.println("</body> </html>");out.closeout.close();

}}

TestServlet.javaNeste exemplo, o servlet recebe

um nome e retorna umamensagem de saudação

Page 12: Curso de Java Para Web - Marcos Mendes

1212

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>TesteTeste</servlet-name><servlet-class>servlets.TestServletservlets.TestServlet</servlet-class>

</servlet><servlet-mapping>

<servlet-name>TesteTeste</servlet-name><url-pattern>/oi/oi</url-pattern>

</servlet-mapping>

</web-app>

Page 13: Curso de Java Para Web - Marcos Mendes

1313

Criação de um formulário html para acessar um servlet

No projeto eclipse, clique com o botão direito na pasta webweb, 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 actionaction= "oi" methodmethod="post">

<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

Page 14: Curso de Java Para Web - Marcos Mendes

1414

Aplicações MultiCamadasCamadaCliente

Camada Web Camada EIS

Bancos de Dados

RequestRequestHttpServletRequestHttpServletRequest

ResponseResponseHttpServletResponseHttpServletResponse

HTMLXMLJavaScriptApplet

Servlet JSP

MainFrame

Servidor de Servidor de Aplicações / Aplicações /

Servidor Servidor WebWeb

Aplicação Desktop / Web

JCA

EJB

Camada deNegócios

JPA / JDBC

Aplicações JavaDesktop

Browser

Page 15: Curso de Java Para Web - Marcos Mendes

1515

Requisição / Resposta em um Servlet HTTP

Browser

service()

doGet()

doPost()

doPut()

doDelete()

doOption()

doTrave()

Cliente Container Web

Request

Response

Page 16: Curso de Java Para Web - Marcos Mendes

1616

Árvore de diretórios da Aplicação

[Tomcat_Home]

Webapps

Sua_AplicaçSua_Aplicaçãoão

WEB-INF

classes

Arquivos .html, .html, applets e applets e imagensimagens

Arquivo web.xmlweb.xml

Servlets (.class)

A estrutura pode estar em uma árvore fora do Tomcat,basta editar o arquivo server.xml do diretório de configuraçãodo Tomcat ([TOMCAT_HOME]\conf) e incluir um novo contexto:

<Context path= "/Teste/Teste" docBase="c:\teste\c:\teste\" debug="0" />

Page 17: Curso de Java Para Web - Marcos Mendes

1717

Árvore de diretórios gerada pelo TomcatPlugin

Arquivos .html .html e páginas JSPpáginas JSP

Arquivos (. jar)

Servlets (.class)

Arquivo web.xmlweb.xml

Page 18: Curso de Java Para Web - Marcos Mendes

1818

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/JConnector/J" presente no arquivo mysql-connector-java-5.0.6-bin.jarmysql-connector-java-5.0.6-bin.jar para o diretório "WEB-INF\libWEB-INF\lib" da sua aplicação.

Page 19: Curso de Java Para Web - Marcos Mendes

1919

Modelo de Dados para teste

Cliente Pedido

Item Produto

Page 20: Curso de Java Para Web - Marcos Mendes

2020

Tabela Cliente

Page 21: Curso de Java Para Web - Marcos Mendes

2121

Tabela Pedido

Page 22: Curso de Java Para Web - Marcos Mendes

2222

Tabela Item

Page 23: Curso de Java Para Web - Marcos Mendes

2323

Tabela Produto

Page 24: Curso de Java Para Web - Marcos Mendes

2424

Classes DAO – ConnectionFactory.javapackage 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");

}}

Page 25: Curso de Java Para Web - Marcos Mendes

2525

Classes DAO – Produto.javapackage 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;}

Page 26: Curso de Java Para Web - Marcos Mendes

2626

Classes DAO – Produto.javapublic 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;}

}

Page 27: Curso de Java Para Web - Marcos Mendes

2727

Classes DAO – ProdutoDAO.javapackage 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;

}

Page 28: Curso de Java Para Web - Marcos Mendes

2828

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

}

Page 29: Curso de Java Para Web - Marcos Mendes

2929

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;

}

Page 30: Curso de Java Para Web - Marcos Mendes

3030

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

}

Page 31: Curso de Java Para Web - Marcos Mendes

3131

Classes DAO – Cliente.javapackage 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;}

Page 32: Curso de Java Para Web - Marcos Mendes

3232

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

}

Page 33: Curso de Java Para Web - Marcos Mendes

3333

Classes DAO – ClienteDAO.javapackage 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;

}

Page 34: Curso de Java Para Web - Marcos Mendes

3434

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;

}}

Page 35: Curso de Java Para Web - Marcos Mendes

3535

Classes DAO – Pedido.javapackage 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;}

Page 36: Curso de Java Para Web - Marcos Mendes

3636

Classes DAO – Pedido.java (cont.)

public Cliente getCli() {return cli;

}public void setCli(Cliente cli) {

this.cli = cli;}

}

Page 37: Curso de Java Para Web - Marcos Mendes

3737

Classes DAO – PedidoDAO.javapackage 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;

}

Page 38: Curso de Java Para Web - Marcos Mendes

3838

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;

}}

Page 39: Curso de Java Para Web - Marcos Mendes

3939

Classes DAO – Item.javapackage 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;}

}

Page 40: Curso de Java Para Web - Marcos Mendes

4040

Classes DAO – ItemDAO.javapackage 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;

}}

Page 41: Curso de Java Para Web - Marcos Mendes

4141

Gravando dadospackage servlets;

import java.io.*;import javax.servlet.*;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");

GravaServlet.javaEste exemplo recebe dados de uma requisição e os grava em uma tabela

de banco de dados.

Page 42: Curso de Java Para Web - Marcos Mendes

4242

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

}}

Page 43: Curso de Java Para Web - Marcos Mendes

4343

Lendo todos os dadospackage servlets;

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;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>");

LerServlet.javaEste exemplo lê dados de uma tabela de banco de dados e os

exibe na forma de uma tabela HTML

Page 44: Curso de Java Para Web - Marcos Mendes

4444

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

}}

Page 45: Curso de Java Para Web - Marcos Mendes

4545

Buscando dadospackage 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 = "";}

Page 46: Curso de Java Para Web - Marcos Mendes

4646

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

}}

Page 47: Curso de Java Para Web - Marcos Mendes

4747

Apagando dadospackage 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");

Page 48: Curso de Java Para Web - Marcos Mendes

4848

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

}

}

Page 49: Curso de Java Para Web - Marcos Mendes

4949

Gravando dados na Sessão HTTP (HttpSession)

package servlets;

import java.io.*;import javax.servlet.*;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"));

}}

GravandoSessaoServlet.javaEste exemplo armazenadados na sessão HTTP

Page 50: Curso de Java Para Web - Marcos Mendes

5050

Lendo dados da Sessão HTTP (HttpSession)

package servlets;

import java.io.*;import javax.servlet.*;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();

}}

LeSessaoServlet.javaEste exemplo recuperadados da sessão HTTP

Page 51: Curso de Java Para Web - Marcos Mendes

5151

Formato de um Servletimport java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class TestServlet extends HttpServletHttpServlet {

public void initinit ( ) throws ServletExceptionServletException { }

public void serviceservice (ServletRequestServletRequest req, ServletResponseServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

public void destroydestroy ( ) { }

protect void doGetdoGet (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

protect void doPostdoPost (HttpServletRequestHttpServletRequest req, HttpServletResponseHttpServletResponse resp)

throws ServletExceptionServletException, IOExceptionIOException { }

}

Page 52: Curso de Java Para Web - Marcos Mendes

5252

Pacote javax.servlet javax.servlet.GenericServlet

void destroydestroy ( ) void initinit ( ) void serviceservice (ServletRequest req,

ServletResponse res ) ServletRequest (interface)

ServletInputStream getInputStreamgetInputStream ( ) String getParametergetParameter ( String name ) BufferedReader getReadergetReader ( )

ServletResponse (interface) ServletOutputStream getOutputStreamgetOutputStream ( ) PrintWriter getWritergetWriter ( ) void setContentTypesetContentType ( String type )

Page 53: Curso de Java Para Web - Marcos Mendes

5353

Pacote javax.servlet.http javax.servlet.http.HttpServlet

void doGetdoGet ( HttpServletRequest req,

HttpServletResponse res ) void doPostdoPost ( HttpServletRequest req,

HttpServletResponse res )

HttpServletRequest (interface)

Derivada de javax.servlet.ServletRequest

HttpServletResponse (interface)

Derivada de javax.servlet.ServletResponse void sendRedirectsendRedirect ( String location )

Page 54: Curso de Java Para Web - Marcos Mendes

5454

Compilação de Servlets no Eclipse

Para se compilar um servlet no Eclipse é necessário que se

adicione o arquivo servlet.jarservlet.jar (Tomcat 4.x) ou servlet-servlet-

api.jarapi.jar (Tomcat 5.x ou mais recente) no classpath do Eclipse.

Para tanto, no Eclipse, Selecione o menu "ProjectProject" opção

"PropertiesProperties", clique em "Java Build PathJava Build Path", selecione a aba

"LibrariesLibraries", clique no botão "Add External Jars...Add External Jars..." selecione

o arquivo servlet-api.jarservlet-api.jar em "[Tomcat_Home]\common\[Tomcat_Home]\common\

liblib", clique em "abrirabrir" e finalmente clique em "okok".

Pode-se utilizar também um build do Apache Ant, que é o

mais recomendável.

Page 55: Curso de Java Para Web - Marcos Mendes

5555

Como testar o Servlet exemplo no Tomcat

Crie a pasta TesteTeste sob [Tomcat_Home]\Webapps[Tomcat_Home]\Webapps.

Crie a pasta WEB-INFWEB-INF sob TesteTeste. E a pasta classesclasses

sob WEB-INFWEB-INF

Copie o arquivo de classe Testservlet.class no

diretório Teste\WEB-INF\classesTeste\WEB-INF\classes

Crie o arquivo web.xmlweb.xml mostrado no slide anterior na

pasta WEB-INFWEB-INF.

Verifique se o Tomcat está sendo executado.

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

Page 56: Curso de Java Para Web - Marcos Mendes

5656

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\jswdk Mude a propriedade port para port NMTOKEN “80”port NMTOKEN “80” no

arquivo \jswdk\webserver.xml Compile o código do servlet: javac –classpath \jswdk\javac –classpath \jswdk\

lib\servlet.jar;. TestServlet.javalib\servlet.jar;. TestServlet.java Copie o arquivo de classe Testservlet.class no diretório \\

jswdk\webpages\WEB-INF\servletsjswdk\webpages\WEB-INF\servlets Edite o arquivo \jswdk\webpages\WEB-INF\mappings. \jswdk\webpages\WEB-INF\mappings.

propertiesproperties, incluindo a linha: /testservlet=testservlet/testservlet=testservlet Edite o arquivo \jswdk\webpages\WEB-INF\servlets.\jswdk\webpages\WEB-INF\servlets.

propertiesproperties, incluindo a linha: testservlet.code=TestServletestservlet.code=TestServlet

Copie os arquivos testservlet.htmltestservlet.html e TestServlet.classTestServlet.class no diretório \jswdk\webpages\jswdk\webpages

Inicie o servidor da Web executando: \jswdk\startserver\jswdk\startserver Abra o endereço http://localhost/testservlet.htmlhttp://localhost/testservlet.html

Page 57: Curso de Java Para Web - Marcos Mendes

5757

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)

Page 58: Curso de Java Para Web - Marcos Mendes

5858

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

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

<property name="tomcatHome" value= "c:/tomcat""c:/tomcat" /> <property name="deployDir" value="${tomcatHome}/webapps"

/> <property name="servletApi" value="$

{tomcatHome}/common/lib/servlet-api.jarservlet-api.jar" /> </target>

Page 59: Curso de Java Para Web - Marcos Mendes

5959

Build de aplicação web usando o ANT <target name="compile"name="compile" depends="init"> <javac srcdir="${src}" destdir="${bin}"> <classpath path= "WEB-INF/lib/connectorj.jar""WEB-INF/lib/connectorj.jar" /> <classpath path="${servletApi}" /> </javac> </target> <target name="war"name="war" depends="init"> <jar destfile="${war}" > <fileSet dir="." includes="*.html" /> <fileSet dir="." includes="WEB-INF/**" /> </jar> </target> <target name="deploy"name="deploy" depends="war"> <copy file="${war}" todir="${deployDir}" overwrite="yes"/> </target></project>

Page 60: Curso de Java Para Web - Marcos Mendes

6060

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.

Page 61: Curso de Java Para Web - Marcos Mendes

6161

Invocando um servlet via Appletimport java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;java.net.*;import java.io.*;java.io.*;

public class TestServApp extends JApplet implements ActionListener {JTextField txtnome, txtStatus;JButton btnsend;JEditorPaneJEditorPane pagina;public void init () {

JLabel lblnome = new JLabel ("Nome: ");txtnome = new JTextField(20);txtStatus = new JTextField(" ", 20);btnsend = new JButton("Enviar");btnsend.addActionListener(this);

TestServapp.javaEste exemplo usa uma applet para enviar e receber dados do servletTestServlet visto anteriormente

Page 62: Curso de Java Para Web - Marcos Mendes

6262

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 JEditorPaneJEditorPane ("text/html","<html><body> Oi </body></html>" );("text/html","<html><body> Oi </body></html>" );cp.add (pagina);

}public void actionPerformed(ActionEvent evt) {

try {URLURL app = new

URL("http://localhost/Teste/Test");URL("http://localhost/Teste/Test");URLConnectionURLConnection con = app.openConnectionopenConnection( );con.setDoInputsetDoInput(true);con.setDoOutputsetDoOutput(true);

Page 63: Curso de Java Para Web - Marcos Mendes

6363

Invocando um servlet via Applet (cont.)

PrintWriterPrintWriter out = new PrintWriter(con.getOutputStreamgetOutputStream( ));

out.printlnprintln("nome=" + txtnome.getText() );out.closeclose();BufferedReaderBufferedReader in = new BufferedReaderBufferedReader

(new InputStreamReaderInputStreamReader(con.getInputStreamgetInputStream()));String line;txtStatus.setText("");while ( (line = in.readLinereadLine( ) ) != null ) {

String texto = new String (txtStatus.getText() + line);txtStatus.setText(texto);

}pagina.setText( txtStatus.getText());

} catch (Exception e) {System.out.println (e);

}}

}

Page 64: Curso de Java Para Web - Marcos Mendes

64

JSP

JSP – JavaServer Pages, são páginas web com conteúdo dinâmico.

Page 65: Curso de Java Para Web - Marcos Mendes

65

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

Page 66: Curso de Java Para Web - Marcos Mendes

66

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

Page 67: Curso de Java Para Web - Marcos Mendes

67

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.

Page 68: Curso de Java Para Web - Marcos Mendes

68

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.

Page 69: Curso de Java Para Web - Marcos Mendes

69

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.

Page 70: Curso de Java Para Web - Marcos Mendes

70

Primeiro Exemplo de Página JSP Página exemplo: Oi.jsp

Clique com o botão direito na pasta "web""web" do projeto, selecione New / Other... / Amateras / JSP FileNew / Other... / Amateras / JSP File. Preencha a caixa "File name" com "Oi.jsp"."Oi.jsp". Copie o trecho de código abaixo entre as tags "<body>""<body>" e "</body>""</body>" do arquivo criado.

<%<%String usr = requestrequest.getParameter("nome");if (usr == null) {

usr = "Ninguém";}%>%>Oi <%<%= usr %>%>, tudo bem ?

No browser, abra o endereço http://localhost:8080/Teste/Oi.jsp?nome=SeuNome

Page 71: Curso de Java Para Web - Marcos Mendes

71

Exemplo usando o Padrão MVC<html><head><title>Cadastro de Produtos</title></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>

InsereProduto.htmlFormulário para cadastrar

um novo produto

Page 72: Curso de Java Para Web - Marcos Mendes

72

Exemplo usando o Padrão MVC (cont.)

package controller;

import java.io.*;import javax.servlet.*;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);

InsereProdutoServlet.javaClasse que recebe os dados

do formulário e grava noBanco de dados

Page 73: Curso de Java Para Web - Marcos Mendes

73

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

}}

Page 74: Curso de Java Para Web - Marcos Mendes

74

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>

<html><head>

<title>Cadastro de Produtos</title></head><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>

ProdutoGravado.jspPágina JSP que recebe oproduto gravado e exibeUma confirmação para o

usuário

Page 75: Curso de Java Para Web - Marcos Mendes

75

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

<html><head>

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

Catalogo.jspPágina JSP que exibe os produtos

para que o usuário possa adicioná-los no carrinho de compras

Page 76: Curso de Java Para Web - Marcos Mendes

76

Compra em uma Loja Virtual (cont.)

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %><%@ page import = "java.util.*, model.*" %>

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

Carrinho.jspPágina JSP que armazena sessão os

produtos selelecionados pelo usuário

Page 77: Curso de Java Para Web - Marcos Mendes

77

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

Carrinho.jsp (cont.)

Page 78: Curso de Java Para Web - Marcos Mendes

78

Compra em uma Loja Virtual (cont.)

package controller;

import java.io.*;import java.util.*;

import javax.servlet.*;import javax.servlet.http.*;

import model.*;

public class FechaPedidoServlet extends HttpServlet {public void service(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

// Verifica se cliente está logadoHttpSession sessao = req.getSession();Cliente cli = (Cliente) sessao.getAttribute("cliente");if (cli == null) {

resp.sendRedirect("Login.jsp");} else {

FechaPedidoServlet.javaVerifica se o cliente está logado,Cria um novo pedido e grava os

Itens do carrinho no pedido

Page 79: Curso de Java Para Web - Marcos Mendes

79

Compra em uma Loja Virtual (cont.)

// Cria novo Pedidotry {

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 PedidoItemDAO daoItem = new ItemDAO();ProdutoDAO daoProd = new ProdutoDAO();String[] ids = req.getParameterValues("id");String[] qtds = req.getParameterValues("qtd");

FechaPedidoServlet.javaCont.

Page 80: Curso de Java Para Web - Marcos Mendes

80

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

Page 81: Curso de Java Para Web - Marcos Mendes

81

Compra em uma Loja Virtual (cont.)

<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %><%@ page import = "model.*"%><%String email = request.getParameter("email");String senha = request.getParameter("senha");if (email != null) {

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

}}%>

Login.jspPágina para efetuar o

login do cliente

Page 82: Curso de Java Para Web - Marcos Mendes

82

Compra em uma Loja Virtual (cont.)

<html>

<head>

<title>Login do Sistema</title>

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

Login.jspCont.

Page 83: Curso de Java Para Web - Marcos Mendes

83

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>

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

ConfirmaPedido.jspPágina de confirmaçãodo cadastro do pedido

Page 84: Curso de Java Para Web - Marcos Mendes

84

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

<% /*/* ... */ */

//// ... %>

Page 85: Curso de Java Para Web - Marcos Mendes

85

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”<%@ page atrib1 = “val1” atrib2 = “val2” ... %>%>

<jsp:directive.page atrib1 = “val1” atrib2 = “val2”<jsp:directive.page atrib1 = “val1” atrib2 = “val2” ... />/>

Atributos aceitos: autoFlushautoFlush

““true”true” o buffer será esvaziado automaticamente enviando os dados ao cliente.

““false”false” se o buffer ficar cheio, será emitida uma exceção.

padrão: <%@ page autoFlush = “true” %>

Page 86: Curso de Java Para Web - Marcos Mendes

86

Diretivas bufferbuffer

define o tamanho do buffer de saída, “none”“none” para desativar o buffer.

padrão: <%@ page buffer = “6kb” %> contentTypecontentType

define o tipo MIME da resposta gerada pela página JSP

padrão: <%@ page contentType = “text/html; charset=ISO=8859-

1” %> errorPageerrorPage

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

Page 87: Curso de Java Para Web - Marcos Mendes

87

Diretivas extendsextends

define a superclasse a ser usada pelo container para a compilação da página JSP em servlet.

importimportindica 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.*” %>

infoinfousado para documentação da página.ex: <%@ page info = “Página Principal, 2009” %>

isErrorPageisErrorPageindica se a página é uma página de erro.padrão: <%@ page isErrorPage = “false” %>

Page 88: Curso de Java Para Web - Marcos Mendes

88

Diretivas isThreadSafeisThreadSafe

indica se a página poderá responder a múltiplas solicitações simultaneamente.

padrão: <%@ page isThreadSafe = “true” %> languagelanguage

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” %> sessionsession

define se a página participa ou não do gerenciamento de sessão.

padrão: <%@ page session = “true” %>

Page 89: Curso de Java Para Web - Marcos Mendes

89

Diretivas includeinclude

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

taglibtaglibindica 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” %>

Page 90: Curso de Java Para Web - Marcos Mendes

90

Declarações

São usadas para definir variáveis e métodos.

<%! ... %><%! ... %>

<jsp:declaration> ... </jsp:declaration><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” %>

Page 91: Curso de Java Para Web - Marcos Mendes

91

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

}

%>

Page 92: Curso de Java Para Web - Marcos Mendes

92

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;

}%>

Page 93: Curso de Java Para Web - Marcos Mendes

93

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><jsp:expression> ... </jsp:expression>

Exemplo:

<html> <body>

<%! double raio = 5; %>

A área da circunferência de raio <%= raio <%= raio %>%> é

<%= Math.PI * Math.pow(raio, 2) %><%= Math.PI * Math.pow(raio, 2) %>

</body></html>

Page 94: Curso de Java Para Web - Marcos Mendes

94

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” <%= hora < 12 ? “AM”: “PM”

%>%>

</body></html>

Page 95: Curso de Java Para Web - Marcos Mendes

95

scriptlets

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

Page 96: Curso de Java Para Web - Marcos Mendes

96

Objetos Implícitos relacionados a Servlets

page (javax.servlet.jsp.HttpJspPage)

config (javax.servlet.ServletConfig) getInitParameterNames( ) getInitParameter( String name )

Page 97: Curso de Java Para Web - Marcos Mendes

97

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

Page 98: Curso de Java Para Web - Marcos Mendes

98

Objetos Implícitos relacionados a Input/Output

getMethod ( ) getRequestURL ( ) getQueryString ( ) getSession (boolean flag) getRequestDispatcher(String path) getRemoteHost ( ) getRemoteAddr ( ) getRemoteUser ( )

Page 99: Curso de Java Para Web - Marcos Mendes

99

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)

Page 100: Curso de Java Para Web - Marcos Mendes

100

Objetos Implícitos relacionados a Input/Output

out (javax.servlet.jsp.JspWriter) isAutoFlush ( ) getBufferSize ( ) getRemaining ( ) clearBuffer ( ) clear ( ) newLine ( ) flush ( ) close ( )

Page 101: Curso de Java Para Web - Marcos Mendes

101

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)

Page 102: Curso de Java Para Web - Marcos Mendes

102

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)

Page 103: Curso de Java Para Web - Marcos Mendes

103

Objetos Implícitos Contextuais

pageContext (javax.servlet.jsp.PageContext) getPage ( ) getRequest ( ) getResponse ( ) getOut ( ) getSession ( ) getServletConfig ( ) getServletContext ( ) getException ( ) forward (path) include (path)

Page 104: Curso de Java Para Web - Marcos Mendes

104

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

Page 105: Curso de Java Para Web - Marcos Mendes

105

Objeto Implícito de Tratamento de Erros

exception (javax.lang.Throwable) getMessage ( ) printStackTrace (out) toString ( )

Page 106: Curso de Java Para Web - Marcos Mendes

106

Ações

Forward Include Plug-in Tags Bean

Page 107: Curso de Java Para Web - Marcos Mendes

107

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.

Page 108: Curso de Java Para Web - Marcos Mendes

108

Introdução a EL (Expression Language)

A EL oferece alguns objetos implícitos, que facilitam o acesso a informações da página.

paramparam – Usado para acessar parâmetros do request. paramValuesparamValues - Usado para acessar parâmetros de

múltiplos valores. headerheader – Usado para acessar valores dos atributos

do cabeçalho HTTP. headerValuesheaderValues – Usado para acessar atributos de

múltiplos valores. cookiecookie – Retorna um cookie através de seu nome. initParaminitParam – Permite o acesso aos parâmetros de

inicialização da aplicação.

Page 109: Curso de Java Para Web - Marcos Mendes

109

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

CoreCore – Controle de fluxo da página e saída de mensagens.

FormatFormat – Formatação de textos e números com base na localização do usuário (Internacionalização – I18N).

SQLSQL – Acesso a bancos de dados relacionais. XMLXML – Processamento de XML.

Page 110: Curso de Java Para Web - Marcos Mendes

110

Componentes Java Beans

Arquitetura Abstração Reusabilidade

Construção Utilização

Page 111: Curso de Java Para Web - Marcos Mendes

111

Distribuição e Implantação de Aplicações Web

Arquivos War

Page 112: Curso de Java Para Web - Marcos Mendes

112

Validação de Formulários

Cliente Servidor

Page 113: Curso de Java Para Web - Marcos Mendes

113

Tratamento de Cookies

Page 114: Curso de Java Para Web - Marcos Mendes

114

Envio de email

Page 115: Curso de Java Para Web - Marcos Mendes

115

Tags Personalizadas