Spring MVC:避免URL中的文件扩展名


问题内容

这不起作用....当我使用

<servlet-mapping>
    <servlet-name>Spring-MVC-Dispatcher-Servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

我得到警告

WARNING: No mapping found for HTTP request with URI [/CMT/WEB-INF/jsp/content/edit.jsp] in DispatcherServlet with name 'Spring-MVC-Dispatcher-Servlet'
WARNING: No mapping found for HTTP request with URI [/CMT/WEB-INF/jsp/content/edit.jsp] in DispatcherServlet with name 'Spring-MVC-Dispatcher-Servlet'

我的默认设置是使用*.htm和URL
http://localhost:8080/CMT/content/edit.htm,但我想使用http://localhost:8080/CMT/content/edit

我也仍然需要能够加载资源,如位于JS / CSS文件CMT/jsCMT/cssCMT/lib


问题答案:

您是否正确映射了URL,以便同时捕获edit.htmedit?尝试(假设CMT是您的contextPath):

@RequestMapping(value = "/content/edit*")

为了使资源正常工作,您需要<mvc:resources .../>在spring配置中指定。在这里查看Spring
doco

编辑:Spring提供了一个DefaultAnnotationHandlerMappingbean,它通常会捕获可能的扩展名,例如.html,.xml等。我正在使用的应用程序已通过以下方式将其关闭:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false"/>
</bean>

因此,您通常不必担心扩展名。