【发布时间】:2014-03-28 07:24:48
【问题描述】:
我正在使用 Spring 开发应用程序。我正在通过应用程序导航到不同的页面。我的问题是,
如果我正在导航到 ABC.jsp 页面。在浏览器中应该显示为IP:port/ABC,而不是IP:port/ABC.jsp。
spring中是否有任何机制可以在浏览器中隐藏文件扩展名?
【问题讨论】:
我正在使用 Spring 开发应用程序。我正在通过应用程序导航到不同的页面。我的问题是,
如果我正在导航到 ABC.jsp 页面。在浏览器中应该显示为IP:port/ABC,而不是IP:port/ABC.jsp。
spring中是否有任何机制可以在浏览器中隐藏文件扩展名?
【问题讨论】:
如果我没记错,而且您使用的是 sping。如此简单,在控制器请求映射中将扩展名和控制器设置视图页面中的一件事拖放到模型中,也将扩展名放入其中。喜欢
@RequestMapping(value="/login")
public ModelAndView login() {
return new ModelAndView("login");
}
在上述方法中,我通过删除扩展名将控制器映射为登录名,并且在转发模型时,我正在删除扩展名。在这种情况下,您可以转发到控制器而不在 url 中显示扩展名。
【讨论】:
使用 servlet 映射,您需要单独指定每个 JSP,如下所示:
<servlet>
<servlet-name>search</servlet-name>
<jsp-file>/search.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>search</servlet-name>
<url-pattern>/search</url-pattern>
</servlet-mapping>
如果所有这些 JSP 都在一个公共路径中,那就更容易了。例如。 /app/*。
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>com.example.FriendlyURLServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
与
request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
这假定 JSP 位于 /WEB-INF 文件夹中,因此无法直接请求它们。这将在 http://example.com/app/search 上显示 /WEB-INF/search.jsp。
【讨论】:
<servlet> <servlet-name>search</servlet-name> <jsp-file>/search.jsp</jsp-file> </servlet> <servlet-mapping> <servlet-name>search</servlet-name> <url-pattern>/search</url-pattern> </servlet-mapping>