调度发生在服务器端,而不是客户端。前向基本上告诉servlet容器使用哪个视图来呈现结果。它的位置确实没有出现在客户端的浏览器地址栏中。仅当您使用重定向而不是时,才会发生这种情况
response.sendRedirect()。重定向基本上告诉Web浏览器在给定位置上触发新的GET请求。因此,浏览器地址栏将更改为新的URL。
只需将视图(JSP文件)隐藏在
/WEB-INF文件夹中,以使最终用户不再可以直接访问它,并重复使用相同的servlet通过来显示登录表单,
doGet()并继续通过来处理登录表单提交
doPost()。如果未实现,
doGet()则它将显示HTTP状态405-此URL不支持HTTP方法GET。
@WebServlet("/login")public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Just show form. request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Process form submit. // ... if (success) { response.sendRedirect("home"); } else { request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); } }}这样,您可以通过http://example.com/context/login获取登录页面并提交到相同的URL。
您可以在前端控制器模式的帮助下,通过单个servlet对所有其他URL进行相同的操作。仅需一点工作,这也是MVC框架存在的原因:)



