过滤静态资源

回顾一下web.xml中配置DiepatcherServlet

<!-- 配置DispatcherServlet -->                                                        
<servlet>                                                                           
    <servlet-name>mvc</servlet-name>                                                
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>                                            
</servlet>                                                                          
<servlet-mapping>                                                                   
    <servlet-name>mvc</servlet-name>                                                
    <!-- 所有资源都要经Dispatcher处理 -->                                                    
    <url-pattern>/</url-pattern>                                                    
</servlet-mapping>                                                                  

配置好后,新建mvc-servlet.xml,在该xml文件中启动mvc注解,启动包的扫描,配置视图解析器等操作,即可实现SpringMVC注解方式的使用。

但这里会出现一个问题,注意配置DispatcherServlet时url-pattern中的路径为/,表示所有的请求都要经DispatcherServlet截获,并且经处理器处理后在Controller中执行路径对应的方法;但是诸如媒体资源、JS文件、CSS文件等也带有路径的资源也会被当做请求路径处理,然而我们并没有在Controller中设置路径。

比如我们在JSP中想显示一幅图片:

<img alt="加载失败" src="images/1.jpg">

如果配置了上面的DispatcherServlet,这时就会报警告信息:

警告: No mapping found for HTTP request with URI [/web02/images/1.jpg] in DispatcherServlet with name 'mvc'

 因此我们需要将媒体资源、js文件、css文件等静态资源过滤掉。下面介绍几种方法:

(一)在mvc-servlet.xml文件中添加

<!-- 过滤静态资源 -->                                              
<mvc:default-servlet-handler/>

即可过滤掉静态资源,该标签有个默认参数default-servlet-name="default",该参数指定了一个名为default的servlet,该servlet在tomcat发布位置的conf目录的web.xml(该xml文件作用于所有的web项目,类似于Java中的全局变量。所以在单个项目的xml文件中也可以引用该default servlet)文件中找到,这里引述该servlet的注释:

  <!-- The default servlet for all web applications, that serves static     -->
  <!-- resources.  It processes all requests that are not mapped to other   -->
  <!-- servlets with servlet mappings (defined either here or in your own   -->
  <!-- web.xml file).                                                       -->

可见default servlet就是用来过滤静态资源的。

(二)在web.xml中添加

<!-- 过滤静态资源 -->                         
<servlet-mapping>                       
    <servlet-name>default</servlet-name>
    <url-pattern>*.jpg</url-pattern>    
</servlet-mapping>                      

这里的uer-pattern可设置多个,每个对应一个格式的静态资源。

(三)在mvc-servlet.xml文件中添加:

<!-- 过滤静态资源 -->                                                       

<mvc:resources location="/WEB-INF/images/" mapping="/images/**"/>     
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>             

当发现标签中有/images/为前缀的路径,解析器就将/images/替换为/WEB-INF/images/寻找资源。但浏览器中的资源路径还是mapping中的路径。

原文地址:https://www.cnblogs.com/qingyaxuan/p/6508492.html