刚学习完SpringMVC框架,为了巩固,打算将之前的项目升级成SpringMVC项目,却遇到了地址栏提交/admin/login.html
请求访问登录页面却返回406的问题,但是,却可以访问其他静态资源网页。
这里有个前提,我的Controller中的登录方法的请求url是/admin/login
我在springmvc的配置文件中明确配置了
<mvc:default-servlet-handler/>
以过滤静态资源请求,为什么还会出现这样的问题
一般情况下返回406,是因为后台接收到了请求并返回了响应,但是浏览器无法解析响应的内容而报出406,也就是说,login.html这个请求被SpringMVC的DispatchServlet处理了,我认为,不是springmvc没有过滤静态资源,而是它将/admin/login.html
这个请求当做了/admin/login
,从而调用了我的登录方法,返回了JSON到前端,前端由于请求头和响应头的返回类型不同而导致无法解析,从而报出406。
那么现在问题就明确了,只要让这个请求不走DispatcherServlet就好了,解决方案:
在web.xml中配置tomcat默认的servlet,并且设定所有以.html结尾的请求都走默认的servlet即可
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
总结:
- 这里最主要的原因就是两个url几乎相同。