java - 如何将 session 从一个 servlet 转发到另一个?

标签 java jsp servlets

大家好,我正在为我的项目开发管理模块。当用户登录时,会向登录 servlet 发送请求。当它通过单击其他选项进一步请求其他报告时,对报告的请求将发送到其他 servlet,该 servlet 会在正常类型的用户时显示的页面上给出结果。 session 在两个 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类。我在这里遇到空指针异常。

最佳答案

我认为您正在尝试做您的 Web 容器应该为您处理的事情... session 应该在来自同一客户端 session 的多个 servlet 调用过程中自动维护。来自 HttpServlet 的方法被赋予一个 HttpServletRequest。您可以使用该类的 getSession 方法之一获取相应的 HttpSession

您可以使用 setAttributegetAttribute 将内容绑定(bind)到 HttpSession

编辑:我从 Servlet 规范 2.5 中获取此内容:

servlet 可以通过名称将对象属性绑定(bind)到 HttpSession 实现中。 绑定(bind)到 session 中的任何对象均可用于属于该 session 的任何其他 servlet 相同的 ServletContext 并处理标识为相同 ServletContext 一部分的请求 session 。

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

因此,在您的第二个代码示例中,执行 (LoginService)request.getSession().getAttribute("currentSessionUser");,这应该可以工作。确保检查空值,并可能选择一个使用项目包名称约定的属性名称(例如 com.mycompany...)。

我不介意在这里提出第二意见,因为我不是一个 EE/Web 开发人员。

关于java - 如何将 session 从一个 servlet 转发到另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7958272/

相关文章:

java - 无法断言我刚刚填写的字段

java - swing - 触发树单元格编辑事件

java - 尝试在空对象引用问题上调用虚拟方法

java 3D 旋转不起作用

java - 在谷歌应用引擎 (Jetty) 中禁用 taglib 扫描

java - java中的录音机问题

java - 将表单输入值作为对象列表从 JSP 页面传递到 Servlet

javascript - 无法通过javascript在表单提交时将参数发送到servlet

java - Apache Tomcat 无法加载 web.xml - 连接超时

java - 相对路径怎么写