如何将会话从一个servlet转发到另一个servlet?

时间:2011-10-31 18:53:56

标签: java jsp servlets

嘿伙计们,我正在为我的项目管理模块。当一个人登录时,会向登录servlet发送一个请求。当它通过单击其他选项进一步询问其他报告时,会将报告请求发送到其他servlet,该servlet在页面上显示结果,该结果在用户正常类型时显示。会话在两个servlet之间丢失。

我正在尝试在其他页面上导航生成的报告,但为此我需要知道第二个servlet中的用户类型。这可以通过从登录模块bean类中获取user_type的值来完成。

如何处理这种情况?感谢

我的登录servlet是:

LoginService user = new LoginService();
                 user.setUserName(request.getParameter("username"));
                 user.setPassword(request.getParameter("password"));

                 user = UserDAO.login(user);

                 if (user.isValid())
                 {

                      HttpSession session = request.getSession(true);       
                      session.setAttribute("currentSessionUser",user); 



                      if(user.getUser_type().equalsIgnoreCase("admin")){

                          response.sendRedirect("administrator/homepage.jsp");
                      }else{

                      response.sendRedirect("homepage.jsp"); //logged-in page
                      }
                 }

                 else 
                      response.sendRedirect("invalidlogin.jsp"); //error page 
            } 

我尝试在第二个servlet中使用它: -

LoginService session = (LoginService)request.getAttribute("currentSessionUser");

            String drake = session.getUser_type();
            System.out.println("usertype = " +drake);

这里LoginService是登录模块的bean类。我在这里得到一个nullpointer异常。

1 个答案:

答案 0 :(得分:3)

我认为你正在尝试做你的web容器应该为你处理的东西...会话应该在同一个客户端会话的多个servlet调用的过程中自动维护。来自HttpServlet的方法获得HttpServletRequest。您可以使用该类的HttpSession方法之一获取相应的getSession

您可以使用HttpSessionsetAttribute将内容绑定到getAttribute

编辑:我是从Servlet规范2.5中获取的:

servlet可以通过名称将对象属性绑定到HttpSession实现中。 绑定到会话的任何对象都可用于属于该会话的任何其他servlet 相同的ServletContext并处理被识别为同一个请求的请求 会话。

我认为你最好从HttpServletRequest获取HttpSession对象(至少假设它是一个HttpServlet)并通过它设置/获取属性。如果为属性选择了正确的名称(它遵循与Java包命名相同的约定),则可以确保返回的对象(只要它不为null)可以转换为放在那里的任何类型。设置和获取请求本身的属性不会有帮助,我不认为东西会从一个servlet调用转移到下一个servlet调用,除非你使用RequestDispatcher从另一个调用一个servlet,但这不是你在这里的目的是什么。

所以在你的第二个代码示例中,做(LoginService)request.getSession().getAttribute("currentSessionUser");,这应该有效。确保检查空值,并选择使用项目包名称约定的属性名称(如com.mycompany...)。

我不介意第二意见,因为我不是EE / web开发人员。