第一个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的值。是什么原因呢?非常谢谢大家啊

解决方案 »

  1.   

    可能两个Servlet都是用doGet()方法处理页面的请求,换一句话说就是页面提交表单的方式是get方式,那么第一个Servlet没有重写doGet()方法就直接调用父类的doGet()就不会产生session,故第二个Servlet接收不到session的参数,我的个人理解。
      

  2.   

    你是怎么从第一个servlet跳转到第二个servlet的? session应该不会为空的。
      

  3.   

    有个问题,你解释清楚下,你怎么访问的第一servlet,是不是通过浏览器的输入URL直接访问的,若果是那么在session根本没存入任何值。
      

  4.   

    在同一个SESSION,SESSION没有道理为空。LZ再检查一下
      

  5.   

    除了以上各位的说法,还有中可能是遇到了Session丢失的问题,
    这就要检查一下web.xml中<session-timeout>中的配置,以及
    是不是在什么地方清除了Session.
      

  6.   

    在把username放入session之前打印一下username是否为空!
      

  7.   

    多谢大家的解答,下面我把牵涉到的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的值呢?
      

  8.   

    解决方案:
    首先要确保你的放入session中的值不为空,
    然后检查你的浏览器是否关闭了接受站点Cookie的设置。
    因为session的使用要用到Cookie。