过滤静态资源
回顾一下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中的路径。