如何将 Session从一个Servlet传递到另一个Servlet中

samyp1234 2010-02-28 10:27:20
第一个servlet中,只有一个doPost方法,如下:
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String username = req.getParameter("uesrname");
//放到session中
HttpSession hs = req.getSession();
hs.setAttribute("user", username);

PrintWriter pw = res.getWriter();
pw.println("Hello Httpservlet");

res.sendRedirect("bb");
}

第二个servlet中,只有一个doGet方法,如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs = request.getSession();
if(hs.getAttribute("user")==null)
System.out.println("空");
else
System.out.println("not 空");


}
当执行时候,控制台打印“空”,没有能够在第二个页面中,得到第一个页面中设置的session的值。

是什么原因呢?

非常谢谢大家啊
...全文
954 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq513666573 2010-03-02
  • 打赏
  • 举报
回复
解决方案:
首先要确保你的放入session中的值不为空,
然后检查你的浏览器是否关闭了接受站点Cookie的设置。
因为session的使用要用到Cookie。
TD.Lemon 1 9 0 0 2010-03-02
  • 打赏
  • 举报
回复
哈,我运行了你的代码,结果不为空啊!
XIDIAN_IT 2010-03-01
  • 打赏
  • 举报
回复
在把username放入session之前打印一下username是否为空!
samyp1234 2010-03-01
  • 打赏
  • 举报
回复
多谢大家的解答,下面我把牵涉到的1个jsp页面、2个servlet文件,全部写在下面,请大家指教:

////////////////////////////////////////////////////// index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<body>
<form action="aa" method="post">
输入你的名字:<input type="text" name="username">
<input type="submit" value="确定">"
</form>"
</body>
</html>

////////////////////////////////////////////////////// aa 代表的 servlet
public class HelloHttpServlet extends HttpServlet {
@Override
//处理get请求
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
this.doPost(req, res);
}

// 处理post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String username = req.getParameter("uesrname");
//放到session中
HttpSession hs = req.getSession();
hs.setAttribute("user", username);

PrintWriter pw = res.getWriter();
pw.println("Hello Httpservlet");

res.sendRedirect("bb");
}
}

////////////////////////////////////////////////////// bb 代表的 servlet
public class ShowUserNameServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

HttpSession hs = request.getSession();
if(hs.getAttribute("user")==null)
System.out.println("空");
else
System.out.println("not 空");
}
}


/////////////////////////////////////////////////////////// 执行情况是:在IE中,输入:
http://localhost:8080/Servlet1/index.jsp,然后点击“提交”,自动转到bb 代表的servlet中。但是从控制台上 看到,打印了“空”,为什么bb 这个servlet没有得到aa 这个servlet中 设置的session的值呢?








marina1983214 2010-03-01
  • 打赏
  • 举报
回复
除了以上各位的说法,还有中可能是遇到了Session丢失的问题,
这就要检查一下web.xml中<session-timeout>中的配置,以及
是不是在什么地方清除了Session.
yudongming 2010-03-01
  • 打赏
  • 举报
回复
在同一个SESSION,SESSION没有道理为空。LZ再检查一下
默默勿语 2010-02-28
  • 打赏
  • 举报
回复
有个问题,你解释清楚下,你怎么访问的第一servlet,是不是通过浏览器的输入URL直接访问的,若果是那么在session根本没存入任何值。
huangdh12 2010-02-28
  • 打赏
  • 举报
回复
你是怎么从第一个servlet跳转到第二个servlet的? session应该不会为空的。
wcc3672018 2010-02-28
  • 打赏
  • 举报
回复
可能两个Servlet都是用doGet()方法处理页面的请求,换一句话说就是页面提交表单的方式是get方式,那么第一个Servlet没有重写doGet()方法就直接调用父类的doGet()就不会产生session,故第二个Servlet接收不到session的参数,我的个人理解。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧