gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:35:24 26 4
gpt4 key购买 nike

大家好,我正在为我的项目开发管理模块。当用户登录时,会向登录 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com