使用servlet请求转发后URL不显示正确的地址

标签 url servlets request

我在这里遇到了一个奇怪的问题,我真的陷入困境,非常需要完成这项工作。

所以我有一个页面说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/

相关文章:

javascript - tvOS 不加载外部 TVML 文件

url - URL 中 url 单词的最大大小是多少?

java - 如何使用 Eclipse 开发 Java Servlet?

java - 解码 PKCS-7 请求

node.js - 使用 Node 请求上传图片时如何命名文件参数?

jquery - 使用 jquery 获取 url 状态

csv - 从 URL 加载 PySpark

java - 关于从 Java servlet 接收数据的几个问题

java - 如何使用servlet在数据库服务器中插入和获取图像、音频和视频

python - 如何修复 "Page not found (404)"错误 ("Django tried these URL patterns... The empty path didn' t 与其中任何一个匹配。”)