SpringMVC 访问静态资源

因为配置了前端控制器 : url-pattern : /   除了.jsp以外 的请求都会被DispatcherServlet拦截

所有对于静态资源的请求都会被看作是一个普通的后台控制器请求,导致请求找不到而报 404 异常错误。

访问静态资源 ,这里我们有两个方法解决:

 

 

第一种解决方法

可以将前端控制器的映射修改为   url-pattern  :  /*.do    
这样访问静态资源  .css、.js 等等,都能正常访问到啦。
但 想要前端控制器处理的请求  都要带上 .do  ,并且这样对要使用  rest 风格的 url不友好,所以不建议使用。让我们来看看第二种把

 

第二种解决方法

 

2.1

需要我们在SpringMVC的配置文件中配置一些处理静态资源的配置,要使用到   mvc 的 schema 约束,所以首先要配置mvc的名称空间和mvc的  .xsd约束文件 ,如下:

xmlns:mvc="http://www.springframework.org/schema/mvc"

xsi:schemaLocation=http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

 

2.2 接下来,我们在SpringMVC的配置文件 中加上如下配置:

<!--让服务器的默认的Servlet 来处理静态资源  -->
<mvc:default-servlet-handler/> 

PS:在springMVC-servlet.xml中配置<mvc:default-servlet-handler />后,会在Spring MVC上下文中定义一个org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler ,

这个Handler的作用是去Servlet容器查找默认的Servlet来响应静态文件,一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。
如果的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

 

问题:

虽然可以访问到了静态资源,但是引入这行代码后,Controller就会失效了,准确来说是RequestMapping下面的方法失效了,从而界面无法跳转。在网上看了一些原因后,总结一下就是

<mvc:default-servlet-handler/>在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,
而这会导致SpringMVC的处理映射器和处理适配器失效,从而Controller失效。

 

而要解决这个问题还只要在SpringMVC的配置文件中配置:

<mvc:annotation-driven/>

<mvc:annotation-driven/>这一行代码的作用是自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter这两个bean,所以我把他们注释了。

 

 

2.3 终极版

如上!我们只用配置这两行: 就能正常访问静态资源    且   不让SpringMVC的处理映射器和处理适配器失效  (Controller失效)

<!-- 使用 服务器默认的Servlet来处理静态资源 -->
<mvc:default-servlet-handler/>
<!-- 注册处理映射器和处理适配器  (不让@RequestMapping 失效)  -->
<mvc:annotation-driven/>

PS:<mvc:annotation-driven/>这一行代码的作用是自动注册RequestMappingHandlerMapping和RequestMappingHandlerAdapter这两个bean,所以我把他们注释了。

<mvc:default-servlet-handler/>定义的DefaultServletHttpRequestHandler,是当没有其他mapping可以处理请求时才会执行该handler匹配的mapping,从而去查找静态内容。

 

 

 

部分摘自:

cnblogs.com/jdbn/p/11020374.html
https://www.cnblogs.com/dflmg/p/6393416.html

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值