Recebendo dados de um formulário JSP
Nessa primeira parte, vamos criar uma página JSP. Abra o sua IDE (nosso caso Netbeans) e siga os passos abaixo:
- Clique em file -> new file
- Na tela que aparece, escolha, em categories WEB e em files types JSP.
- Clique em next e, na próxima tela, no campo JSP File name, dê um nome ao seu arquivo JSP (eu chamei de paginaform).

- Feito isso, clique em finish
- Feito isso, crie outra página em JSP, chamada contas.
Dentro de <body> </body> do arquivo paginaform.jsp, digite o código abaixo que é o nosso formulário:
<!--quando o cliente clicar em enviar vai para pagina de contas.jsp--> <form action="contas.jsp" method="POST"> Usuario:<input type="text" name="usuario"/><br>/> Senha:<input type="password" name=senha"/><br> <input type="submit" value="logar/> </form>Na página de contas.jsp, dentro do <body>, digite o código abaixo:<% //recebe o valor digitado no campo usuario String usuario = request.getParameter("usuario"); //recebe o valor digitado no campo senha String senha = request.getParameter("senha"); if(usuario.equals("camilo")&& senha.equals("123")){ //Exibi o nome do usuario out.println("Seja bem vindo " + usuario); } else{ out.println("Usuario ou senha invalidos"); }%>
Objeto Request
Esse objeto foi o responsável de pegar o resultado que vinha do formulário.
Salve e teste a página executando no browser a http://localhost/suaaplicacao/paginaform.jsp
Agora informe os dados no formulário e clique no botão enviar.
Simples pegar dados de um formulário em JSP não? Lembrando que o objetivo aqui era mostrar como obter dados de um formulário em JSP, que é através do request. Usei como exemplo uma pagina simples de login e senha.
Outra importância desse recurso é para sistema de busca. Imagine que você quer saber tudo que seu cliente digitou no campo de busca do seu site enquanto ele estava navegando? Importante isso não?
Entendendo os Escopos dos Objetos – Parte 02
Toda vez que um sistema web é acessado pelo browser, o conteiner web cria uma sessão para cada cliente, e nas requisições trocadas entre o browser e o servidor existe um cookie/parâmetro no cabeçalho da requisição HTTP chamado jsessionid que identifica aquele cliente, desta forma o servidor pode reservar uma área para este cliente por um certo tempo. Um exemplo de utilização é manter o usuário logado no sistema, onde ele vai estar navegando entre todas páginas sem problemas. Uma forma de invalidar a sessão pelo cliente é limpar o cache do browser, assim o cookie que possuÃa o identificador da sessão não existe mais e o servidor irá criar uma nova sessão assim que o cliente enviar uma nova requisição.
Vamos começar a implementar nosso carrinho de compras.
Classe Produto
package vo;
public class Produto {
private Integer codigo;
private String nome;
private Double vlPreco;
// ocultei get/set.
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result +
((codigo == null) ? 0 : codigo.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Produto other = (Produto) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}
Na classe CarrinhoDeCompras, criei uma Collection de objetos Produto, que armazenará os produtos selecionados pelo o usuário. Estou inicializando-a no construtor da classe, e também perceba que só existe o método de acesso getArrProdutos(). Isso vai garantir que a coleção seja inicializada apenas na criação do objeto.
package vo;
import java.util.ArrayList;
import java.util.Collection;
public class CarrinhoDeCompras {
private Collection<Produto> arrProdutos;
public CarrinhoDeCompras() {
this.arrProdutos = new ArrayList<Produto>();
}
public final Collection<Produto> getArrProdutos() {
return arrProdutos;
}
}
Criei a classe LojaBO para simular estoque de produtos. A lógica desta classe é bem simples: ela possui um java.util.List de objetos Produto para representar os produtos vendidos pela nossa loja e dois voltados aos métodos: um é buscar (código), que busca o produto na coleção pelo código, e o outro é um método de acesso ao nosso List.
package bo;
import java.util.ArrayList;
import java.util.List;
import vo.Produto;
public class LojaBO {
private List<Produto> arrProdutosDisponiveis;
public LojaBO() {
arrProdutosDisponiveis = new ArrayList<Produto>();
Produto produto = null;
for (int i = 0; i < 5; i++) {
produto = new Produto();
produto.setCodigo(i);
produto.setNome("Produto " + i);
produto.setVlPreco(52.8);
arrProdutosDisponiveis.add(produto);
}
}
public Produto buscar(Integer codigo) {
Produto produto = new Produto();
produto.setCodigo(codigo);
return arrProdutosDisponiveis.get(arrProdutosDisponiveis.indexOf(produto));
}
public final List<Produto> getArrProdutosDisponiveis() {
return arrProdutosDisponiveis;
}
}
Já criamos os objetos para representar o carrinho de compras, os produtos disponÃveis. Agora criei a página que exibirá a listagem dos produtos para o usuário poder escolher qual item vai adicionar no carrinho (listarProdutos.jsp).
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="bo.LojaBO"%>
<%@page import="java.util.Collection"%>
<%@page import="java.util.List"%>
<%@page import="vo.Produto"%><html>
<head>
<title>Produtos Disponiveis</title>
<style>
<!--
body {
text-align: left;
}
-->
</style>
</head>
<body>
<h2>Produtos Disponiveis:</h2>
<%
/* armazena lista de produtos na sessão do usuario. */
LojaBO lojaBO = new LojaBO();
List<Produto> arrProduto = lojaBO.getArrProdutosDisponiveis();
%> <table>
<thead><tr>
<th>Codigo</th>
<th>Nome</th>
<th>Preço</th>
<th></th>
</tr></thead>
<% for(Integer i = 0; i < arrProduto.size(); i++){
Produto produto = arrProduto.get(i);%>
<tr>
<td><%= produto.getCodigo() %></td>
<td style="width: 120px"><%= produto.getNome() %></td>
<td><%= produto.getVlPreco() %></td>
<td><a href="controlCarrinhoDeCompras.jsp?a=adicionar&codigo=
<%= produto.getCodigo() %>">Adicionar</a></td>
</tr>
<% } %>
</table>
<p><a href="controlCarrinhoDeCompras.jsp">Meu Carrinho</a></p>
</body>
</html>
A página abaixo (controlCarrinhoDeCompras.jsp) possui a lógica das ações do carrinho de compras. Tem as seguintes funcionalidades:
- – Adicionar o produto na listagem do carrinho de compras.
- – Excluir todos os itens do carrinho de compras.
<%@page import="vo.Produto"%>
<%@page import="bo.LojaBO"%>
<%@page import="vo.CarrinhoDeCompras"%><%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// caso não exista um objeto CarrinhoDeCompras na session, ele cria.
if(session.getAttribute("carrinhoDeCompras") == null){
session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
}
/* pega referência ao Objeto CarrinhoDeCompras que está armazenado na session. Necessário fazer um cast,
 pois o metodo "getAttribute" retorna um Object. */
CarrinhoDeCompras carrinhoDeCompras = (CarrinhoDeCompras) session.getAttribute("carrinhoDeCompras");
/* parametro que indica qual acao deve ser executada. */
String acao = request.getParameter("a");
/* indica qual pagina será invocada apos execucao abaixo. Por padrao,
deixei a listagem de produtos do carrinho de compras.*/
String path = "listarProdutosDoCarrinho.jsp";
if(acao != null && !acao.equals("")){
if(acao.equals("adicionar")){
Integer codigo = Integer.parseInt(request.getParameter("codigo"));
LojaBO lojaBO = new LojaBO();
Produto produto = lojaBO.buscar(codigo);
carrinhoDeCompras.getArrProdutos().add(produto);
}
if(acao.equals("limpar")){
session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
}
}
RequestDispatcher requestDispacher = request.getRequestDispatcher(path);
requestDispacher.forward(request, response);
%>
Após a escolha do produtos, o usuário pode visualizar os produtos selecionados, através da página abaixo (listarProdutosDoCarrinho.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="bo.LojaBO"%>
<%@page import="java.util.Collection"%>
<%@page import="vo.Produto"%>
<%@page import="vo.CarrinhoDeCompras"%><html>
<head>
<title>Produtos Adicionados no Carrinho de Compras</title>
<style>
<!--
body {
text-align: left;
}
-->
</style>
</head>
<body>
<%
/* É adicionado um objeto CarrinhoDeCompras na sessão, caso ainda não exista.*/
if(session.getAttribute("carrinhoDeCompras") == null){
session.setAttribute("carrinhoDeCompras", new CarrinhoDeCompras());
}
// referência do objeto CarrinhoDeCompras que esta na sessão do usuario.
CarrinhoDeCompras carrinhoDeCompras = (CarrinhoDeCompras) session.getAttribute("carrinhoDeCompras");
Collection<Produto> arrProduto = carrinhoDeCompras.getArrProdutos();
if(!arrProduto.isEmpty()){%>
<h2>Produtos Adicionados:</h2>
<table>
<thead><tr>
<th>Codigo</th>
<th>Nome</th>
<th>Preço</th>
</tr></thead>
<%for(Produto produto : arrProduto){ %>
<tr>
<td><%= produto.getCodigo() %></td>
<td style="width: 120px"><%= produto.getNome() %></td>
<td><%= produto.getVlPreco() %></td>
</tr>
<% } %>
</table>
<p><a href="listarProdutos.jsp">Comprar Mais</a></p>
<p><a href="controlCarrinhoDeCompras.jsp?a=limpar">Limpar Carrinho</a></p>
<% } else { %>
<p>Seu carrinho de compras está vazio</p>
<p><a href="listarProdutos.jsp">Voltar Listagem de Produtos</a></p>
<% } %>
</body>
</html>
Meu simples carrinho de compras está pronto, funcionando sem problemas e utilizando o que a seção tem a oferecer. Agora fica com você a implementar uma aplicação mais complexa.
O projeto do Eclipse com os fontes está disponÃvel para download. Espero que tenham gostado e a informação que escrevi seja útil. Até a próxima.
Referências
http://java.sun.com/javaee/5/docs/api/
Fonte: Imasters
Criando página de erro em aplicações Java
Durante uma aplicação Web escrita em Java, existe a possibilidade de ocorrer vários erros durante o processamento de um recurso no servidor e, caso haja um erro do próprio servidor, este cuida da sua manipulação (ou não). Mas caso haja um erro da aplicação, o Container fornece meios para que o desenvolvedor possa manipulá-lo.
Os erros de servidor podem ser considerados como exceções Java , e controlá-los é simples em aplicações web escritas em Java, não necessitando impor mudanças nas classes.
Diretiva Page: definirá as diretivas da página. Essa diretiva permite importação de classes, customização de super classes Servlet, etc.
Alguns atributos mais usados são:
isErrorPage = “True | False” – define se é uma página de controle de erro.
Language = “java” – especifica a linguagem que está sendo usada.
import=”pacote.classe.*” – pacote que deve ser importado.
Etc…
Criando e configurando página de erro
Veremos abaixo, passo a passo, como configurar páginas de erros personalizadas.
1. Abra o Netbeans 6
2. Localize o seu projeto (usado nos outras colunas, ou crie um novo)
3. Clique em file > new file
4. Na tela que aparece, escolha em categories WEB e, em files types, escolha JSP.

5. Clique em next e, na próxima tela, no campo JSP File name, dê um nome ao seu arquivo JSP (se quiser seguir a coluna, o meu chamei de erro).
6. Feito isso, clique em finish
7. Clique no sinal de + de configuration files e em seguida dê dois cliques em web.xml. Aqui vamos configurar nossa página de erro.

Nessa coluna vamos tratar o erro 404, página não encontrada. Isso pode acontecer freqüentemente na sua aplicação. O usuário pode digitar o endereço errado da aplicação e você, como um bom desenvolvedor, vai alertá-lo a respeito de forma personalizada.
Erro.jsp
A página de erro.jsp que acabamos de criar será responsável por capturar o erro (nesse caso 404) e exibÃ-lo ao usuário de forma personalizada.
Na tela de web.xml, clique na Pages e expanda o nó Error Pages
.

8.Clique no botão Add. Na caixa de diálogo Add Error Page que acabou de surgir, clique em Browse… para selecionar a página de erro, no nosso caso, escolha erro.jsp.
9. No campo Error Code, digite 404 e depois clique no OK. Não vamos configurar nenhuma exceção para esse tipo de erro, então o último campo deixe em branco.
10. Abra o arquivo erro.jsp e altere conforme abaixo:
<%@page contentType="text/html" pageEncoding="UTF-8"
isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Erro 404 </h1>
[cor2]Se você está vendo essa mensagem é porque o endereço que você está
tentado acessar não existe.[/cor2] <br>
Caso queira receber mais informações a respeito, entre em contato com o administrador do site.
</body>
</html>
11. Para testar, abra o browser e digite um endereço inválido http://localhost/seuprojeto/invalido
isErrorPage=”true”
Com essa diretiva page, informamos que se trata de uma página de erro conforme mencionei no inicio do artigo.
Bom, espero que tenham gostado do artigo e que a manipulação de erros passa a ser uma atividade frequente em suas aplicações. Uma dica que uso nas mensagens para o usuário é a substituição da palavra “erro” por “aviso”, e solicito ao usuário para entrar em contato com a equipe de suporte e informar que aconteceu o “aviso 404″. A palavra “erro”, na minha opinião, é muito pesada e gera desconforto e insegurança ao usuário/cliente.
Fonte: Imasters
Entendendo os Escopos dos Objetos – Parte 01
A linguagem Java usa fortemente o conceito de orientação a objetos. Com ela, é possÃvel implementar softwares em diversas áreas, desde controlar aparelhos de microondas, sistemas WEB, até aplicações para celulares.
No desenvolvimento dos sistemas web, você pode criar aplicações dinâmicas e inteligentes, utilizando o máximo das vantagens que a linguagem tem a oferecer. Exemplos como exibir o resultado de uma consulta sobre um certo cliente, receber dados de um formulário, armazenar um carrinho de compras do usuário… Ou seja, existem milhares de situações que podem ser implementadas.
Neste artigo comentarei sobre alguns objetos implÃcitos nas páginas jsp e descrever em quais escopos os objetos podem estar durante o processamento da página. Este é meu primeiro artigo aqui no iMasters, e espero que gostem e que as informações passadas sejam úteis.
Estes são alguns dos objetos implÃcitos que você usará com mais freqüência.
- request
- pageContext
- session
- context
- out
- response
A partir de agora, vou descrever cada objeto e criar uma situação de utilização.
Antes de iniciar, vou comentar sobre scriptlets, pois vou utilizá-los na implementação dos exemplos.
<% %> – acessar algum escopo.
<%= %> – escreve algum conteúdo na resposta.
Obs: utilizar scriptlets nas paginas jsp não é uma boa prática de programação, pois mistura código java com html, deixando o código bastante confuso. Para resolver essa questão criaram JSTL, EL (Expression Language). Assunto esse para próximos artigos.
Request
O request representa uma solicitação do browser para o servidor, e o ciclo de vida é marcado pelo recebimento da requisição e montagem da resposta para o cliente.
Ele trata todas as informações que o browser passou para o servidor, exemplo: sabe qual o tipo do método HTTP que deu origem à requisição, possui todos os parâmetros da requisição criados via formulário ou passados via url, também tem referência aos cookies do browser.
Esses são alguns métodos disponÃveis:
getParameter(java.lang.String name) – este método retorna o valor de algum parâmetro que está na requisição do browser. “name” é o identificador do parâmetro e caso não encontre o valor retorno é null.
Exemplo: um input text de nome “meuNome”:
<input type="text" name="meuNome">
Na página que trata a requisição do browser:
<%
String nmCliente = request.getParameter("meuNome");
%>
getParameterValues(java.lang.String name) – este é semelhante ao metodo anterior, a diferença é que ele retorna um array de String. É utilizado nas páginas que possuem elementos com mesmo nome.
Geralmente é utilizado quando é necessário implementar um lista de inputs do tipo checkbox, hidden,.. na página jsp.
Exemplo:
<form action="treatRequest.jsp" method="post">
<ul>
<li><input type="checkbox" name="arrCheckBox" value="radio1"></li>
</ul>
<ul>
<li><input type="checkbox" name="arrCheckBox" value="radio2"></li>
</ul>
<ul>
<li><input type="checkbox" name="arrCheckBox" value="radio3"></li>
</ul>
<ul>
<li><input type="checkbox" name="arrCheckBox" value="radio4"></li>
</ul>
<input type="submit" value="Salvar">
</form>
Código da página que tratará a requisição.
<%
String[] arrCheckBox = request.getParameterValues("arrCheckBox");
%>
setAttribute(java.lang.String name, java.lang.Object o) – Armazena o objeto “o” passado no escopo do request, o parâmetro “name” é um identificador do objeto dentro do request.
getAttribute(java.lang.String name) – retorna uma referência do objeto que está no request, onde “name” é o identificador do objeto.
Os métodos setAttribute(String) e getAttribute(String) são utilizados quando você precisa trafegar objetos entre as páginas jsp, não os parâmetros da requisição HTTP. Exemplo: salvar um objeto Cliente para outra página utilizá-lo.
Para realizar a navegação entre páginas jsp, utilize a tag <jsp:forward page=”nomePagina.jsp”/>. Utilizando esta tag, você passa a requisição para outra página tratar, encaminhando junto todos os parâmetros e objetos salvos no request.
Exemplo:
Criar um formulário de cadastros de nomes.
Classe Pessoa.
package vo;
public class Pessoa {
private String nome;
public final String getNome() {
return nome;
}
public final void setNome(String nome) {
this.nome = nome;
}
}
Fonte do formulário (exRequest.jsp)
Utilizei o mesmo formulário dos exemplos anteriores, então criei uma função javascript que invoca a página para cadastrar uma pessoa.
<script type="text/javascript">
function cadastrarPessoa() {
var meuNome = document.getElementById("meuNome");
window.location = "/Orion/request/cadastrarPessoa.jsp?meuNome=" + meuNome.value;
}
</script>
<p>
Digite seu nome: <input type="text" id="meuNome" name="meuNome">
 <a href="javascript:void(0)" onclick="javascript:cadastrarPessoa();">Cadastrar Pessoa </a>
</p>
Fonte cadastrarPessoa.jsp: esta página será responsável por pegar o valor do parâmetro “meuNome” e criar o objeto Pessoa, logo após o método “setAttribute(´pessoa´, pessoa)” salva o objeto pessoa no request. Agora é só encaminhar a requisição para a página “logicCadastrarPessoa.jsp” tratar.
<%@page import="vo.Pessoa"%>
<%
String nome = request.getParameter("meuNome");
Pessoa pessoa = new Pessoa();
pessoa.setNome(nome);
/* aqui salva objeto no request */
request.setAttribute("pessoa", pessoa);
%>
<jsp:forward page="logicCadastrarPessoa.jsp"/>
Fonte logicCadastrarPessoa.jsp: esta página é responsável por aplicar algum de tipo de regra de negócio* com o objeto Pessoa que está salvo no request.
Também é necessário adicionar um cast implÃcito para o objeto que você quer utilizar, pois o método
“getAttribute(String)” retorna um Object.
<%@page import="vo.Pessoa"%>
<%
Pessoa pessoa = (Pessoa) request.getAttribute("pessoa");
if(pessoa != null){
%>
<p>Ola <%= pessoa.getNome() %> - agora poderia cadastrar você no banco de dados</p>
<% } %>
PageContext
Este também possui os métodos setAttribute(java.lang.String name, java.lang.Object o) e getAttribute(java.lang.String name) comentados no assunto anterior. A lógica do funcionamento destes dois métodos é igual ao request.
Uma diferença deste objeto é que ele possui a funcionalidade para adicionar ou pegar uma referência a um objeto em qualquer escopo da aplicação.
getAttribute(java.lang.String name, int scope) e setAttribute(java.lang.String name, java.lang.Object o, int scope) – onde “name” é o identificador do objeto, e o int “scope” indica qual o escopo que será utilizado, pode ser as seguintes constantes:
- PageContext.PAGE_SCOPE
- PageContext.REQUEST_SCOPE
- PageContext.SESSION_SCOPE
- PageContext.APPLICATION_SCOPE
Agora criei um exemplo onde não é definido implicitamente o escopo dos objetos:
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%
List<Integer> arrNumeros = new ArrayList<Integer>(10);
for (Integer i = 0; i < 10; i++) {
arrNumeros.add(i);
}
%>
<p>Lista de Números - total de números: <%=arrNumeros.size()%></p>
<%
for (Integer i = 0; i < arrNumeros.size(); i++) {
%>
<ul>
<li><%=arrNumeros.get(i)%></li>
</ul>
<%
}
%>
No exemplo acima, criei um coleção de Integer e logo após mostro a listagem completa dos objetos. E você descobriu em qual escopo a variável “arrNumeros” está armazenada? Vamos viajar um pouco: durante o ciclo de vida da página alguns métodos são invocados na inicialização (jspInit()), logo após é invocado o método jspService() que é o responsável por escrever todo o conteúdo html para o cliente, e toda a fonte de scriptlets ficam armazenados dentro deste método… Concluindo, todas as variáveis são locais, existindo apenas durante a execução do método.
Utilizei a diretiva @page para realizar os imports da interface java.util.List e a coleção java.util.ArrayList.
