@RequestMapping欢迎文件

| 我的目标是将/ {any path}和* .html映射到servlet,而不映射/ *。例如:
map:
/foo
/foobar/
/bar.html
/foo/bar.html

don\'t map:
/foo.js
/bar.pdf
为了做到这一点,我有一个servlet和欢迎文件映射如下: web.xml:
<servlet-mapping>
 <servlet-name>someServlet</servlet-name>
 <url-pattern>*.html</url-pattern>
</servlet-mapping>

<welcome-file-list>
 <welcome-file>index.html</welcome-file>
</welcome-file-list>
在控制器中
@RequestMapping(value=\"/index.html\", method=RequestMethod.GET)
public ModelAndView showPage(HttpServletRequest request){
  ...
}
这将不起作用-不会在
/test
上触发Servlet。但是,我发现如果我在
/test/index.html
创建一个空白文件,那么它确实可以工作-我认为默认servlet通过找到index.html会有所帮助。 不幸的是,我不能依赖静态文件。有没有什么方法可以使这种映射有效,而不会破坏空白文件,也不会将/ *映射到servlet?     
已邀请:
答案取决于您是否希望Spring处理: 仅以.html结尾或没有扩展名的网址,或 所有网址,但以.js和.pdf结尾的网址除外 这两个规则都将与您在问题中给出的列表匹配。但是第二种方法更易于实现。如果您有一个不想让Spring处理的扩展名列表,只需将
web.xml
文件中的那些文件映射到默认处理程序即可,如下所示:
<servlet-mapping>
    <servlet-name>someServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
</servlet-mapping>
但是,这仅在您知道您不希望Spring处理的所有扩展名时才有效,因为您必须在
web.xml
中列出每个扩展名。 如果您确实要拒绝.html以外的任何扩展名,则需要以某种方式覆盖Spring的默认行为。我不会在这里进行介绍,因为我认为以上是更好的选择。但是这个问题解释了两种可能的解决方法:spring mvc如何为* .html文件绕过DispatcherServlet?     

要回复问题请先登录注册