Servlet会话

时间:2014-03-20 08:02:57

标签: java jsp session

我有两个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返回null。给出NullPointerException。

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

更多信息,

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

在第36行,我有

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

enter image description here

2 个答案:

答案 0 :(得分:0)

将以下内容添加到a.java

session.setAttribute("path1", fpath);

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

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

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

答案 1 :(得分:0)

我知道我的会话正在刷新。

所以,

在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();

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