为什么servlet名称留在RequestDispatcher.forward之后的url中?



我正在制作一个以登录页面开始的JSP/Servlet web应用程序。用户输入登录信息后,一个名为LoginServlet的servlet处理数据,如果登录成功,servlet将用户重定向到MainPage.jsp,如下所示:

RequestDispatcher rd = request.getRequestDispatcher("MainPage.jsp");
rd.forward(request,response);

它的工作原理。它带我到MainPage.jsp,只有URL是而不是:

http://localhost:8080/RestauRec/MainPage.jsp

:

http://localhost:8080/RestauRec/LoginServlet

这不是一个实际的问题,但是,我仍然想知道为什么会这样,我怎么能改变这一点?

注:我不知道它是否重要,但是,在form元素的action属性(在登录页面)我放置LoginServlet。这样的:

<form action="LoginServlet" method="POST">

提前感谢!

forward是在单个请求-响应周期内发生的操作。它使用转发资源来完成响应。

你的浏览器发送一个请求到/someUrl,你的服务器处理它,返回一个响应。

这不是一个实际的问题,但是,我仍然想知道为什么会这样,我怎么能改变这一点?

你必须让你的客户端,浏览器,发送一个不同的请求到另一个URL,可能是因为重定向。

forward()方法不会改变url。HttpServletResponse中的sendRedirect()也会更改url。

response.sendRedirect("MainPage.jsp");  

记住,当你重定向时,一个新的请求被击中容器。这意味着所有之前的数据都消失了,你会得到一个全新的请求。

最新更新