这个单纯的<mvc:default-servlet-handler/>会让controller失效。

让spring mvc controller没有任何反应而且不报错。

记得以前遇到过这个问题的,但是今天配spring mvc又被坑了一把,所以打算记录一下

一、问题场景

在尝试配置静态资源访问的时候遇到的。

为了使静态资源绕过InternalResourceViewResolver,所以配置了<mvc:default-servlet-handler/>,然后就遇到了controller失效的问题了。

二、尝试解决

删除了这一句配置之后controller就能访问了,但是静态资源的访问就会出问题。

解决方法有:

(1)同时配置

<mvc:default-servlet-handler/>

<mvc:annotation-driven></mvc:annotation-driven>

(2)避免使用<mvc:default-servlet-handler/>

而是这样配置:

<mvc:resources location=”js/” mapping=”js/**”></mvc:resources>

<mvc:annotation-driven></mvc:annotation-driven>

三、问题原因

参考:http://liqipan.iteye.com/blog/1553276

会把”/**” url, 注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回。

DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet。

四、总结

主要是这个坑不会有报错,导致不好发现问题。希望以后能注意点,不要再掉坑了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注