我在这里遇到了一个奇怪的问题,我真的陷入困境,非常需要完成这项工作。
所以我有一个页面说index.jsp,其中有一个链接说“a href=servlet?action=viewMenu”。当我单击此链接时,它将转到我的 servlet 上的 doGet(),这是我的 servlet 中的代码。
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if(action.equals("viewMenu")){
address = "/viewAdminMenu.jsp";
}
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request,response);
}
所以上面的代码工作正常,但请求转发后,我的浏览器将网址显示为
localhost/project/servlet?action=viewMenu。 (以http://开头)
我不想要上面的网址,因为我无法使用 tomcat 设置基本身份验证,我需要的是
localhost/project/viewAdminMenu.jsp(以 http://开头)
我试图查找有关此问题的信息,但一直无法弄清楚。
任何帮助将不胜感激。
最佳答案
如果您希望浏览器转到不同的 URL,您需要告诉它重定向,而不是在服务器中进行转发。请参阅sendRedirect()
method of HttpServletResponse .
转发
- 转发由 servlet 在内部执行
- 浏览器完全不知道它已经发生,因此其原始 URL 保持不变
- 任何浏览器重新加载结果页面都会简单地重复原始请求,并使用原始 URL
重定向
- 重定向是一个两步过程,其中网络应用程序指示浏览器获取第二个 URL,该 URL 与原始 URL 不同
- 浏览器重新加载第二个网址不会重复原始请求,而是会获取第二个网址
- 重定向比转发稍慢,因为它需要两个浏览器请求,而不是一个
- 放置在原始请求范围内的对象对于第二个请求不可用
(来自 Java Practices 。)
关于使用servlet请求转发后URL不显示正确的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3847678/