springmvc访问静态资源的问题,.js.jpg.css

wxiaoxiao      2022-02-09     298

关键词:

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

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

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

Xml代码  
<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 
mvc:resources 的使用方法:

Xml代码  
<!-- 对静态资源文件的访问 -->    
<mvc:resources mapping="/images/**" location="/images/" />  

/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.

 

 

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

Xml代码  
<mvc:default-servlet-handler/>  

会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到 org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler 处理并返回.
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.

补充说明:多个HandlerMapping的执行顺序问题:

DefaultAnnotationHandlerMapping的order属性值是:0

<mvc:resources/ >自动注册的 SimpleUrlHandlerMapping的order属性值是: 2147483646

<mvc:default-servlet-handler/>自动注册的SimpleUrlHandlerMapping的order属性值是:2147483647

spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,我们没有叫a.jpg的Action。再按order值升序找,由于最后一个SimpleUrlHandlerMapping 是匹配"/**"的,所以一定会匹配上,再响应图片。

 

最后再说明一下,如何你的DispatcherServlet拦截 *.do这样的URL,就不存上述问题了。

 











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

如果你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。 目的:可以正常访问静态文件,不要找不到静态... 查看详情

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

  如何你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。 方案一:激活Tomcat的defaultServlet来处理静态... 查看详情

springmvc访问静态资源的三种方式(转)

本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html如何你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.j 查看详情

如何让springmvc对静态资源文件的访问使用文件系统的相对路径

参考技术A这种问题一般是因为数据库文件所在的文件夹的访问权限不够,给这个文件夹设置允许everyone用户全部读写权限就可以了 查看详情

springmvc中处理静态资源的多种方法

...么问题来了,如何在页面中请求这些静态资源呢?还记得SpringMVC中的DispatcherServlet吗?它是SpringMVC中的前置控制器,若配置的拦截路径为“/”,那么所有的请求都将被它拦截。对静态资源的访问也属于一个 查看详情

(转)springmvc中处理静态资源的多种方法

...么问题来了,如何在页面中请求这些静态资源呢?还记得SpringMVC中的DispatcherServlet吗?它是SpringMVC中的前置控制器,若配置的拦截路径为“/”,那么所有的请求都将被它拦截。对静态资源的访问也属于一个 查看详情

处理静态资源

...源会有问题存在一般将DispatcherServlet请求映射配置为/,则SpringMVC将捕获当作一个普通请求处理,所以就会找不到对应的处理器发生错误3.如何解决?可以在SpringMVC配置文件中配置<mvc:default-servlet-handler/>的方式解决静态资源问题... 查看详情

关于springmvc中静态文件路径问题

<mvc:resourcesmapping="/css/**"location="/css/"/>css/blue/skin.css访问不到应该怎么写的呢?  <!--对静态资源文件的访问,方案一将无法mapping到Controller的path交给defaultservlethandler处理  <mvc:default-servlet-handler/>-->... 查看详情

静态资源处理

 为什要处理静态资源呢?因为我们使用了springmvc框架,springmvc框架的流程我们都知道,它的核心处理器(dispacherSerlet)拦截所有url,通过组件handlerMapping的映射使访问的url和对应的controller(adapterHandler,我们写的控制器)匹... 查看详情

处理静态资源

   若将DispatcheServlet请求映射设置为/,则SpringMvc将捕获WEB容器的所有请求,包括静态资源的请求,SpringMvc会将它们当成一个普通的请求处理,那么将会出现因找不到对应的处理器将导致错误。可在SpringMvc的配置中配置&... 查看详情

SpringMVC:@RequestMapping 和静态资源服务的优先级

】SpringMVC:@RequestMapping和静态资源服务的优先级【英文标题】:SpringMVC:Theprecedenceof@RequestMappingandStaticResourceserving【发布时间】:2016-03-0904:13:26【问题描述】:我对控制器处理程序方法有以下映射:@RequestMapping(value="login.html")public... 查看详情

springmvc程序中怎么得到静态资源文件css,js,图片文件的路径问题

问题描述在用springmvc开发应用程序的时候。对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题。那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文件,如果你输入某个css的... 查看详情

springboot中如何访问静态资源?(代码片段)

....SpringBoot中的配置一.传统SSM中的配置我们常用的方式是在springmvc的配置文件中添加下面这段代码,让其过滤掉指定目录下的静态文件,不要拦截。<mvc:resourcesmapping="/js/**"location="/js/"/&g 查看详情

项目一众筹网02_4_springmvc访问静态资源:/*,/,和*.do和*.html的区别

系列文章目录文章目录系列文章目录项目答疑这样做必有它的理由,但是却不是十全十美的,得必有舍项目答疑我们这里为什么@RequestMapping(“admin/do/loginout.html”)后面要有一个.html,而不是.action或者.do呢或者直接... 查看详情

springmvc(代码片段)

目录SpringMVC(三)mvc:view-controller<mvc:annotation-driven/>form标签简介作用使用场景使用方式处理请求页面处理服务器表单校验为什么后端要做表单的校验JSRHibernateValidator常用校验规则访问静态资源概述url-pattern为/时访问静态资源J... 查看详情

在 /* 上映射全局前端控制器 servlet 时如何访问静态资源

...eton/*【发布时间】:2010-10-2614:09:33【问题描述】:我已将SpringMVC调度程序映射为/*上的全局前端控制器servlet。<servlet><servlet-name>home< 查看详情

在 /* 上映射全局前端控制器 servlet 时如何访问静态资源

...eton/*【发布时间】:2010-10-2614:09:33【问题描述】:我已将SpringMVC调度程序映射为/*上的全局前端控制器servlet。<servlet><servlet-name>home< 查看详情

我的问题集

Springmvc    1.现象:在配置dispatcherServlet后加载应用就报错,注释掉dispatcherServlet在从新加载就不报错,或者不加应用时启动tomcat也不报错     原因:lib下少加载commons-logging-1.2.jar这个jar包导致    2.现象:在地址... 查看详情