Java 如何将HTTPRequest从一个控制器类重定向到另一个控制器类?

Java 如何将HTTPRequest从一个控制器类重定向到另一个控制器类?,java,jakarta-ee,Java,Jakarta Ee,我有两个控制器。一个是主控制器,另一个是中间控制器。在中间控制器中,我应该向HTTPRequest添加标题。添加之后,我应该将它重定向到主控制器,在那里我应该检查我添加的标题。我该怎么做?有人能帮我吗?请……。转发 getServletContext().getRequestDispatcher().forward("second page"); response.sendRedirect("second page"); 请求转发由JSF控制器Servlet内部完成,并发送到另一个资源。浏览

我有两个控制器。一个是主控制器,另一个是中间控制器。在中间控制器中,我应该向HTTPRequest添加标题。添加之后,我应该将它重定向到主控制器,在那里我应该检查我添加的标题。我该怎么做?有人能帮我吗?请……。

转发

getServletContext().getRequestDispatcher().forward("second page");
response.sendRedirect("second page");
请求转发由JSF控制器Servlet内部完成,并发送到另一个资源。浏览器不知道web容器的服务器端发生了什么。因此,它仍然认为它倾向于原始请求,并在其地址栏中显示原始URL。但是,显示的页面内容来自第二个页面

重定向调度

getServletContext().getRequestDispatcher().forward("second page");
response.sendRedirect("second page");
在这种情况下,JSF控制器Servlet指示客户端浏览器(通过HTTP响应头)获取另一个URL。因此,浏览器获取一个全新的URL,并在其地址栏中显示第二个URL。这可能会导致轻微的性能延迟


我认为您需要转发请求,而不是重定向

RequestDispatcher dispatcher= request.getRequestDispatcher("servlet-mapped-url");
dispatcher.forward(request, response);

看起来是个好地方。如果您想预处理传入请求,可以使用servlet过滤器进行预处理,然后简单地将其链接到适当的servlet

有关详细信息,请参阅

如果情况并非如此,您只需转发如下请求:

        request.getRequestDispatcher("/yourServlet").forward(request, response); // forward to the main servlet

这里的另一个例子是:FacesContext.getCurrentInstance().getExternalContext().redirect(“myPage”);