Problemas com Sessão

3 respostas
A

Pessoal, estou com um problema com sessão… tenho que gravar algumas operações que o usuário fez e mostrar as mesmas na tela enquanto ele estiver navegando…
Abaixo estou colocando o código para que olhem o que estou fazendo de errado… quando peço para mostrar os dados da sessão na tela ele sempre me retorna null… o que devo fazer?? O que está errado?
Esse é um exemplo que fiz que demostra claramente o que esta acontecendo aki.

Obrigado!!

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

public class Calculadora extends HttpServlet {
    
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destroys the servlet.
     */
    public void destroy() {
        
    }
    
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
        response.setContentType("text/html");
        java.io.PrintWriter out = response.getWriter();
        /* output your page here*/
          
        oper = "";
        oper = request.getParameter("operacoes");
        n1 = request.getParameter("primeiro");
        n2 = request.getParameter("segundo");
        
        resultado = a.calcular(oper,n1,n2);
                         
        Operacao objOper = (Operacao)request.getSession().getAttribute("operacaoAtual");

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Calculadora</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Resultados....:<p>");
        out.println("<font face='verdana' size='2'>"+n1+" "+oper+" "+n2+" = "+resultado+"</font></p>");
        
        
        out.println("<p>Resultado da sessão....<br>");
        out.println(objOper);
        
        
        out.println("</body>");
        out.println("</html>");
        
        out.close();
        
        out.close();
    }
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
        processRequest(request, response);
         
    }
    
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
        processRequest(request, response);
        Operacao objOper = new Operacao();
        request.getSession().setAttribute("operacaoAtual", objOper );
                     
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
  String oper,n1,n2;
  double resultado;
  Operacao a = new Operacao();
    
}

3 Respostas

Bani

Dentro do seu doPost você está primeiro chamando o processRequest e depois setando a sessão, dessa forma, na primeira vez vai ficar null mesmo. Para não ficar o certo seria deixar o contrário:

Operacao objOper = new Operacao(); request.getSession().setAttribute("operacaoAtual", objOper ); processRequest(request, response);

Além disso, o seu método doGet está em branco. Eu recomendaria que ele tivesse alguma coisa (como por exemplo uma chamada ao doPost) para o caso se você resolver fazer uma submissão por GET ao invés de POST.

A

Gostaria de saber tb como eu faço para imprimir os dados que estao na sessão?? Nessa sessão eu quero ir gravando muitos dados… a medida que o usuário vai chamando o servlet eu quero que ele grave um conjunto de dados e nao apague os anteriores… como posso fazer isso?

Obrigado

Bani

Você pode guardar uma array, Vector, ArrayList ou qualquer coisa do tipo na sessão.
Aí quando você for adicionar um objeto primeiro você obtém o existente, aí adiciona o conteúdo novo nele, e então coloca a versão modificada do objeto de volta na sessão.
E depois use um iterator pra percorrê-lo.

Criado 14 de agosto de 2003
Ultima resposta 14 de ago. de 2003
Respostas 3
Participantes 2