前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >SpringMVC访问静态资源的三种方式

SpringMVC访问静态资源的三种方式

作者头像
用户9184480
发布2024-12-19 10:38:11
发布2024-12-19 10:38:11
18100
代码可运行
举报
文章被收录于专栏:云计算linux
运行总次数:0
代码可运行

已经设置了springMVC的静态资源访问方式,但是依然出错:

SpringMVC访问静态资源的三种方式_mvc:resources
SpringMVC访问静态资源的三种方式_mvc:resources

这种问题在于配置方式写错了,总结如下,针对SpringMVC有如下三种配置使用静态资源的方式:

如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到​静态资源​的问题。

如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg,*.js,*.css的访问也就被拦截了。

方案一:激活Tomcat的defaultServlet来处理静态文件

代码语言:javascript
代码运行次数:0
复制
<servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
     <servlet-name>default</servlet-name>
     <url-pattern>*.css</url-pattern>
</servlet-mapping>

要配置多个,每种文件配置一个。要写在DispatcherServlet的前面, 让defaultServlet先拦截,这个就不会进入​Spring​了,我想性能是最好的吧。

  Tomcat, Jetty, JBoss, and GlassFish 默认 Servlet的名字 -- "default"

  Google App Engine 默认 Servlet的名字 -- "_ah_default"

  Resin 默认 Servlet的名字 -- "resin-file"

  WebLogic 默认 Servlet的名字 -- "FileServlet"

​​​WebSphere 默认 Servlet的名字 -- "SimpleFileServlet"​​​

方案二: 在spring3.0.4以后版本提供了mvc:resources

/images /**映射到 ResourceHttpRequestHandler 进行处理,location指定​静态资源​的位置.可以是web application根目录下、jar包里面,这样可以把​静态资源​压缩到jar包中。cache-period可以使得​静态资源​进行web cache

  如果出现下面的错误,可能是没有配置 <​mvc​:annotation-driven /> 的原因。 报错WARNING: No mapping found for HTTP request with URI [/​mvc​/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

  使用 <​mvc​:resources/> 元素,把 mapping 的 URI 注册到 SimpleUrlHandlerMapping的urlMap 中,key 为 mapping 的 URI pattern值,而 value为 ResourceHttpRequestHandler,这样就巧妙的把对​静态资源​的访问由 HandlerMapping 转到ResourceHttpRequestHandler 处理并返回,所以就支持 classpath 目录, jar 包内​静态资源​的访问.另外需要注意的一点是,不要对 SimpleUrlHandlerMapping 设置 defaultHandler. 因为对 static uri 的 defaultHandler 就是ResourceHttpRequestHandler,

否则无法处理static resources request。

代码语言:javascript
代码运行次数:0
复制
<mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/css/**" location="/css/"/>
    <mvc:resources mapping="/img/**" location="/img/"/>

方案三 ,使用<​mvc​:default-servlet-handler/>

代码语言:javascript
代码运行次数:0
复制
<mvc:default-servlet-handler/>
代码语言:javascript
代码运行次数:0
复制
会把 "/**" url,注册到 SimpleUrlHandlerMapping 的 urlMap 中,把对静态资源的访问由 HandlerMapping 转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.

DefaultServletHttpRequestHandler 使用就是各个 Servlet 容器自己的默认 Servlet.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方案一:激活Tomcat的defaultServlet来处理静态文件
  • 方案三 ,使用<​mvc​:default-servlet-handler/>
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档