web项目中web.xml配置

在一个使用springmvc的web项目中,必然在web.xml中要配置前端控制器DispatcherServlet

<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern> <!--注意这里-->
</servlet-mapping>

这里的url-pattern有两种配置方式

  1. .扩展名,比如.do,古老的方式,不会导致静态资源文件被拦截的问题,但 是不支持RESTful编码风格
  2. /,支持RESTful风格,但是会导致静态资源文件被拦截

还有一种错误的配置方式

/*,错误的方式,可以请求到Controller方法,但是跳转到JSP时会被拦截,JSP不能正常显示 XX

一般来说,企业中更多的是采用第二种配置方式,但这导致了静态资源被拦截


静态资源为什么会被拦截??

我们知道,我们的web项目最终要部署到服务器上,以我们熟悉的Tomcat服务器为例进行说明。

当我们将web应用部署到tomcat服务器上,服务器是先加载全局的web.xml,即"D:\work_folder\java_studying\java_tools\apache-tomcat-9.0.12\conf\web.xml"这是tomcat自带的web.xml文件,然后才会加载我们自己web项目中的web.xml,当我们加url-pattern配置成 <url-pattern>/</url-pattern>

会覆盖掉全局web.xml中对于静态资源的处理,具体可以参考全局web.xml中:

    <servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

这就是默认的servlet,发现与我们配置的url-pattern一样了,导致静态资源也被我们自定义的dispatcherServlet所拦截,那这个类就会去找controller里面的映射了,比如我们访问http://localhost:8080/springmvc/img.png,显然是Controller里面是没有这个映射路径的。


如何处理静态资源被拦截

有三种方式:

  • 方式一:手动排除法

在我们的web.xml添加如下配置

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>

其他地方保持不变,这个粒度显然是比<url-pattern>/</url-pattern>更小的,它会将*.jpg文件交给servlet-name为default的servlet去处理该请求,默认的servlet为什么就没有拦截了呢?因为它是直接访问。

当然不好的地方是,如果你需要拦截*.html又得配一个,所以比较麻烦。一般不采用

  • 方式二:在springmvc的配置文件中加入<mvc:default-servlet-handler/>
<mvc:default-servlet-handler/>
  • 方式三:在springmvc配置文件中手动指定静态资源路径
    <!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/img/" mapping="/img/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/plugins/" mapping="/plugins/**" />

,这种方式更灵活,功能更丰富,也是可以的


注意 springmvc配置文件中这个配置<mvc:annotation-driven />推荐每次都加

以上就上springmvc中处理静态资源的三种方式

SpringMVC中静态资源的处理的更多相关文章

  1. 完美解决SpringMVC中静态资源无法找到(No mapping found for HTTP request with URI)问题

    https://blog.csdn.net/kingmax54212008/article/details/79330308 今天遇到一个比较新奇的问题,但是也应该是使用spring MVC框架时由于 ...

  2. SpringMVC常用配置-添加静态资源处理器-针对SpringMVC中静态资源无法访问的问题

  3. SpringMVC访问静态资源

    SpringMVC访问静态资源 在SpringMVC中常用的就是Controller与View.但是我们常常会需要访问静态资源,如html,js,css,image等. 默认的访问的URL都会被Dis ...

  4. 【SpringMVC】静态资源访问的问题

    在项目中经常会用到一些静态的资源,而一般我们在配置SpringMVC时会让SpringMVC接管所有的请求(包括静态资源的访问), 那么我们怎样才能最简单的来配置静态资源的访问呢? 一,在web.xm ...

  5. SpringMVC拦截静态资源的处理办法

    SpringMVC拦截静态资源导致  JS  CSS  无法加载  可以在配置文件中加入以下代码 <mvc:resources location="/statices/" m ...

  6. IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404

    IntelliJ IDEA+SpringBoot中静态资源访问路径陷阱:静态资源访问404 .embody{ padding:10px 10px 10px; margin:0 -20px; borde ...

  7. $ is not defined与SpringMVC访问静态资源

    编写前台Jquery代码时,遇到谷歌浏览器报错:Uncaught ReferenceError: $ is not defined 意味着Jquery库并没有导入到页面.这是有几种情况需要考虑: 1. ...

  8. IDEA中静态资源无法找到的原因

    IDEA中静态资源无法找到, 原因1:同名的文件但是在不同的包里. 原因2:IDEA重启,web清空缓存. 原因3:错误的文件及路径. 原因4:其他原因排除后,可使用绝招重启试试.

  9. springmvc之静态资源访问不到 -记一次惨痛的经历

    springmvc之静态资源访问不到 -记一次惨痛的经历 问题描述:项目正常启动,可以访问页面,但是无法找到静态资源文件,如css,js等文件资源. 控制台: $ 未定义 页面: GET http:/ ...

随机推荐

  1. php过滤敏感词

    <?php /**  * 敏感词过滤工具类  * 使用方法  * echo FilterTools::filterContent("你妈的我操一色狼杂种二山食物"," ...

  2. page内置对象

  3. Codeforces Round #605 (Div. 3) C. Yet Another Broken Keyboard

    链接: https://codeforces.com/contest/1272/problem/C 题意: Recently, Norge found a string s=s1s2-sn consi ...

  4. LeetCode 1102. Path With Maximum Minimum Value

    原题链接在这里:https://leetcode.com/problems/path-with-maximum-minimum-value/ 题目: Given a matrix of integer ...

  5. Codeforces Round #493 (Div. 2) 【A,B,C】

    简单思维题 #include<bits/stdc++.h> using namespace std; #define int long long #define inf 0x3f3f3f3 ...

  6. 【CPLEX教程03】java调用cplex求解一个TSP问题模型

    00 前言 前面我们已经搭建好cplex的java环境了,相信大家已经跃跃欲试,想动手写几个模型了.今天就来拿一个TSP的问题模型来给大家演示一下吧~ CPLEX系列教程可以关注我们的公众号哦!获取更 ...

  7. 解决IE报错[vue router]Failed to resolve async component default:strict 模式下不允许分配到只读属性

    之前遇到过一个奇怪的问题,在其他浏览器下一切正常,但在万恶的IE下,却一直不行. 具体问题场景就是:比如orderDetail页面出现问题,那么只要是路由跳转的,点第1次无法跳转,必须得点第2次才可以 ...

  8. ARC093F Dark Horse 【容斥,状压dp】

    题目链接:gfoj 神仙计数题. 可以转化为求\(p_1,p_2,\ldots,p_{2^n}\),使得\(b_i=\min\limits_{j=2^i+1}^{2^{i+1}}p_j\)都不属于\( ...

  9. EasyExcel写入百万级数据到多sheet---非注解方式

    EasyExcel是什么? 快速.简单避免OOM的java处理Excel工具 一.项目需求 从mongo库中查询数据,导出到excel文件中.但是动态导出的excel有多少列.列名是什么.有多少she ...

  10. java web开发及Servlet常用的代码

    日志 1.使用门面模式的slfj,并结合log4j,logback. 2.info.debug.error,要写清楚. 3.使用占位符,如下: log.info("用户id为: {} &qu ...