springMVC 请求404错误或静态资源无法访问问题:springMVC 请求404错误或静态资源无法访问。 在web.xml中我们一般这样配置:
spring3
org.springframework.web.servlet.DispatcherServlet
1
spring3
/
使用
/
可以实现rest风格,但是会拦截了所有的请求导致静态资源无法访问(解决方法后面说), 当然,如果你使用*.do、*.xhtml等就不会出现静态资源无法访问问题。 静态资源无法访问解决方案: 1,在spring3-servlet.xml中添加一下配置:
使用元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中, key为mapping的URI pattern值,而value为ResourceHttpRequestHandler, 这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问. 另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler, 否则无法处理static resources request. 如果加上以上配置还是不成功,检查一下是不是没有配置:2,在spring3-servlet.xml中添加一下配置:会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回. DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet. 推荐使用*.do或方案2,如果你访问一个网站的默认主页(也就是web.xml中配置的welcome-file)index.jsp,一般我们可以类似这样访问:http://localhost:8080/apprecommend-web/ 会自动跳转到http://localhost:8080/apprecommend-web/index.jsp,如果使用方案1,就不能这样访问了,因为spring会拦截所有的请求,但是拦截到的/apprecommend-web/没有匹配的处理action,而且就直接 返回404,不再处理了,如果使用方案2,还会由DefaultServletHttpRequestHandler去调用Servlet容器自己的默认Servlet进行处理,然后返回。