>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19250 个阅读者 刷新本主题
 * 贴子主题:  拦截器不拦截静态资源的三种处理方法 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-04-17 04:09:27     消息  查看  搜索  好友  邮件  复制  引用

方案一、拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)
<mvc:resources location="/" mapping="/**/*.js"/>
<mvc:resources location="/" mapping="/**/*.css"/>
<mvc:resources location="/assets/" mapping="/assets/**/*"/>
<mvc:resources location="/images/" mapping="/images/*" cache-period="360000"/>

<mvc:interceptors>
  <mvc:interceptor>
    <mvc:mapping path="/**/
*"/>
    <mvc:exclude-mapping path="/**/fonts/*"/>
    <mvc:exclude-mapping path="/**/
*.css"/>
    <mvc:exclude-mapping path="/**/*.js"/>
    <mvc:exclude-mapping path="/**/*.png"/>
    <mvc:exclude-mapping path="/**/*.gif"/>
    <mvc:exclude-mapping path="/**/*.jpg"/>
    <mvc:exclude-mapping path="/**/*.jpeg"/>
    <mvc:exclude-mapping path="/**/*login*"/>
    <mvc:exclude-mapping path="/**/*Login*"/>
    <bean class="com.luwei.console.mg.interceptor.VisitInterceptor"></bean>
  </mvc:interceptor>
</mvc:interceptors>

方案二、使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

1、在spring-mvc.xml中启用默认Servlet

<mvc:default-servlet-handler/>

2、在web.xml中增加对静态资源的处理


<servlet-mapping>  
  <servlet-name>default</servlet-name>  
  <url-pattern>*.js</url-pattern>  
  <url-pattern>*.css</url-pattern>  
  <url-pattern>/assets/*"</url-pattern>  
  <url-pattern>/images/*</url-pattern>  
</servlet-mapping>

但是当前的设置必须在Spring的Dispatcher的前面

方案三、修改Spring的全局拦截设置为*.do的拦截(涉及web.xml)


<servlet>
  <servlet-name>SpringMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mvc.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>SpringMVC</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

这样设置,Spring就会只针对以'.do'结尾的请求进行处理,不再维护静态资源

针对这三种方案的优劣分析:

第一种方案配置比较臃肿,多个拦截器时增加文件行数,不推荐使用;第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截所有请求,然后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗;第三种方案Spring只是处理以'.do'结尾的访问,性能上更加高效,但是再访问路径上必须都以'.do'结尾,URL不太文雅;

综上所述,推荐使用第二和第三种方案


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->数据类型
  JavaWeb开发-->自定义JSP标签(Ⅱ)
  JSP与Hibernate开发-->第一个helloapp应用
  Java网络编程-->Socket用法详解
  精通Spring-->CSS过渡和动画
  Vue3开发-->Vue组件开发高级技术
  WebFlux 响应式编程初体验
  微服务的拆分方式
  @Configuration注解的用法
  Spring MVC记录日志的三种方式
  使用Spring MVC处理404错误的方法
  Spring MVC异常处理机制
  @SessionAttributes的用法
  Spring MVC的国际化
  使用 Flask-RESTful 设计 RESTful API
  springboot集成通用mapper实现Echarts
  Spring Cloud 服务发布与调用
  浓缩精华的架构演进过程,经验总结,值得收藏!
  一份Spring Boot核心知识清单
  Spring MVC Controller单例陷阱
  RESTful 架构详解
  更多...
 IPIP: 已设置保密
树形列表:   
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。