我有一个Login Servlet,在该Servlet中,我将属性用户设置为日志:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
... OMITTED
request.getSession().setAttribute("user", user_name);
request.getRequestDispatcher("index.jsp").forward(request, response);
... OMITTED
}从index.jsp到quit.jsp,直到这里,我可以访问通过getAttribute()登录的用户。但是在我的quit.jsp中,我只要求用户输入密码并调用退出Servlet。问题是,在退出Servlet中,当我尝试访问使用getAttribute()记录的当前用户时,属性" user“为null。因此,我的问题是:如何使用在servlet中创建的将在jsp和servlet中使用的持久属性?
发布于 2018-11-20 18:18:25
你的问题可能不是那么容易解决。我也有过类似的情况,所以我可以给你们一些调查建议:
null数据的原因是,当会话(存储属性的位置)死亡、超时,因为同一个用户发出新的Login帖子,所以会重新创建会话数据,除非您将它作为session_id存储在持久存储中,例如用户浏览器上的Cookie,或者每个用户的数据库中,但实现起来可能非常复杂。
作为捷径:
查看HttpServlet中的此方法文档: getThreadLocalRequest().getSession(false);
这也可以解决你的问题:
request.getSession().setMaxInactiveInterval(3600);//最大间隔(以秒为单位)在无效会话之前的调用之间。这意味着,一个小时后,您将需要自动注销您的用户(或强迫他重新登录),以防止出现null。
注销时会打电话:
Session.removeAttribute(“属性”);session.invalidate();
还请注意,您提到有两个不同的servlet(在Tomcat web.xml??中定义)。一个是登录,另一个是退出,它们都响应POST/GET。我认为它们有两个不同的实现,并且我认为它们不共享同一个会话对象。因此,在这种情况下,您可能必须在同一个servlet中实现Login + Quit操作,并有一个适当的会话无效时间间隔。
发布于 2018-11-20 16:58:01
在JSP文件中,默认情况下,HttpServletRequest可以使用变量名称request。您也可以在JSP文件中使用同样的方式。
所以
request.getSession().setAttribute("user", user_name);
也可以在JSP文件中找到。
<%
request.getSession().setAttribute("user", user_name);
%>https://stackoverflow.com/questions/53394496
复制相似问题