【问题标题】:getting null pointer exception in ServletContext在 ServletContext 中获取空指针异常
【发布时间】:2016-03-10 19:47:55
【问题描述】:

我收到空指针异常 IDK。当我登录网页时,ServletContect 将设置属性

ServletContext context;
context=getServletContext();
context.setAttribute("userID", userID);

我在类级别初始化 ServletContext。 我想把它检索到其他的jsp和servlet页面中,

当我尝试使用 context.getAttribute("userID"); 在其他 jsp 和 servlet 中,我得到空指针异常,

我尝试使用 session 来检索价值

session=request.getSession(false); 
session.getAttribute("userID");

但仍然得到空指针。

【问题讨论】:

  • 你把它初始化成什么?
  • ServletContext 在每个 servlet 中使用 get servletcontext() 方法初始化。

标签: jsp session servlets nullpointerexception


【解决方案1】:

使用 HttpSession 来存储用户 ID。 在 ServletContext 中存储登录的用户信息是没有意义的。

当用户成功通过身份验证时,创建其会话并将用户 ID 存储在会话属性 Map 中。

HttpSession session= request.getSession(true);
session.setAttribute("userID", userID);

您可以使用 EL 访问 JSP 中的用户 ID:

${sessionScope.[userID]}

无论您使用的是Request Dispatcher 还是sendRedirect(),您的会话都将一直有效,直到您:

  1. 在会话对象上显式调用HttpSession.invalidate() 方法。
  2. 会话超时,您可以在 web.xml 中声明。
<session-config>
    <session-timeout>30</session-timeout>
</session-config>   

【讨论】:

  • 我没有使用request dispatch方法,只是response.sendRedirect()去其他页面,我会影响那个季节的对象。
  • 当我们将 TRUE 作为参数传递时,它将创建一个新会话,而不是根据我的知识加入创建的会话,我仍然没有得到你的 logic.plz 解释。感谢您的回答。
  • 您必须在登录后立即创建一个新会话,然后您必须通过在 getSession() 方法中传递 false 来获取特定会话。浏览 Servlet 和 Jsp 概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多