Spring @请求映射欢迎文件
我的目标是将/{any path}和*.html映射到一个servlet,而不映射/*。例如:Spring @请求映射欢迎文件,spring,tomcat,web.xml,spring-annotations,Spring,Tomcat,Web.xml,Spring Annotations,我的目标是将/{any path}和*.html映射到一个servlet,而不映射/*。例如: map: /foo /foobar/ /bar.html /foo/bar.html don't map: /foo.js /bar.pdf 为了做到这一点,我有一个servlet和welcome文件映射如下: web.xml: <servlet-mapping> <servlet-name>someServlet</servlet-name> <ur
map:
/foo
/foobar/
/bar.html
/foo/bar.html
don't map:
/foo.js
/bar.pdf
为了做到这一点,我有一个servlet和welcome文件映射如下:
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>
这将不起作用-servlet不会在/test
上触发。但是,我发现如果我在/test/index.html
中创建一个空白文件,那么它就可以工作了-我假设默认servlet通过查找index.html在某种程度上有所帮助
不幸的是,我不能依赖静态文件。有没有一种方法可以在没有空白文件HAK的情况下进行映射,而不需要映射到servlet? < p>答案取决于是否希望Spring处理:
- 仅以.html结尾或不带扩展名的URL,或
- 所有URL,除了以.js和.pdf结尾的URL等
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>
someServlet
/
违约
*.js
然而,这只有在您知道所有不希望Spring处理的扩展时才有效,因为您必须在web.xml
中列出每个扩展
如果您真的想拒绝.html以外的任何扩展,那么您需要以某种方式覆盖Spring的默认行为。我不会在这里讨论这个问题,因为我认为上面提到的是一个更好的选择。但是在这个问题中解释了两种可能的方法:我选择了第一种方法,但是看到第二种方法有多干净,我将改变我的问题,以便使用排除法解决它。谢谢
<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>