httpcontext会话值在同一jsp页面的其他scriptlet中变为null

时间:2010-09-23 11:56:54

标签: jsp session

我有一个jsp页面,它有不同的IF条件。在加载jsp页面时,将根据设置为融合动作的值调用其中一个if条件。我有一个问题,第一次加载页面时,调用IF condition1(例如,ex),并将一个变量分配给HTTPCOntext会话对象。第二次加载页面时(意思是表单提交后),调用另一个IF条件2(Say for ex)。我尝试在此if条件中访问会话对象,会话对象中的值为null。

同一个jsp中的其他scriptlet无法访问一个scriptlet中的会话变量吗? 我需要在第二个IF条件下访问会话对象,请让我知道实现此目的的方法。

先谢谢 鲁帕

2 个答案:

答案 0 :(得分:3)

几个事实:

  • 会话由Cookie支持。
  • 默认情况下,Cookie会绑定到特定的域和上下文路径。
  • 在客户端禁用Cookie时,您必须注意URL重写,以将会话ID包含为jsessionid
  • 在JSP文件中编写原始Java代码是bad idea

因此,如果您在会话中存储了一个对象,并且在下一个请求中没有该对象,那么它可能有以下原因:

  • 另一个JSP页面位于不同的域或上下文中。
  • 客户端已禁用Cookie,您没有注意URL重写。
  • 您正在以错误的方式存储和访问它。

由于你所说的“HTTPCOntext”在JSP / Servlet方面毫无意义并且使用单个JSP页面,我认为这是可能原因中的最后一个。以下是如何以正确方式在会话中存储属性的启动示例:

Object someObject = "This is just a String.";
request.getSession().setAttribute("someName", someObject);

以及如何获取它:

Object someObject = request.getSession().getAttribute("someName");

答案 1 :(得分:0)

session.putValue is deprecated

session.setAttribute("Test",testStringVariable)

一样使用session.setAttribute(String name, Object value)

并按session.getAttribute("Test")获取。这应该有用。

您是否确认session.getAttribute("Test")本身正在提供null,或者您已将某个变量初始化为null并打印出该变量。