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

时间:2014-08-04 14:37:13

标签: java jsp servlets

我正在制作一个以登录页面开头的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

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

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

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

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

您的浏览器向/someUrl发送一个请求,您的服务器会处理它,并返回响应。

  

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

您必须让您的客户端(浏览器)向另一个网址发送不同的请求,可能是因为重定向。

答案 1 :(得分:2)

forward()方法不会更改网址。 HttpServletResponse中的sendRedirect()也会更改网址。

response.sendRedirect("MainPage.jsp");  

请记住,当您进行重定向时,新的请求会被命中。这意味着以前的所有数据都会消失,您将收到一个全新的请求。

相关问题