08【SpringMVC的放行规则】

news2024/12/22 14:04:40

文章目录

  • 二、SpringMVC的放行规则
    • 2.1 SpringMVC提供的拦截规则
    • 2.2 缺省Servlet放行
    • 2.3 resources放行
    • 2.4 Handler放行
    • 2.5 放行规则小结


二、SpringMVC的放行规则

2.1 SpringMVC提供的拦截规则

  • *.form:代表以*.form结尾的后缀请求都会进入springmvc管
  • /:代表除了JSP以外拦截所有,html、css、js等静态web资源也会拦截
  • /*:拦截所有请求

2.2 缺省Servlet放行

Tomcat提供的默认servlet(DefaultServlet),处理静态资源的(html/css/js),此Servlet在tomcat/conf/web.xml中有配置

在这里插入图片描述

在这里插入图片描述

配置DefaultServlet需要引入依赖:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-catalina</artifactId>
    <version>8.5.41</version>
    <!--此jar包在tomcat中已经有了,但是如果不引入此依赖项目则会报错,因此依赖范围provided就行-->
    <scope>provided</scope>
</dependency>

回顾Maven依赖范围:

  • compile:编译时存在,测试时存在,运行时存在,会打入war包;(普通jar包)
  • provided:编译时存在,测试时存在,运行时不存在,不会打入war包;(servlet-api)
  • runtime:编译时不存在,测试时存在,运行时存在,会打入war包(mysql驱动)
  • Test:编译时不存在,测试时存在,运行时不存在,不会打入war包(Junit)
  • system:编译时存在,测试时存在,运行时存在,不会打入war包(仅限于本地环境)

在web.xml中配置:

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dispatcher-servlet.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--拦截除了JSP之外的所有请求-->
    <url-pattern>/</url-pattern>
</servlet-mapping>


<!--代表以html的任何请求进入Tomcat默认的Servlet处理(放行)-->
<servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
</servlet-mapping>

缺省servlet放行原理是:如果是配置的后缀请求直接进入缺省servlet,而不是进入SpringMVC进行处理(不会经过SpringVMC)

Tips:配置缺省servlet放行时,SpringMVC的拦截规则不能为/*,因为缺省Servlet不能放行JSP请求,如果SpringMVC拦截规则为/*,然后缺省Servlet又不能放行,那么访问JSP时,会出现404;

2.3 resources放行

web.xml:

<servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dispatcher-servlet.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <!--拦截除了JSP之外的所有请求-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

在SpringMVC配置文件中配置:

<!--
    resources:配置springmvc放行
        mapping:映射地址
        location:具体目录
        /js/*代表js下面的所有资源不拦截
        /js/** 代表js下所有的资源不拦截包括子孙包
-->
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/imgs/**" location="/imgs/" />

<mvc:resources />由Spring MVC框架自己按配置的规则处理静态资源,并添加一些有用的附加值功能。


**注意:JSP页面不属于静态资源!** 如果是常见的浏览器能解析的格式,直接按照协议返回,如果不是浏览器能直接解析的会返回下载头导致下载该jsp页面!
  • 修改web.xml:
<!--拦截所有请求(包括JSP)-->
<url-pattern>/*</url-pattern>
  • 修改SpringMVC.xml:
<mvc:resources mapping="/jsp/**" location="/jsp/" />

访问:http://localhost:8080/jsp/demo01.jsp

在这里插入图片描述

2.4 Handler放行

在SpringMVC配置文件中添加:

<mvc:default-servlet-handler />

SpringMVC会在Spring MVC上下文中定义一个DefaultServletHttpRequestHandler;它会像一个检查员,对进入DispatcherServlet的URL进行筛查,如果发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,如果不是静态资源的请求,才由DispatcherServlet继续处理。

这种方式同样只能放行静态资源,JSP不属于静态资源;我们将web.xml中的拦截规则改为如下:

<!--拦截所有请求(包括JSP)-->
<url-pattern>/*</url-pattern>

访问:http://localhost:8080/jsp/demo01.jsp

在这里插入图片描述

一般Web应用服务器默认的Servlet名称是"default",因此DefaultServletHttpRequestHandler可以找到它。如果你所有的Web应用服务器的默认Servlet名称不是"default",则需要通过default-servlet-name属性显示指定:

<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />

2.5 放行规则小结

  • 1)缺省Servlet放行:请求没有进入springmvc,而是直接进入缺省servlet进行处理放行
  • 2)resource放行:实质上请求是进入了springmvc然后由springmvc自己处理资源,达到放行效果
  • 3)default-servlet-handler放行:请求进入springmvc然后对其进行筛选,发现是个"静态"资源就交给缺省servlet去处理,但是缺省servlet只会处理静态资源,如果是jsp会特殊处理(下载、无法解析等)!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2.0开发之——Vue基础用法-axios(29)

一 概述 axios-使用axios发起基本的Get请求axios-结合async和await调用axiosaxios-使用解构赋值axios-基于axios.get和axios.post发起请求 二 axios-使用axios发起基本的Get请求 2.1 axios介绍 axios(发音&#xff1a;艾克C奥斯)是前端圈最火的、专注于数据库请求的库 在后面…

Linux---awk

Linux三剑客之一awk 简单介绍一下awk的用法 再谈三剑客 grep awk sed 三个并称Linux的三剑客 awk:适合编辑,处理匹配到的文本内容 grep:擅长单纯的查找或匹配文本内容 链接: Linux—grep sed:适合格式化文本内容&#xff0c;对文本进行复杂处理 链接: Linux—sed 文章目录Lin…

如何选择合适的香港物理服务器?

所有企业在部署自己的网络业务时&#xff0c;要有目标&#xff0c;正确的技术&#xff0c;尤其是服务器&#xff0c;可以帮助他们实现这些目标。比如&#xff0c;国内站长开展大型外贸业务又想要国内访问速度快&#xff0c;可以选择合适的香港物理服务器来解决这个问题。那么&a…

天舟系列货运飞船介绍

天舟系列货运飞船是由中国空间技术研究院研制的一款货运飞船&#xff0c;其主要任务是在我国空间站建造及运营期间进行物资运输补给。 天舟系列货运飞船主要用于对中国空间站在轨运行期间&#xff0c;。天舟系列货运飞船包括天舟一号、天舟二号、天舟三号、天舟四号、天舟五号等…

Chatbot(五)

一、走进聊天机器人 目标 知道常见的bot的分类知道企业中常见的流程和方法 1.1 目前企业中的常见的聊天机器人 QA BOT (问答机器人) : 回答问题 1.代表:智能名服 2.比如: 提问和回答TASK BOT(任务机器人): 助人们做事情 1.代表: siri 2.比如:设五明天早上9点的闹钟CHAT BOT…

虹科方案|HK-ATTO 和西部数据为性能要求苛刻的应用构建存储解决方案

解决方案特点 科学、医疗、工程和其他高性能环境需要同样高性能的存储。该解决方案必须存储大量数据。它还必须提供突破当今固态驱动器设备极限的速度。同时&#xff0c;组织需要一个软件定义的组件&#xff0c;使他们能够构建满足其技术和预算要求的完整存储基础架构。 昂贵的…

[附源码]Python计算机毕业设计Django动漫电影网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

初学者学习JS很吃力怎么办?到底该如何学习JS?

前言 觉得吃力是很正常的&#xff0c;首先这证明你在某些知识点上没有理解透彻&#xff0c;JS挺多的知识点点其实是比较抽象的&#xff0c;比如闭包、原型和原型链等&#xff0c;其次便是不会变通运用&#xff0c;这主要是敲代码熟练度的问题&#xff0c;所以我针对你这种情况…

PCA主成分分析法浅理解

ML课刚学&#xff0c;发现更多是对线性代数的回顾。更进一步说&#xff0c;统计机器学习方法就是以高数、线代和概率论为基石构筑的“一栋大厦”。下面主要沿着老师ppt的思路讲讲对PCA方法的个人理解。 这里u1Tx(i)u_1^Tx^{(i)}u1T​x(i)是x(i)x^{(i)}x(i)在单位方向向量u1u_1u…

webpack常用配置(二)之拆分配置

在《webpack常用配置&#xff08;一&#xff09;》里面是把关于webpack的配置放在了根目录下的webpack.config.js中&#xff0c;但是我们知道在开发环境下和在真正打包上线运行的环境是不一样的&#xff0c;所有我们需要把对webpack的配置拆分成 1.通用配置&#xff1a;webpack…

8.跨域请求

目录 1 一些概念 1.1 同源 1.2 同源策略 1.3 跨域 2 JSONP 2.1 原理 2.2 jQuery中的JSONP 2.2.1 默认情况 2.2.2 自定义键与函数名称 2.2.3 淘宝搜索建议请求 1 一些概念 1.1 同源 两个页面的 协议&#xff0c;域名与端口都相同&#xff0c;则两个页面…

[附源码]Python计算机毕业设计Django高校实验室仪器设备管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

大数据(9h)FlinkSQL双流JOIN

文章目录1、环境2、Temporal Joins2.1、基于处理时间&#xff08;重点&#xff09;2.1.1、设置状态保留时间2.2、基于事件时间3、Lookup Join&#xff08;重点&#xff09;4、Interval Joins&#xff08;基于间隔JOIN&#xff09;重点是Lookup Join和Processing Time Temporal …

【Ubuntu】修改ubuntu和windows双系统启动顺序

目录一、问题描述二、背景知识1. GRUB是什么2. GRUB配置文件3./etc/default/grub 主配置文件二、问题分析三、解决方案1. 修改grub主配置文件2. 更新grub配置文件一、问题描述 UbuntuWindows双系统默认使用GRUB作为引导管理器&#xff0c;而且通常默认启动Ubuntu。这样过于死板…

用Python分析了30000+《独行月球》影评数据,看看观众们怎么说~

文章目录&#x1f3f3;️‍&#x1f308; 1. 导入模块&#x1f3f3;️‍&#x1f308; 2. Pandas数据处理2.1 读取数据2.2 数据大小2.3 查看索引、数据类型和内存信息&#x1f3f3;️‍&#x1f308; 3. Pyecharts数据可视化3.1 《独行月球》评分分布-13.2 《独行月球》评分分布…

TypeScript学习笔记

TypeScript学习笔记 TypeScript 与 JavaScript 的区别 TypeScript 是 JavaScript 的超集&#xff0c;扩展了 JavaScript 的语法。TypeScript 可处理已有的 JavaScript 代码&#xff0c;并只对其中的 TypeScript 代码进行编译。TypeScript 文件的后缀名 .ts &#xff08;.ts&am…

Milvus的索引方式

索引方式&#xff1a; FLAT&#xff1a;准确率高&#xff0c; 适合数据量小 暴力求解相似。 IVF-FLAT&#xff1a;量化操作&#xff0c; 准确率和速度的平衡 IVF:inverted file 先对空间的点进行聚类&#xff0c;查询时先比较聚类中心距离&#xff0c;再找到最近的N个点。 IV…

redis5.0集群搭建(两台服务器)

文章目录1. 前言2. 配置两台机器内网互联3. redis安装4. redis集群5.0之前和5.0之后版本的区别4.1 redis5.0之前的版本创建集群4.2 redis5.0之后的版本创建集群4.3 redis5.0之前的版本需要依赖ruby环境5. redis5.0集群搭建5.1 创建redis-cluster目录5.2 将之前的redis.conf拷贝…

windbg使用教程

下载 https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools 安装&#xff0c;打开exe 我选择了下载 打开X64 Debuggers And Tools-x64_en-us.msi 要安装对应系统位数 不然打不开 安装完成后没有反应。还以为我弄错了呢&#…

【学习笔记】深度学习入门:基于Python的理论与实现-神经网络的学习

CONTENTS四、神经网络的学习4.1 从数据中学习4.2 Loss function4.3 数值微分4.4 梯度4.5 学习算法的实现四、神经网络的学习 4.1 从数据中学习 神经网络的特征就是可以从数据中学习。所谓“从数据中学习”&#xff0c;是指可以由数据自动决定权重参数的值。利用特征量和机器学…