【发布时间】:2014-04-14 04:18:26
【问题描述】:
我的服务器正在运行 java 8 和 jetty 9.1.3.v20140225。
我有一个简单的 servlet
@Override
public void doGet(final HttpServletRequest request,
final HttpServletResponse response) throws IOException,
ServletException {
// get the parameters
String contactIdParam = request.getParameter("contact_id");
String authToken = request.getParameter("auth_token");
// do things...
// set session attributes
logger.info("Setting session attributes");
HttpSession session = request.getSession(true);
session.setAttribute("npoci", npoci);
// move along
final RequestDispatcher view = request
.getRequestDispatcher("npo-portal.jsp");
logger.info("time: " + session.getMaxInactiveInterval());
view.forward(request, response);
}
这将我带到我的 jsp。会话超时为 30 分钟。 jsp 成功地使用了会话变量,调用 request.getSession(false),因为我听说这是必要的,并将表单发布回该 servlet。 servlet 的 doPost 中的第一件事是
// Check session not null, and get interactions
HttpSession session = request.getSession(false);
if (session == null) {
logger.error("Session was null");
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
会话总是为空的。我在 Chrome 和 Firefox 中都试过了,并验证了 cookie 实际上仍然存在于我的浏览器中。
任何帮助表示赞赏。
编辑
servlet 现在映射到 /npo-portal/update 并执行 view.forward("npo-portal.jsp")。这并没有解决问题。
【问题讨论】:
-
基于
.getRequestDispatcher("/npo-portal/npo-portal.jsp");,这可能表明您正试图在两个不同的域中使用同一个会话? -
所有在一个域上,但我不能肯定地说我会知道是否是其他情况。但在这里,npo-portal.jsp 位于文件夹 /npo-portal 中。
-
也就是说,我认为是在一个域上? npo-portal.jsp 在文件夹 /npo-portal 中,servlet 在 web.xml 中映射到 /schedule/update。
标签: jsp servlets jetty session-cookies