正如标题所说:从 Servlet 转发到 JSP 页面时,如何在 URL 中显示 .jsp 扩展名而不重定向,从而失去 Servlet 的功能?
如果我使用以下代码从 Servlet 转发到 JSP 页面,我的 URL 中仍然有 Servlet:
request.getRequestDispatcher("index.jsp").forward(request, response);
你没有。
浏览器会显示它认为正在从中获取数据的 URL。除非你告诉它它通过重定向获得不同的 URL,否则它无法知道服务器在幕后做什么。也不应该。
从应用程序设计的角度来看,您也不应该关心。使用唯一 URL 的唯一原因是用户可以设置书签。如果 JSP 页面需要来自 servlet 的数据,那么为用户提供不同的 URL 是没有意义的。
如果您对为浏览器提供“.jsp”URL 不以为然,那么让 servlet 将数据存储在会话中。这是丑陋的,毫无意义的,并且受到并发访问问题的影响,但它确实有效。
您可以重定向到 JSP 而不是转发到它:
response.sendRedirect("index.jsp");