[英]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.