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

博学善思 博学善思     2022-08-03     478

关键词:

如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。

 目的:可以正常访问静态文件,不要找不到静态文件报404。
 
方案一:激活Tomcat的defaultServlet来处理静态文件

<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 的使用方法:

<!--对静态资源文件的访问-->
<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/>

<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 是匹配 "/**" 的,所以一定会匹配上,再响应图片。

访问一个图片,还要走层层匹配。真不知性能如何?改天做一下压力测试,与Apache比一比。

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

转自:http://lzy83925.iteye.com/blog/1186609

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处理请求释放静态资源的三种方式(代码片段)

方式一在SpringMVC的配置文件中添加如下语句<mvc:default-servlet-handler/>说明:当SpringMVC前端控制器对静态资源进行拦截后,在通过处理器映射器找不到相关处理器的情况下该请求会被tomcat中web.xml中默认配置的Servlet拦截。方式二S... 查看详情

springmvc返回json数据的三种方式

SpringMVC返回json数据的三种方式:http://blog.csdn.net/shan9liang/article/details/42181345 上述第三种方法:可能会出现这个jar包没有的情况,引入即可,下面pom引入即可java.lang.NoClassDefFoundError:com/fasterxml/jackson/core/JsonProcessingExce 查看详情

springmvc返回json数据的三种方式

一.返回ModelAndView,其中包含map集/**返回ModelAndView类型的结果*检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式为{"valid",true})*/@RequestMapping(value="/checkNameExistsMethod2",produces="application/json;charset=UTF- 查看详情

synchronized关键字最主要的三种使用方式

...加锁,进入同步代码前要获得当前对象实例的锁修饰静态方法:也就是给当前类加锁,会作用于类的所有对象实例,因为静态成员不属于任何一个实例对象,是类成员(static表明这是该类的一个静态资源,... 查看详情

网络运维——访问共享的三种方式

访问共享的三种方式1.通过网络访问共享2.通过UNC路径访问共享3.通过映射网络驱动器共享准备条件:两个处在同一网络的计算机,IP分别为192.168.1.1和192.168.1.2。操作步骤:通过网络访问共享1.在计算机A的D盘创建一个文件夹MP42.右... 查看详情

访问交换机的三种方式

  对于一般的交换机,我们买回来后直接就可以使用了,但如果你想要划分虚网、关闭某个端口什么的,这时你就需要对其进行一些配置工作了。要配置就得登陆,下面就给大家详细介绍一下常见的三种登陆方式:通过Con... 查看详情

反射:获取class对象的三种方式(代码片段)

...etClass();*2任何数据类型(包括基本数据类型)都有一个“静态”的class属性*3通过Class类的静态方法:forName(StringclassName)(常用)**/publicclassFanshepublicstaticvoidm 查看详情

action访问servletapi的三种方式

一、前言Struts是一种基于MVC设计模式的web应用框架,主要担任C的角色,用于分离页面显示和业务逻辑处理,那其实在我们学习jsp的时候学过一个具有类似功能的东西——servlet。其实Struts本质上相当于servlet,可以理解Struts是对ser... 查看详情

springboot静态获取bean的三种方式,你学会了吗?

点击关注公众号,实用技术文章及时了解来源:blog.csdn.net/showchi/article/details/97005720注意:调用者要被spring管理目录方式一 注解@PostConstruct方式二 启动类ApplicationContext方式三手动注入ApplicationContext方式一 注解@... 查看详情

django-获取表单数据的三种方式

1、queryset对象2、字典3、queryset元组    备注:对象通过”对象.列名"方式访问,元组通过“对象.索引”方式访问。  查看详情

nat的三种方式

NAT的三种方式:一、端口NATacces-list1permitIP/Maskipnatinsidesourcelist“number” interfacefastethernetoverload 二、静态NATipnatinsidesourecestaticIP 三、动态NAT—以地址池的方式来对于NAT映射access-list“number”permitIP/ 查看详情

servlet实现的三种方式

...rvlet的执行过程:*1.创建servlet对象(Tomcat执行)*2.第一次访问servlet时执行*init()方法该方法只执行一次*service()方法*3.之后每访问一次就执行一次service()方法*4.关闭服务时调用destroy()方法 查看详情

springmvc静态资源访问问题(代码片段)

刚开始使用springmvc,出现了各种意想不到的问题。今天遇到了一个:在springmvc下静态资源无法被前端访问到,出现这种问题的原因如下:在web.xml中配置springmvc的DispatcherServlet一般如下: <servlet> <servlet-na... 查看详情

springmvc(代码片段)

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

设计模式:单例模式的三种创建方式及其各自的优缺点

...訪问点。在Java中实现单例模式须要私有的构造器,一个静态方法和一个静态变量。确定在性能和资源上的限制,怎样选择适当的方案来实现单例,以解决多线程的问题。假设使用多个类载入器,可能导致单例失效产生多个实例... 查看详情

堆栈的三种实现方式

...传统的堆栈操作只有入栈push和出栈pop两种,没有单独的访问栈顶元素的操作,访问栈顶元素的唯一方式就是出栈(pop会把堆栈顶部的值移出堆栈并返回这个值)。这样的pop存在副作用。  所以,我们在这里实现提供push、pop、t... 查看详情

获取class对象的三种方法以及通过class对象获取某个类中变量,方法,访问成员(代码片段)

publicclassReflexAndClasspublicstaticvoidmain(String[]args)throwsException/***获取Class对象的三种方式*1Object——>getClass();*2任何数据类型(包括基本数据类型)都有一个静态的class属性*3通过Class类的静态方法:forName(StringclassName)(常用)***注意 查看详情