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

时间:2010-10-02 21:58:19

标签: 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);
     }

所以上面的代码工作正常,但在请求转发后,我的浏览器显示网址为

本地主机/项目/ servlet的?动作= viewMenu。 (在开头使用http://)

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

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

我试图找到有关此内容的信息,但未能弄明白。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

如果您希望浏览器转到其他URL,则需要告诉它重定向,而不是在服务器中进行转发。请参阅sendRedirect() method of HttpServletResponse

转发

  • 由servlet在内部执行转发
  • 浏览器完全没有意识到它已经发生,所以原始网址保持不变
  • 任何浏览器重新加载生成的页面都会使用原始网址
  • 简单地重复原始请求

重定向

  • 重定向是一个两步过程,其中Web应用程序指示浏览器获取第二个URL,该URL与原始URL不同
  • 浏览器重新加载第二个网址不会重复原始请求,而是会提取第二个网址
  • 重定向比转发略慢,因为它需要两个浏览器请求,而不是一个
  • 放置在原始请求范围内的对象不可用于第二个请求

来自Java Practices。)