Boa Tarde Galera,
To tendo vários problemas com a reescrita de URL, e gostaria da ajuda de vocês.
To fazendo um projetinho bem básico com dois servlets e uma classe java, só pra aprender o conceito de sessão com reescrita de URL.
Ele funciona da seguinte maneira:
A primeira pagina a ser aberta é o Catalogo.java, que é um servlet, ele instancia três objetos Item, que serve pra guardar os dados de cada item.
Ai eu crio um ArrayList e jogo esses três objetos Item nesse ArrayList, ai exibo com um for.
Nesse for, exibe o item completo e cria um form, que quando submetido, é enviado o id do item para o outro Servlet chamado TrataRequisicao.
O código-fonte do Catalgo.java:
package Servlets;
import Modelo.Item;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Catalogo extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//Cria tres objetos Item e adiciona as informações necessárias.
//Esse item é uma classe java variavel, que só serve para receber e armazenar dados temporariamente.
Item colecaoHarryPotter = new Item("1", "Coleção Harry Potter", 50.99, "Ótimo Livro para crianças, uma coleção completa do fantástico mundo do Harry Potter");
Item colecaoNarnia = new Item("2", "Coleção Narnia", 147.90, "Coleção rara dos fantásticos livros da séria Naria");
Item colecaoSenhorDosAneis = new Item("3", "Coleção Senhor dos Aneis", 123.65, "Coleção de livros Senhor dos Anéis, perfeito para sua estante, venha conferir");
ArrayList listaItens = new ArrayList();//Cria uma ArrayList e adiciona os tres Itens a ela.
listaItens.add(colecaoHarryPotter);
listaItens.add(colecaoNarnia);
listaItens.add(colecaoSenhorDosAneis);
//Esse for percorre tres vezes, exibindo as informações do produto, reescrevendo a url para passar
//o id session e cria form que quando submetido, envia o id do produto que foi add ao carrinho.
for(int i=0; i<listaItens.size(); i++) {
Item tempItem = (Item) listaItens.get(i);
out.println("<br>");
out.println("ID: " +tempItem.getIdProduto()+ "<br>");
out.println("<h1>" +tempItem.getTituloProduto()+ " " +tempItem.getPrecoProduto()+ "</h1>");
out.println("<p>" +tempItem.getDescricaoProduto()+ "</p>");
String formURL = "TrataRequisicao";
formURL = response.encodeURL(formURL);
out.println(
"<form action=\"" +formURL+ "\">"+
"<input type=\"hidden\" name=\"id\" value=\"" +tempItem.getIdProduto()+ "\">"+
"<input type=\"submit\" value=\"Add no carrinho\">"+
"</form>"
);
}
//Aqui, quando o link é clicado, passa o id com o valor Fechasessao, que é testado no servlet TrataRequisicao
out.println("<a href=\"" +response.encodeURL("TrataRequisicao?id=FechaSessao")+ "\">Fechar Sessão</a>");
}
O Servlet TrataRequisicao é chamado quando algum form do Catalogo.java é clicado.
Ele basicamente, cria uma sessão, e joga o carrinho com o novo item adicionado no objeto sessão, o codigo-fonte:
package Servlets;
import Modelo.Item;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class TrataRequisicao extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
HttpSession sessao = request.getSession();//Cria um objeto sessao
ArrayList carrinho = (ArrayList) sessao.getAttribute("carrinho");//Pega o carrinho antigo
if(carrinho == null) {//Se o carrinho estiver vazio, cria um.
carrinho = new ArrayList();
}
Object novoItem = (Object) request.getParameter("id");//Pega o valor de ide joga em novoItem
if(novoItem.equals("FechaSessao")) {//Se o valor de id for FechaSessao, a sessão é fechada
sessao.invalidate();
//Encaminha para o Servlet Catalogo.
getServletContext().getRequestDispatcher(response.encodeRedirectURL("/Catalogo")).forward(request,response);
}
synchronized(carrinho) {
if(novoItem != null) {//Se o novoItem for diferente de vazio, adiciona ao carrinho e adiciona o carrinho a sessão
carrinho.add(novoItem);
sessao.setAttribute("carrinho", carrinho);
}
if(carrinho.size() == 0) {
out.println("<p>Sem itens</p>");
}
//Exibe os itens do carrinho
else{
out.println("<ul>");
for(int i=0; i<carrinho.size(); i++) {
out.println("<li>" +(String)carrinho.get(i)+ "</li>");
}
out.println("</ul>");
}
}
}
A classe java Item:
package Modelo;
public class Item {
private String idProduto;
private String tituloProduto;
private double precoProduto;
private String descricaoProduto;
public Item(){}
public Item(String idProduto, String tituloProduto, double precoProduto, String descricaoProduto){
this.idProduto = idProduto;
this.tituloProduto = tituloProduto;
this.precoProduto = precoProduto;
this.descricaoProduto = descricaoProduto;
}
getters e setter
O problema é que quando desabilito os cookies do google Chrome, a sessão não funciona, creio que a reescrita esteja errada, alguem pode me ajudar?