Spring MVC 静态资源的访问

二、分析Spring MVC拦截器导致静态资源访问失败(基于Xml配置) 前言 对于这个问题,我们准备了以下三种解决方案: 1、静态资源统一交由Servlet容器直接处理; 2、静态资源统一交由Spring MVC框架间接处理,再转交给Servlet容器处理; 3、静态资源统一交由Spring MVC框架直接处理; 从这3种解决方案中,处理静态资源的方式可以分为Servlet容器处理和spring MVC框架处理。在这里要说明的是,只要你的请求经过spring MVC框架的大门,如果不做额外的配置,就必然会跟拦截器扯上关系。 解决方案1:静态资源统一交由Servlet容器直接处理 阅读详情
问题描述: 
    我们在spring mvc框架中为了是URL更符合RESTful风格,通常在web.xml中会配置spring框架servlet 的 url 拦截为  "/"  ,也就是拦截所有资源的url请求,这样一来,所有的资源包括, js  | css |  图片  |  所有静态资源都将经过框架的servlet拦截。不应该是这样的。所以有了对应servlet的url拦截为“/”的时候,对静态资源访问不应该经过servlet拦截的问题处理。如果  servlet-mapping  的 url-pattern  为  “*.do”,就是只拦截有一定后缀的url,那么就不会有静态资源访问的问题了。 


一、spring mvc 下默认访问的三种方式 

1>.第一种   访问tomcat容器的默认页面 
Xml代码  收藏代码
  1. <welcome-file-list>   
  2.   <welcome-file>/index.html</welcome-file>   
  3. </welcome-file-list>  

这种方式通常用来访问我们的初始页面 
2>.第二种   spirng mvc 默认index controller 方式 
(如果在tomcat容器没有配置默认页面,怎spring mvc 会主动去寻找/index的controller,如果有则会调用,没有则会显示404页面) 
Java代码  收藏代码
  1. @RequestMapping(value="/index")  
  2. public ModelAndView index(HttpServletRequest request, HttpServletResponse response){  
  3.        return new ModelAndView("index");  
  4. }  

3>.第三种   spirng mvc 配置根节点访问“/”方式 
Java代码  收藏代码
  1. @RequestMapping(value="/")   
  2. public ModelAndView index(HttpServletRequest request,HttpServletResponse response){   
  3.          return new ModelAndView("index");   
  4. }  

或者 
Xml代码  收藏代码
  1. <mvc:view-controller path="/" view-name="home"/>  

This is a shortcut for defining a ParameterizableViewController that immediately forwards to a view when invoked. 

※ 三种方法优先级别是  1>3>2 

二、spring mvc 使用RESTFull 的url风格拦截所有资源请求时的静态资源的访问配置,避免被spring mvc框架的匹配,因为这是没有必要的,可恶的。 

※.如果spring mvc框架的servlet-mapping的url-pattern为 “/”  ,若我们没有处理静态资源,就会造成静态资源的访问出现  404 

解决方案: 
1>.激活web应用服务器(如Tomcat)的defaultServlet来处理静态文件 
Xml代码  收藏代码
  1. <servlet-mapping>  
  2.     <servlet-name>default</servlet-name>  
  3.     <url-pattern>*.jpg</url-pattern>  
  4. </servlet-mapping>  
  5. <servlet-mapping>  
  6.     <servlet-name>default</servlet-name>  
  7.     <url-pattern>*.js</url-pattern>  
  8. </servlet-mapping>  
  9. <servlet-mapping>  
  10.     <servlet-name>default</servlet-name>  
  11.     <url-pattern>*.css</url-pattern>  
  12. </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" 

2>.在spring3.0.4以后版本提供了  <mvc:resources /> 
Xml代码  收藏代码
  1. <mvc:resources mapping="/static/**" location="/static/" />  

/static/**映射到 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. 

3>.使用<mvc:default-servlet-handler/> 
Xml代码  收藏代码
  1. <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 是匹配"/**"的,所以一定会匹配上,再响应图片。 

※ 加载一个静态资源是却要经过框架servlet的层层pattern,不必要的性能开销。 
最后还是特别强调,像一开始说的,如果框架servlet的url-pattern是指定后缀的,如 “*.go” ,那么框架的url拦截就只会匹配后缀带 .go  的request,就不会有静态资源访问的问题了。
SpringMVC访问静态资源的三种方式小结 主要介绍了SpringMVC访问静态资源的三种方式小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 立即下载

相关推荐

UFS 3.1协议分析(第一至四章) -- UFS概述

Contents协议规范规范参考术语和定义简单概述通用特性接口特性功能特性 协议规范     UFS3.1协议规定了UFS电气接口和存储器件的特性以及系统架构。 特性:低功耗、高数据吞吐量、低电磁干扰、大容量存储器子系统效率的优化 电气接口:使用基于MIPI M-PHY的高级差分接口;M-PHY作为物理层,MIPI UniPro作为链路层,二者结合形成UFS接口的互联。 架构模型:参考 INCITS T10(SCSI) SAM 标准,命令协议基于 INCITS T1

Frank_sample的专栏 1万+

SpringMVC 部署后可以访问index.jsp 无法访问后端控制层

在练习SpringMVC时遇到一个问题,明明自己写的代码逻辑没有任何问题,而部署到服务器后发现可以访问index页面,但是没有办法访问后端

weixin_46179393的博客 797

【01】VisionMaster入门到精通——VisionMaster V4.0.0 试用版安装教程(安装试用补丁与试用授权)

本文详细介绍了海康VisionMaster 4.0.0试用版的安装步骤:首先从官网下载基础安装包、软加密试用版和示例程序(可选);安装时需按顺序完成主程序安装(选择软加密)、试用补丁安装和30天试用授权安装;最后提供了两种启动方式。文章还列出了试用版的7项功能限制,包括最多支持2个流程、2个全局相机等,并特别提醒试用版不维护、不提供补丁,建议用户转为正式版本。安装过程中若出现蓝屏需重启覆盖安装,授权失败时可参考指定解决方案。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 8960

在mvc里面,如果当前页面是默认路由,在地址栏不会显示全部地址,是怎么回事?

这里我路由的设置 这里地址栏上的显示,正常情况下,应该是:localhost:57611/Default/Index,结果,直接不显示,是什么原因?如果想让地址栏上显示出来,要怎么设置? 这里主要有个问题,就是在ajax调用,里面写url的时候,如果有"Default/Index"这部份地址,就可以正常调用接口,如果没有这部份,就不能正常调用,这个问题要怎么解决吗?或者说,url里的地址应该怎么填? ...

m0_52972500的博客 400

【MIMIC数据库教程】一、MIMIC-IV3.1表格与字段详解(一):Hosp和ICU模块表格整体介绍

MIMIC-IV 3.1 版本包含住院 (hosp) 和 重症监护 (ICU)提供全院电子病历数据,包括入院信息、实验室测量、微生物学、用药、账单等,共计22 张表。记录重症监护室数据,如静脉注射、呼吸机设置、生命体征等,共计9 张表。

BD_Design_cs的博客 3425

SAP传输请求全流程详解:从SE10创建到STMS跨环境部署(附常见错误排查)

本文详细解析了SAP传输请求的全流程,从SE10创建到STMS跨环境部署,并提供了常见错误排查方法。涵盖工作台请求、定制请求等类型,以及STMS传输原理和实战操作技巧,帮助用户高效管理SAP系统变更。

weixin_29214335的博客 147

SpringBoot项目启动后只能跳index页面 而跳其他页面就是404

springBoot项目启动后只能跳index页面 而跳其他页面就是404 检查是否把主程序入口 放到了Controllert同级的包下 ,如果放到同级包里面就会报错 为什么呢 让我们看一下@SpringBootApplication的源码 @SpringBootApplication 封装了以下的主要的注解 @EnableAutoConfiguration的作用就是 开启自动配置 扫描主配置类所在包以及其下面的后代包的所有注解 而如果位置放错误的话 所有的注解也就失效了 所以@RequestMapper

weixin_45851575的博客 1101

Unity3D Lua与C#的相互调用与性能剖析详解

在游戏开发中,经常会遇到Lua与C#之间的相互调用的情况。本文将详细介绍Unity3D中Lua与C#的相互调用的方式,并对其性能进行剖析。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!一、Lua与C#的相互调用方式Lua调用C#在Unity3D中,可以通过Lua调用C#的方式来实现Lua与C#的相互调用。具体步骤如下:(1)首先需要在Unity3D项目中导入Lua的相关库,例如tolua或者xlua。

weixin_49669470的博客 1215

关于springmvc 只能在index.jsp页面显示图片的处理办法jsp页面无法显示图片

首先,已经配置好了mvc对静态资源的处理 只有index,jsp可以显示图片 其他页面同样的代码则不显示 后来折腾了半天,发现 index是static的父目录的级别文件 可以向下访问 但是其他的jsp和static是同级 不能访问,所以,使用上下文路径 <img alt="logo" src="${pageContext.reque...

weixin_30663391的博客 365

2025华为OD机试真题最新题库 (B+C+D+E+2025A+2025B卷) + 在线OJ在线刷题使用(C++、Java、Python C语言 JS合集)(正在更新2025B卷,目前已收录710道)

2024年,华为目前已经启用D卷,目前D卷和C卷的题目一样一次订阅永久阅读,支持在线刷题,持续更新,有问题随时解答,本专栏题目数量已收录到484道。每篇文章的思路分析都非常详细,题目新增图解思路,问题解疑,多样例测试,超过百字的思路参考解析。

KJ.JK 11万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

设置SpringMVC默认首页启动

springMVC启动之后默认打开的首页是webapp/index.jsp。位置和页面名称都不能错,否则将报404错误。 这个页面是可以改动的,如果默认页面是webapp/test/list.jsp 方法1、如果是静态页面,并且不在WEB-INF目录,那么很简单,直接在web.xml里面添加欢迎页面即可: 方法2、如果是通过servlet或者controller转发的页面,那就得分如...

wqh0830的博客 7825

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring MVC 和 Spring Boot 是如何访问静态资源的?

Spring MVC 和 Spring Boot 在配置静态资源访问方面有所不同,Spring Boot 提供了更便捷的自动配置。在不使用Spring Boot自动配置的传统Spring MVC项目中,你需要显式配置静态资源处理器。Spring Boot 遵循“约定优于配置”的原则,对静态资源的访问提供了非常方便的自动配置。对于新项目,强烈建议使用Spring Boot,因为它极大地简化了包括静态资源在内的各种配置。如果你使用Java配置,你需要创建一个实现。文件,那么你可以通过。,那么它的资源可以通过。

专注于技术分享 1400

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring MVC详解、静态资源访问、拦截器

Spring MVC(Model-View-Controller)是Spring框架的一部分,是基于Servlet API构建的Web原始框架。用于开发基于Java的Web应用程序。它采用MVC设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。

White-Camellia 2063

Spring MVC访问不到静态资源的解决方法

访问不到的原因 web.xml中设置了前端控制器:DispatcherServlet,你的所有请求都会让其处理 <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.serv...

Mason97的博客 607

Spring MVC访问静态资源总出错?看这里,原理给你讲清楚

之前文章讲到Spring MVC的基础概念,基本开发流程,和如何在Spring MVC中传值和接受参数以及Spring MVC的跳转(重定向和转发) 之前文章链接 Spring MVC从0到1,推荐新手收藏(超详细) 这篇文章文章讲Spring MVC访问静态资源 文章目录静态资源如何解决静态资源无法访问的问题?解决方案一解决方案二解决方案三 静态资源 静态资源(内容不会改变的资源):HTML,js文件,css文件,图片文件等都是静态资源 或者换一句话说:在所有的客户访问同一页面时,获.

小白的程序猿 567

Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源

ViewResolver 接口,视图解析接口(ThymeleafViewResolver 实现了 ViewResolver 接口,InternalResourceViewResolver 也是实现了ViewResolver接口...),这个接口作用是将逻辑视图名称 转换为 物理视图名称,并且最终返回一个 view 接口对象,核心方法是:View resolveViewName(String viewName,Locale locale) throws Exception;

2501_92608043的博客 631

spring mvc 静态资源权限访问的设置

一.案例现象 1.controller层 /** * @author liujianfu * @description controller中业务方法的集合参数获取,要将集合参数封装到一个pojo中才可以 * 参数属性名与请求参数名称一致,参数值会自动映射匹配 * @date 2021/1/10 22:14 * @param * @return */ @RequestMapping("/bike6") .

健康平安的活着的专栏 1276

spring mvc静态资源访问的配置

  如果我们使用spring mvc来做web访问请求的控制转发,那么默认所有访问都将被DispatcherServlet独裁统治。比如我现在想访问的欢迎页index.html根本无需任何业务逻辑处理,仅仅就展示一句话而已,但spring mvc还是会把访问index.html这件事交给DispatcherServlet处理,而DispatcherServlet会从HandlerMapping去...

wuxun1997的专栏 112

spring mvc访问静态资源的三种方式

如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。  目的:可以正常访问静态文件,不要找不到静态文件报404。   方案一:激活Tomcat的defaultServlet来处理静态文件     default    

scalad 586

Spring Mvc Web 配置拦截规则与访问静态资源 (三)

Spring Mvc Web 配置拦截规则与访问静态资源 (三) 拦截规则配置 1. *.do Processes application requests --> servlet> servlet-name>appServletservlet-name> servlet-class>org.springframewo

qq_29349281的博客 1318

Spring MVC访问静态资源的几种方法

如果DispatcherServlet拦截“/”,即拦截了所有的请求,对*.js,*.jpg等静态资源的访问也就被拦截了。但如果DispatcherServlet只拦截*.do这样的URL,就不存在访问不到静态资源的问题。 通过下面几种方式可以正常访问静态文件,不要找不到静态文件报404。 方法一:利用Tomcat的defaultServlet来处理静态文件 在web.xml里添加如下配置 ...

爱你の大表哥的博客 964

spring mvc 访问静态资源的方式

方法一 在web.xml中配置: default *.js default *.css 方法二 方法三

ey 361

Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源...

1. Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源 @目录1. Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源1.1 Spring MVC视图支持可配置1.2 Spring MVC支持的常见视图1.3 实现视图机制的核心接口1.4 实现视图机制的原理描述1.5 逻辑视图名到物理视图名的转...

weixin_40597872的博客 392

17 SSM框架-Spring mvc对于静态资源的访问(4)

17 SSM框架-Spring mvc对于静态资源的访问(4)

qq_44925149的博客 285
上一篇: 初识Mybatis-Spring
下一篇: spring security4 security="none"小讲
Chenctrl
博客等级 码龄11年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值