简体   繁体   English

HttpSession不能从JSP持久化到Servlet

[英]HttpSession doesn't persist from JSP to Servlet

I've an InitializeServlet that creates and instantiates a HttpSession then redirects to a JSP ( betFinalize.jsp ). 我有一个InitializeServlet ,它创建并实例化HttpSession然后重定向到JSP( betFinalize.jsp )。 Here I can work on my session. 在这里,我可以进行会议。 When from that JSP I redirect (through a form) to another Servlet, FinalizeServlet I loose my session. 当我从该JSP中(通过表单)重定向到另一个Servlet时, FinalizeServlet了会话。 I cannot figure out why. 我不知道为什么。 Following code. 以下代码。

InitializeServlet.java InitializeServlet.java

public class InitializeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        String fName = request.getParameter("fName");
        String lName = request.getParameter("lName");
        String result = request.getParameter("result");


        Bet s = new Bet();
        s.setFirstLastName(fName + " " + lName);
        s.setResult(result);
        s.setMultiplier(calculateMultiplier());

        request.getSession(true).setAttribute("bet", s);

        RequestDispatcher rd = getServletContext().getRequestDispatcher("/betFinalize.jsp");
        rd.forward(request, response);
    }

    private double calculateMultiplier() {

        return 0.8;
    }

}

betFinalized.jsp betFinalized.jsp

<%@ page import="it.unibo.tw.model.beans.Bet"%>
<%@ page import="it.unibo.tw.model.beans.Bets"%>

<%@ page session="true"%>

<jsp:useBean id="bet" class="it.unibo.tw.model.beans.Bet" scope="session"></jsp:useBean>
<jsp:useBean id="finalizedBets" class="it.unibo.tw.model.beans.Bets" scope="application"></jsp:useBean>

<!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=ISO-8859-1">
</head>
<body>

    <h1>Hi, <%= bet.getFirstLastName() %></h1>
    <h2>Current bet: <i><%= bet.toString() %></i></h2>

    <form action="finalize" method="get">
        <input id="import" type="number" name="import" onkeyup="calculateWin()" ><br />
        <input id="win" type="text" name="win" readonly ><br />
        <input type="submit">
    </form>

    <hr />

    <ul>
        <%  for(Bet s : finalizedBets.getList()) { %>
        <li><%= s.toString() %></li>
        <%  } %>
    </ul>
</body>

<script>
    function calculateWin() {
        var multiplier = <%= bet.getMultiplier() %>

        var imp = document.getElementById("import").value
        document.getElementById("win").value = imp * multiplier
    }


</script>

</html>

FinalizeServlet.java FinalizeServlet.java

public class FinalizeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        double vincita = Double.parseDouble(request.getParameter("win"));

        Bet s = (Bet) request.getSession().getAttribute("bet");
        if(s != null)   {

            // NEVER REACH HERE

            s.setWin(vincita);
            s.setFinalized(true);


            Bets scommesseFinalized = (Bets) getServletContext().getAttribute("scommesseFinalized");
            scommesseFinalized.getList().add(s);


        }

        request.getSession().invalidate();

        RequestDispatcher rd = getServletContext().getRequestDispatcher("/start.html");
        rd.forward(request, response);
    }
}

You're trying to get the wrong attribute. 您正在尝试获取错误的属性。 When you set the session variable you have: 设置会话变量时,您可以:

request.getSession(true).setAttribute("scommessa", s);

When you try to read it: 当您尝试阅读它时:

request.getSession().getAttribute("bet");

it should be: 它应该是:

request.getSession().getAttribute("scommessa");

instead. 代替。

将会话ID编码为以下形式的操作:

<form action="<%=response.encodeURL("finalize")%>" method="get">

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM