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

使用servlet请求转发后,URL未显示正确的地址,url,servlets,request,Url,Servlets,Request,我在这里遇到了一个奇怪的问题,我真的被卡住了,需要好好完成这项工作 因此,我有一个页面,比如index.jsp,其中有一个链接“a href=servlet?action=viewMenu”。当我点击这个链接时,它将转到我的servlet上的doGet(),下面是我的servlet中的代码 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Servl

我在这里遇到了一个奇怪的问题,我真的被卡住了,需要好好完成这项工作

因此,我有一个页面,比如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);
     }
因此,上面的代码工作正常,但在请求转发之后,我的浏览器将url显示为

localhost/project/servlet?action=viewMenu。(开头有http://

我不想要上面的url,因为我无法使用tomcat设置基本身份验证,我需要的是

localhost/project/viewadminum.jsp(开头是http://的)

我曾试图找到有关这方面的信息,但一直没有找到答案


非常感谢您的帮助。

如果您希望浏览器转到其他URL,您需要告诉它重定向,而不是在服务器中进行转发。看

前进

  • 转发由servlet在内部执行
  • 浏览器完全不知道发生了什么,因此其原始URL保持不变
  • 任何浏览器对结果页面的重新加载都将简单地使用原始URL重复原始请求
重定向

  • 重定向是一个两步过程,其中web应用程序指示浏览器获取与原始URL不同的第二个URL
  • 浏览器重新加载第二个URL不会重复原始请求,而是获取第二个URL
  • 重定向比转发稍微慢一些,因为它需要两个浏览器请求,而不是一个
  • 放置在原始请求作用域中的对象对第二个请求不可用

(来自。)

我明白了,非常感谢,我想我可以从这里解决问题。谢谢,我还有一个问题,sendRedirect似乎不能与request.setAttribute一起使用。这有什么工作吗?”EDS -你可能会考虑把这个问题作为一个单独的问题(我认为这是一个很好的问题,我看不到明显的重复)。有两个选项可能不适合您的情况:1)使用HttpSession-然后属性可以在调用之间保持不变。2) 将属性作为重定向URL的一部分发送,并修改servlet以读取它们。