【问题标题】:Servlet sessionsServlet 会话
【发布时间】:2014-03-20 08:02:57
【问题描述】:

我有两个 Java servlet,即,

A.java and B.java

还有一个 JSP 页面,

my.jsp

my.jsp 发送会话,

session.setAttribute("path", loc);

在 A.java 中可以访问

HttpSession session = request.getSession();
String fpath = session.getAttribute("path").toString();

使用此会话并重新加载 my.jsp

RequestDispatcher rd = request.getRequestDispatcher("my.jsp");
rd.forward(request, response);

之后,当我尝试使用 B.java 中的 my.jsp 访问同一会话时

HttpSession session = request.getSession();
String b = session.getAttribute("path").toString();

b 返回空值。给出一个 NullPointerException。

怎么办?为什么它不起作用?

更多信息,

my.jsp 有多个按钮,当单击按钮 A 时,a.java 被执行并返回一些内容以显示在 my.jsp 中,因此 my.jsp 刷新并且按钮 A 从 my.jsp 中删除,当按钮 B 时被点击然后 b.java 进入图片,它显示下面的屏幕。

在第 36 行,我有

    String b = session.getAttribute("path").toString(); 

【问题讨论】:

  • 从逻辑上讲它应该可以工作......除非你使会话无效
  • 我知道 :( 但是在 getattribute("path").toString() 行返回一个空指针异常
  • 尝试在 a.java 中再次设置会话并检查 b.java
  • 我假设两个 servlet 都部署在同一个 webapp/WAR 文件中?
  • 确保您没有使会话无效,也没有通过调用 session.removeAttribute( 从会话中删除属性

标签: java jsp session


【解决方案1】:

将以下内容添加到a.java

session.setAttribute("path1", fpath);

并在b.java 中访问相同的内容,

String b = session.getAttribute("path1").toString();

在 b.java 中,当您被重定向到 my.jsp 时,您的 loc 变量设置为 null。

【讨论】:

  • @Zedai 这行可能与它有关 RequestDispatcher rd = request.getRequestDispatcher("my.jsp"); rd.forward(request, response);你能告诉我这个过程吗?我的意思是从 my.jsp 到 a.java 那么 b.java 是如何出现的?
  • 好的。看,my.jsp 有多个按钮,当单击按钮 A 时,a.java 被执行并返回一些内容以显示在 my.jsp 中,因此 my.jsp 刷新并且按钮 A 从 my.jsp 中删除,当按钮 B 是点击然后 b.java 进入图片。
  • @Zedai ok....第二次你从 my.jsp 转到 b.java,你的 loc 变量为空,因此 my.jsp 中的会话设置为空.. .probably loc 第二次留空(即从 my.jsp 到 b.java)...
【解决方案2】:

我了解到我的会话正在刷新。

所以,

在 my.jsp 中,我包含了检查会话是否存在的内容,如下所示,

<%    
  String timeStamp = new SimpleDateFormat("dd:MM:yyyy_HH:mm:ss:SSS").format(Calendar.getInstance().getTime());
  timeStamp = timeStamp + ":" + System.nanoTime();
  HttpSession ses = request.getSession();
  if(ses == null || ses.getAttribute("path") == null)
{
  session.setAttribute("path", timeStamp);
}
  else
{
  session.getAttribute("path");
}
 %>

在 Upload.java 中,我收到了这个会话,并像这样再次将接收到的值添加回会话中,

String fpath = request.getSession().getAttribute("path").toString();
HttpSession session = request.getSession();
session.setAttribute("path", fpath);

    //Did my file upload stuff using apache commons

    RequestDispatcher rd = request.getRequestDispatcher("my.jsp");
rd.forward(request, response);

最后,在 mu exec.java 中使用会话后我将其无效

HttpSession ses = request.getSession();
ses.invalidate();

现在,即使页面正在刷新,我也可以访问会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-14
    • 2011-05-06
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2011-08-06
    相关资源
    最近更新 更多