使用请求分派器将请求从一个 servlet 转发到另一个

Posted

技术标签:

【中文标题】使用请求分派器将请求从一个 servlet 转发到另一个【英文标题】:Forwarding a request from one servlet to another using Request dispatcher 【发布时间】:2017-02-04 17:14:53 【问题描述】:

我试图在一个 servlet 中创建一个 cookie,将其添加到 response() 并使用 DisaptcherServlet 将其转发到另一个 servlet,并尝试使用 request.getCookies() 检索 cookie。但这总是无效。

//Servlet one 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

String userName = request.getParameter("username");
String password = request.getParameter("password");

Cookie cookie = new Cookie("name", "value");
cookie.setMaxAge(30);
response.addCookie(cookie);

if(userName.equals("username") && password.equals("*****"))

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Welcome");
requestDispatcher.forward(request, response);

else
System.out.println("invalid credentials");



//welcome servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
Cookie []  cookie = request.getCookies();

if(cookie != null)
System.out.println("sucess");

else
System.out.println("cookieis null");


【问题讨论】:

【参考方案1】:

当你转发一个请求时,你基本上是在说“不,我不想处理这个请求,而是把它交给这个其他资源”。这意味着转发的请求使用与原始请求相同的请求和响应。

在您的示例 servlet 中,在响应上设置了一个 cookie,欢迎 servlet 无法访问,因为响应对象上没有获取 cookie 的 API。如果您想要这种模式 servlet,则应在请求对象上设置一个参数,然后欢迎 servlet 可以从请求对象中获取该参数。

【讨论】:

以上是关于使用请求分派器将请求从一个 servlet 转发到另一个的主要内容,如果未能解决你的问题,请参考以下文章

Servlet到Servlet的请求转发与重定向的区别

Servlet中的请求转发和重定向

请求的转发

servlet请求转发到另一个servlet

servlet HttpServletRequest类 4请求转发

servlet 转发包含