2011-04-13 57 views
0

我的目标是不映射/ {任何路径}和*。html的映射到一个servlet/*。例如:@RequestMapping欢迎文件

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上触发。不过,我发现,如果我在/test/index.html创建一个空白文件,然后将其确实工作 - 我假设默认的servlet以某种方式通过寻找index.html的帮助。

不幸的是,我不能依靠静态文件。有没有什么办法可以让这个映射工作,而空白的文件,黑客和没有映射/ *到servlet?

+1

http://stackoverflow.com/questions/7415084/spring-welcome-file-list-correct-mapping – 2012-10-24 13:40:08

回答

2

的答案取决于你是否希望春天来处理:

  • 只有以html或没有扩展名,
  • 所有URL,结束除.js文件和.pdf结束这些URL等

这两项规则将与您在您的问题给了名单。然而,第二个更容易实现。如果你有,你不希望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 how to bypass DispatcherServlet for *.html files?

+0

我是第一个选择,但看到第二个选项是多么干净,我会改变我的问题,以便可以使用排除方法解决问题。谢谢 – Keith 2011-04-13 04:12:10