42
JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF [email protected] Dezembro/2005

JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF [email protected] Dezembro/2005

Embed Size (px)

Citation preview

Page 1: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

JSP

JavaServer Pages

Marco Antonio,

Arquiteto de Software – TJDF

[email protected]

Dezembro/2005

Page 2: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Java Server Pages

Tecnologia que permite a criação de páginas html dinâmicas com código Java.

As páginas devem ter a extensão “.jsp”.

Usada apenas para criação das telas para o sistema.

Limitado aos componentes html.

Permite a utilização de código Java, por isso, é essencial que se observe as melhores práticas de programação.

Page 3: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Conteúdo estático e dinâmico

• Estático– Tipicamente uma página HTML.– Mesma visualização para todo mundo.

• Dinâmico– Conteúdo gerado baseado em condições.– Varia de acordo com o usuário, o dia ou até mesmo

as opções escolhidas nos formulários.

Page 4: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Scriptlet

A Sun possui a mania de colocar o sufixo 'let' em muitas tecnologias (servlet, scriplet, portlet).

Permite que se escreva código Java dentro da sua JSP.

Escreva seu código Java entre as tags <% %>.

Page 5: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

JSP x Servlets

JSP é utilizado apenas para apresentação das informações para um usuário final.Servlet é, geralmente, utilizado para fazer redirecionamento de páginas, filtragem de dados, validação de campos, etc.Várias tecnologias surgem a cada dia para ajudar no desenvolvimento de aplicações. Todas utilizam JSP/Servlets, que é o ponto inicial de toda aplicação web.

Page 6: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005
Page 7: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005
Page 8: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005
Page 9: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005
Page 10: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

AloMundo.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1“ pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Alô mundo, JSP</title>

</head>

<body>

<%=new java.util.Date()%>

</body>

</html>

Page 11: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Rode a página

• Com o botão direito sobre a página, selecione a opção Run as... -> Run on Server.

Page 12: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

O que é JSP

• Documento baseado em texto que pode retornar conteúdo estático ou dinâmico.

• Conteúdo estático é representado por código HTML.

• O conteúdo dinâmico é gerado pelo código java.

• A sua página JSP é transformada automaticamente em servlet pelo container.

Page 13: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Benefícios do JSP

Page 14: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Objetos implícitos

• Uma página JSP tem acesso a certos objetos que estão sempre disponíveis.

Page 15: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005
Page 16: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Estrutura da aplicaçãoVamos analisar a estrutura de diretórios da nossa aplicação.

No projeto SistemaBancarioWeb deve existir um diretório WEB-INF com um arquivo chamado web.xml e com os subdiretórios classes e lib.

classes: coloque aqui as classes necessárias.

lib: coloque aqui os arquivos .jar que sua aplicação necessita.

O Tomcat trata de forma semelhante o conteúdo dos diretórios classes e lib.

O diretório work é gerado pelo Tomcat. Dentro dele fica o bytecode das páginas JSP.

Crie aqui todas as páginas web!!!

Page 17: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Contexto

Cada aplicação é um contexto, com suas configurações privadas.Quando você tem várias aplicações, cada uma é um mundo diferente, não existe nenhuma integração do ponto de vista do servidor web (Tomcat).As bibliotecas que são comuns podem ser compartilhadas, mas isso não é regra.

Page 18: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

PrimeiraPagina.jsp

1. <html>

2. <title>Primeira página JSP</title>

3. <% out.println("Primeira Página JSP"); %>

4. </html>

Page 19: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Passo-a-passo

Linha 1: abre o código HTML.

Linha 2: título da página.

Linha 3: imprime na saída padrão (browser) a frase Primeira Página JSP.

Linha 4: finaliza o código.

Page 20: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Objetos implícitos

Para ganhar acesso a variáveis cruciais, como parâmetros HTTP, sessões, cookies, etc. as páginas precisam interagir com o servidor web em que estão sendo executadas.

Todos esses objetos podem ser acessados a qualquer momento em um arquivo JSP (ou até mesmo em um Servlet).

Page 21: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Principais objetos implícitos

request – consulta informações de solicitações, como parâmetros do formulário.response – manipula a resposta a uma solicitação.session – acessa informações de uma sessão específica do usuário.application – acessa informações compartilhadas de uma aplicação.out – imprime informações na página de saída.

Page 22: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

SegundaPagina.jsp

<html>

<h1>JSP Expressions</h1>

<h3>Data atual: <%=new java.util.Date()%></h3>

<h3>Dados do servidor: <%=application.getServerInfo()%></h3>

<h3>ID da Sessão: <%=session.getId()%></h3>

</HTML>

Page 23: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Passagem de parâmetros

get: a passagem de parâmetros se dá através da url. Tem limite de tamanho e os dados aparecem na tela para o usuário.

post: a passagem de parâmetros se dá através do request HTML. Os dados não aparecem para o usuário, apesar disso, não existe nenhuma segurança nesse transporte.

Page 24: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Estilo.css

A folha de estilos está no link: http://www.marcoreis.net/css/Estilo.css.Copie esse arquivo para o diretório css do seu projeto.Obs: a folha de estilos tem como única finalidade deixar a aplicação mais agradável para o usuário.

Page 25: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

BemVindo.jsp<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title>Sistema Bancário</title>

</head>

<body>

<h1>Bem-vindo ao Sistema Bancário</h1>

<table border=1>

<tr>

<td>

<a href="CadastroDeGerente.jsp">Cadastro de Gerentes

<tr>

<td>

<a href="ConsultaGerentes.jsp">Consulta Gerentes

</table>

Page 26: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

BemVindo.jsp

Tela inicial do sistema.Tem apenas os links (menu) para as funcionalidades do SistemaBancario.

Page 27: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title>Cadastro de Gerente</title>

</head>

<body>

<h1>Cadastro de Gerente</h1>

<table border=1>

<form action="CadastroDeGerenteAction.jsp" method="get">

<tr>

<td>

Nome:

</td>

<td>

<input type="text" name="nome">

</td>

</tr>

<td>

Endereço

</td>

<td>

<input type="text" name="endereco">

</td>

Page 28: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp<tr>

<td>

Telefone</td>

<td>

<input type="text" name="telefone">

</td>

</tr>

<tr>

<td>

<input type="submit" value="Gravar">

</td>

<td>

<input type="reset" value="Limpar">

</td>

</tr>

</form>

</table>

</body>

</html>

Page 29: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp

A tela de cadastro de gerente deve ter todos os campos da classe Gerente, também chamada de JavaBean.Atenção: a chave-primária é automática, por isso não precisamos de um campo de texto para ela.

Page 30: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp

Essa tela captura as informações que o usuário digitou e as repassa para a página seguinte (CadatroDeGerenteAction.jsp) tratar.Nesse exemplo utilizamos uma caixa de texto (input type=”text”). Em outras situações podem ser utilizados vários outros como caixas de combinação, botões de checagem, áreas de texto.

Page 31: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerenteAction.jsp<%@page import="com.sistemabancario.persistencia.*" %>

<%@page import="com.sistemabancario.entidades.*" %>

<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title>Cadastro de Gerente</title>

</head>

<body>

<h1>Cadastro de Gerente</h1>

<table border=1>

<tr>

<td>

<%

DAOGerente daoGerente = new DAOGerente();

Gerente g = new Gerente();

g.setNome(request.getParameter("nome"));

g.setEndereco(request.getParameter("endereco"));

g.setTelefone(request.getParameter("telefone"));

daoGerente.inserir(g);

out.println("Registro inserido com sucesso");

%>

</table>

Page 32: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerenteAction.jsp

Essa tela recebe os parâmetros da requisição e faz as atribuições no objeto gerente.

No topo da página você verifica que dois pacotes foram importados. Lembre-se: as classes que precisamos nessa tela estão em outro pacote!

Parâmetros da requisição: todos os valores dos componentes HTML que foram passados na primeira página JSP. Cada valor digitado em CadastroDeGerente.jsp será passado para seu respectivo atributo no gerente.

Por fim, execute o método inserir, passando o gerente que deve ser persistido.

Page 33: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Teste

Mude a forma de enviar as informações do formulário de cadastro de get para post.Altere a linha <form action="CadastroDeGerenteAction.jsp" method="get"> para

<form action="CadastroDeGerenteAction.jsp" method="post">

Grave novos registros e veja a diferença.

Page 34: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

ConsultaGerentes.jsp<%@page import="java.util.*" %>

<%@page import="com.sistemabancario.persistencia.*" %>

<%@page import="com.sistemabancario.entidades.*" %>

<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title>Consulta Gerentes</title>

</head>

<body>

<h1>Consulta Gerentes</h1>

<table border=1>

<tr>

<td>Id<td>Nome<td>Endereço<td>Telefone

<%

DAOGerente daoGerente = new DAOGerente();

Collection lista = daoGerente.consultarTodos();

Iterator ite = lista.iterator();

while(ite.hasNext()) {

Gerente gerente = (Gerente) ite.next();

%>

<!-- Isso é código HTML!!! -->

<tr>

<td><%= gerente.getId() %>

<td><%= gerente.getNome() %>

<td><%= gerente.getEndereco() %>

<td><%= gerente.getTelefone() %>

<%

} //Fecha o loop do iterator!!!

%>

</table>

Page 35: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

ConsultaGerentes.jsp

Consultas fornecem informações valiosas para o usuário final, pois só assim ele pode verificar se suas informações estão sendo realmente persistidas.

Nossa consulta imprime um cabeçalho com os nomes dos atributos da classe no topo (nome, endereço e telefone).

Com a ajuda do DAOGerente, fazemos uma consulta a todos os itens cadastrados e, através de um loop, mostra todos os dados do gerente.

Esse loop é padrão em aplicações web. Utilize sempre essa estrutura para resolver problemas semelhantes.

Page 36: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Dúvidas?

Page 37: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Exercícios

Crie os menus de acesso às funcionalidades de consulta e cadastro de clientes.

Page 38: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Desafio

Crie as telas para exclusão de Gerente/Cliente.Altere as páginas de consulta de forma que o usuário possa editar ou excluir um dos itens mostrados na lista.

Page 39: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

Sugestão

Veja a seguir a sugestão para resolver esse problema.Vale lembrar que é apenas uma das possibilidades. Sistemas web devem ser criados exercitando a criatividade!!!Tente outras abordagens. Todas as informações que você precisa já estão na tela.

Page 40: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

ConsultaGerentes.jsp<%@page import="java.util.*" %>

<%@page import="com.sistemabancario.persistencia.*" %>

<%@page import="com.sistemabancario.entidades.*" %>

<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html><head><title>Consulta Gerentes</title></head>

<body>

<h1>Consulta Gerentes</h1>

<table border=1>

<tr><td>Id<td>Nome<td>Endereço<td>Telefone<td>Editar<td>Excluir

<%

DAOGerente daoGerente = new DAOGerente();

Collection lista = daoGerente.consultarTodos();

Iterator ite = lista.iterator();

while(ite.hasNext()) {

Gerente gerente = (Gerente) ite.next();

%>

<!-- Isso é código HTML!!! -->

<tr>

<td><%= gerente.getId() %>

<td><%= gerente.getNome() %>

<td><%= gerente.getEndereco() %>

<td><%= gerente.getTelefone() %>

<td><a href="CadastroDeGerente.jsp?id=<%= gerente.getId() %>" >

<img src="imagens/edit.gif" border=0></a>

<td><a href="ExclusaoDeGerente.jsp?id=<%= gerente.getId() %>" >

<img src="imagens/delete.gif" border=0></a>

<%

} //Fecha o loop do iterator!!!

%>

</table>

Page 41: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp<%@page import="com.sistemabancario.persistencia.*" %>

<%@page import="com.sistemabancario.entidades.*" %>

<link rel="stylesheet" href="css/Estilo.css" type="text/css">

<html>

<head>

<title>Cadastro de Gerente</title>

</head>

<body>

<h1>Cadastro de Gerente</h1>

<table border=1>

<%

DAOGerente daoGerente = new DAOGerente();

Gerente gerente = new Gerente();

String id = request.getParameter("id");

if(id != null) {

gerente = daoGerente.consultarPeloId(new Long(id));

}

%>

<form action="CadastroDeGerenteAction.jsp" method="get">

<tr>

<td>

Nome:

</td>

<td>

<input type="text" name="nome" value="<%= gerente.getNome() %>">

</td>

</tr>

Page 42: JSP JavaServer Pages Marco Antonio, Arquiteto de Software – TJDF ma@marcoreis.eti.br Dezembro/2005

CadastroDeGerente.jsp<td>

Endereço

</td>

<td>

<input type="text" name="endereco" value="<%= gerente.getEndereco() %>">

</td>

<tr>

<td>

Telefone</td>

<td>

<input type="text" name="telefone" value="<%= gerente.getTelefone() %>">

</td>

</tr>

<tr>

<td>

<input type="submit" value="Gravar">

</td>

<td>

<input type="reset" value="Limpar">

</td>

</tr>

</form>

</table>

</body>

</html>