静态资源到处都是坑!明白原理才能绕过这些坑!

web.xml配置servlet中四种路径的区别

在web.xml文件的配置中,四种路径编写方式优先级如下图:

其中b和d都能接收所有请求,仅仅是在优先级上有区别。

d是优先级最低的,所以如果一个路径有”人”要就不会执行到d,tomcat服务器(无论什么服务器)有一个默认的请求处理方案:在tomcat服务器的配置文件: tomcat8\conf\web.xml中有一个默认的web配置文件,其中配置了jsp和default。

都配置了<load-on-startup>,所以这两个默认请求处理会在tomcat启动时进行加载。

从图中可以看出,jsp配置的url-pattern为*.jsp和*.jspx,优先级高于/的优先级,所以当请求jsp页面时,会由类JspServlet进行处理。

default配置为在请求路径匹配完其他所有Servlet还是没有匹配到的情况下,请求会被发到default,由DefaultServlet进行处理,一般请求的静态资源,无效路径等等都会通过DefaultServlet进行处理。

而在配置springmvc框架时,一般在web.xml中将DispatcherServlet映射路径配置成/

这样配置会覆盖掉tomcat配置的默认的default,而,DispatcherServlet没有处理静态资源的能力,所以会报错或者需要在springmvc中进行关于静态资源的配置。

什么是静态资源?

css、js、图片、html等都是静态资源

放行静态资源

不使用springmvc框架分析

不使用springmvc框架,这些静态资源请求都会由tomcat的默认的default进行处理。

使用了springmvc框架分析

如果配置的DispatcherServlet的映射路径不为/时,对静态资源的请求最终会由tomcat的默认配置来处理,所以不影响静态资源的正常访问。

如果配置的DispatcherServlet的映射路径为/时,会覆盖掉tomcat的默认的default配置,所以需要在springmvc文件中进行配置,对静态资源进行放行。

放行静态资源的三种方式:

方式一:最简单(推荐)

spring mvc配置文件中加入以下内容:

在springmvc文件中配置上<mvc:default-servlet-handler/>,发出静态资源请求后,请求传到DispatcherServlet,DispatcherServlet调用RequestMappingHandlerMapping进行映射匹配,匹配不成功,DispatcherServlet最终会将请求转交给tomcat默认default进行处理。

方式二:更加灵活

在springmvc配置文件中配置

<mvc:resources mapping=”/css/**” location=”/css/”/>

其中,*代表一级目录,**代表多级目录。

方式三:修改DispatcherServlet的映射规则

*.do的优先级高于/,不影响tomcat默认配置的default,所以DispatcherServlet处理不了的会交给tomcat默认default进行处理。

明确:在jsp或html页面中如果有<link> <script><img>,浏览器都会自动发送请求。

其他请求不到静态资源的可能原因

一.jsp或者html界面引用js文件错误

这是一个隐藏很深的坑,编写script时没有写完整,使用360浏览器(谷歌内核)测试还不报错!!

正确编写方式:

二.在WEB-INF目录下的静态资源只有服务器能访问,客户端无法直接访问

众所周知,WEB-INF是被保护的目录,不允许客户端进行访问,这里就涉及两个概念:

请求转发重定向

请求转发会间接的由服务器去访问WEB-INF,所以可以访问,

重定向请求静态资源属于客户端进行请求,所以不能访问静态资源.

SpringMVC_放行静态资源的更多相关文章

  1. REST风格下如何放行静态资源

    在配置DispatcherServlet(前端控制器)时,如果把拦截路径配置成rest风格(即斜杠/),则会将静态资源也一并拦截(比如.css .js ,jpg)为了避免这个情况,可以把拦截路径设置成 ...

  2. javaweb项目静态资源被拦截的解决方法

    <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/*< ...

  3. Spring Boot 静态资源能加载css 不能加载js

    Spring Boot 配置拦截器的时候默认 是放行 静态资源 , 也就是说不需要进行配置 registry.addResourceHandler("/**") .addResou ...

  4. SpringMVC拦截静态资源的解决方法

    本文中的各软件版本简要信息: IDE:Myeclise17 JDK:1.8.0_111 spring:5.1.8 springMVC:5.1.8 mybatis:3.2.2 Tomcat:9.0 在使 ...

  5. SprignBoot是如何访问工程目录下的静态资源?

    ​ 目录 1.牛刀小试 1.1 图片静态资源的访问 1.2 为静态资源添加访问前缀 1.3  WelCome Page 的奇妙跳转 2.那么,SpringBoot是如何做到的呢? ​​​​​​​ 1. ...

  6. 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据

    1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...

  7. springmvc中关于静态资源的放行

    参考:http://blog.csdn.net/fujiakai/article/details/52504525 方法1. 修改web.xml文件,增加对静态资源的url映射,要加在org.spri ...

  8. SpringBoot之静态资源放行

    为了提高开发效率,编写对应的代码生成器.代码生成器主要有两个方面,一个是在线Web,另外一个是运行某个类. 使用的技术是SpringBoot+MyBatis-Plus+MySQL+JDK8. 在编写在 ...

  9. 如何在自定义Filter中优雅的实现静态资源放行

            在javaweb开发中,过滤器Filter比较常用于类似登录的拦截等场景.但是,当过滤器的配置不当时就会把所有的请求都拦截,静态资源也会被拦截掉,导致静态页面加载不出来. 一般的解决方 ...

随机推荐

  1. 视图:setContentView()

    1.setContentView的作用是将View加载到根view之上,这样当显示view时,先显示根view,然后在显示子view,以此类推,最终将所有view显示出来. 2.setContentV ...

  2. 【BZOJ1098】办公楼biu(补图,bfs,链表)

    题意:有n个点m条边,要求将点尽可能多的分成若干个部分,使得若两个点不在同一个部分则他们之间必定有边 n<=1e5,m<=2e6 思路:From https://blog.csdn.net ...

  3. springboot(二).springboot整合logback用于日志输出

    springboot整合logback用于日志输出 我们项目的基本框架已经完成,http请求已经可以访问,现在给我们的框架添加日志记录的功能并能将每天的记录记录到文件中去 在这里,我们使用logbac ...

  4. [BZOJ3033]:太鼓达人(爆搜)

    题目传送门 题目描述 七夕祭上,Vani牵着cl的手,在明亮的灯光和欢乐的气氛中愉快地穿行.这时,在前面忽然出现了一台太鼓达人机台,而在机台前坐着的是刚刚被精英队伍成员XLk.Poet_shy和lyd ...

  5. Java 实现日期 Date 的赋值

    关键的语句也就三句话: (1) SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); (2) Date ...

  6. java执行命令行,以及解决卡死问题

    java可以执行本地命令行,但是有一个坑,命令执行后,已经执行完毕,但是卡死不返回,这是因为: 命令会返回两个输出流,正确的返回流,和错误的返回流 一般程序的做法是先循环读正确的返回流,再读错误的返回 ...

  7. 省市区,级联查询,ajaxgird,ajaxfrom

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. ls -i

    ls的不同选项有不同的含义: -l 是用long的长格式显示 条目信息 -a 显示所有的文件, 包括隐藏文件 -i: 是显示inode, 主要是用来查看硬链接的

  9. 目标双站定位仿真C++代码

    point-position2 初步完善版. 不再使用eigen库,行列式直接计算得出结果.判断共面异面分别处理. 先提取双站获得图像的匹配特征点,由双站位置信息解析目标位置. // point-po ...

  10. Vue知识整理11:列表渲染(v-for来实现)

    简单的v-for结构显示迭代数据 通过value别名 显示下面各个属性值 通过index 和key获取同类数组索引,或者不同属性的key属性名