default-servlet-handler不生效原因,springmvc静态资源拦截方案比较

21 篇文章 0 订阅
7 篇文章 0 订阅

springmvc为什么要拦截静态资源?


      简单来说,为了请求的url不带类似*.action,*.do,比如http://localhost:8080/system/index.action,spring团队统一风格,而web项目配置的web.xml中,所有请求都必须走过DispatcherServlet,当然就包括了静态资源,比如http://localhost:8080/html/index.html,为了解决这个问题,spring给了两种方案,下面我们一起来讨论下两种方案的使用和区别,给新手同学们一个很自白,清晰的认识!

 

解决办法


     说解决办法之前,咱先来聊下web项目的结构,如下图所示,大家可以看到默认webapp下有个WEB-INF文件夹,这个文件夹是提升文件安全级别的,如果不设置,是访问不到的,所以大家一般看到的资源文件(jsp,css,jss)都在WEB-INF文件夹下。

image.png

解决办法1:

<mvc:default-servlet-handler />

     如果项目是这样配置的,你访问不到WEB-INF/css/下的文件,因为springmvc上下文定义了一个DefaultServletHttpRequestHandler用于处理静态文件的,他做的工作是转发给Spring默认处理器DispatcherServlet,DispatcherServlet能处理webapp下没有权限目录文件,它不能处理WEB-INF文件夹,也就是说你配置了<mvc:default-servlet-handler />,你能够访问html下的文件,但是你访问不了WEB-INF/css/下的文件,这可能是文件夹权限原因,根据官方文档说明,这样配置可以与解决方法2共存。下面我们来看看方法2。

解决办法2:

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

       location:对应是根路径

       mapping:映射是访问路径

      通过http://localhost:8080/css/index.css就可以访问到被拦截的资源了。这种方式能解决方法1的局限情况。

 

总结


     做个总结吧,我推荐这种方式2来解决访问静态资源拦截问题,我觉得方法1可以不写,就按方法2做配置,够用了。方法2可能配置的多一些,但是看起来比较清晰,更容易理解。谢谢童鞋们的观看,如果喜欢或有疑惑,请点赞和留言哦!我是叫练,边叫边练。

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: default-servlet-handler是Spring MVC框架中的一个处理器,用于处理静态资源请求。当请求的URL没有匹配到任何一个Controller时,default-servlet-handler会将请求转发给Servlet容器中的默认Servlet来处理,例如Tomcat中的DefaultServlet。这样可以避免在Controller中处理静态资源请求,提高系统性能。 ### 回答2: default-servlet-handler是Spring MVC框架用于处理静态资源的默认处理器,它是一个处理器映射器和处理器适配器的组合。在Spring MVC中,当发送来自客户端的静态文件请求时,会使用该default-servlet-handler默认处理器来处理这些请求。 Spring MVC的默认处理器使用了Servlet容器的默认Servlet来处理静态资源的请求。这些静态资源可以是图片、CSS文件、JavaScript文件或HTML文件等。当请求的资源在内存中不存在时,default-servlet-handler会把请求转发到Servlet容器里的默认Servlet,由其来处理,并把处理结果返回给客户端。这样做可以减轻Spring MVC本身的负担,提高整个应用程序的性能。 使用default-servlet-handler,我们可以不必为所有静态资源创建控制器,以提高应用程序启动和运行速度。这就是说,当我们的控制器无法处理一个请求时,Spring MVC会检查是否有默认的Servlet来处理这个请求,并把这个请求转给该Servlet。所以,我们可以通过在web.xml文件中注册Servlet来实现对不同路径的映射和处理。 另外需要注意的是,default-servlet-handler在XML配置文件中的配置代码如下: ```xml <mvc:default-servlet-handler/> ``` 在注解配置中的代码如下: ```java @Configuration @EnableWebMvc public class AppConfig implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } } ``` 以上就是default-servlet-handler的基本使用和配置方法。如果在Spring MVC框架中需要处理静态资源并提高应用程序的性能,这个处理器的使用是非常值得推荐的。 ### 回答3: default-servlet-handler是Spring框架中的一个组件,它是用来处理静态资源(如图片、CSS文件、JavaScript文件等)的一个处理器。在Web应用程序中,通常会有很多静态资源需要提供给客户端访问,如何高效地管理这些资源并提供访问? 在传统的Web应用程序中,通常会将静态资源放在Web服务器的某个目录下,如Tomcat中的【webapps】目录。Web服务器收到客户端请求后,根据URL去服务器中查找对应的文件并返回给客户端。但是,这种方式存在一个问题:每次静态资源的修改都需要重启Web服务器,影响Web应用程序的正常运行。 而Spring框架中提供了default-servlet-handler能够解决这个问题,它会去解析Web应用程序中的资源和请求路径,并将请求转发到Web服务器的默认Servlet来处理。这样,Web服务器就不需要重启就可实时地提供静态资源default-servlet-handler的原理是将对静态资源的请求交给Web服务器中的默认Servlet来处理,而不是交给DispatcherServlet来处理。需要注意的是,default-servlet-handler只是用来处理静态资源,如果请求的URL路径与某些动态请求有冲突,则会由DispatcherServlet来处理动态请求。 在配置default-servlet-handler时,需要为该处理器指定一个URL模式,用于匹配静态资源的请求路径。例如: <mvc:default-servlet-handler /> 这样配置就会将所有静态资源请求交给Web服务器默认的Servlet来处理。 综上所述,default-servlet-handler是Spring框架中用于处理静态资源的重要组件,它能够高效地提供静态资源访问的服务,降低Web服务器重启频率,提高Web应用程序的稳定性和效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值