当前位置: 首页 > news >正文

SpringMVC <url-pattern/>解读

1. < url-pattern/>的值

(1).使用拓展名的方式,语法*.xxx,xxx是自定义的拓展名,常用的方式*.do,*.action,不能使用*.jsp.
(2).使用斜杠 "/"当项目中使用了 / ,他会替代tomcat中的default。导致所有的静态资源都给DispatcherServlet处理,默认情况下DispatcherServlet没有处理静态资源的能力,没有控制器对象能处理静态资源的访问,所以静态资源(html,js,图片,css) 都是404。动态资源可以正常访问。tomcat中的default这个servlet的作用:1.处理静态资源2.处理未映射到其他servlet的请求

2. 测试两种写法

2.1 测试*.xxx

在webapp目录下创建images文件夹,并且添加图片

在这里插入图片描述

web.xml文件中DispatcharServlet配置如下
	<servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
index.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>index</title>
</head>
<body>
<img src="images/th.jpg" alt="我是spring的logo"/>
</body>
</html>
启动服务器

在这里插入图片描述

可以看出,可以正常访问,< url-pattern>*.do< /url-pattern>,会去找 *.do对应的servlet,找不到的时候会使用tomcat的default(默认 servlet,
该servlet有能力处理静态资源,所以图片会正常显示。

2.2 测试 /

将*.do 改为/,再次启动服务器

在这里插入图片描述

图片访问失败
原因解释:修改为/之后,它会把匹配所有请求都当做是对控制器的访问,去掉后缀进行匹配。例如你访问/main.css会变成/main,这也是造成你引入的.css,
.js等静态资源无法访问的原因,因为他们都被当做控制器的路径了。

2.3 解决问题

<url-pattern/>的值并不是说写为/后,静态资源就无法访问了。经过一些配置后,该问
题也是可以解决的。

2.3.1 使用< mvc:default-servlet-handler/>

声 明 了 <mvc:default-servlet-handler /> 后 , springmvc 框 架 会 在 容 器 中 创 建
DefaultServletHttpRequestHandler 处理器对象。它会像一个检查员,对进入 DispatcherServlet
的 URL 进行筛查,如果发现是静态资源的请求,就将该请求转由 Web 应用服务器默认的
Servlet 处理。一般的服务器都有默认的 Servlet。只需要在 springmvc.xml 中添加<mvc:default-servlet-handler/>标签即可。声 明 了 <mvc:default-servlet-handler /> 后 , springmvc 框 架 会 在 容 器 中 创 建
DefaultServletHttpRequestHandler 处理器对象。它会像一个检查员,对进入 DispatcherServlet
的 URL 进行筛查,如果发现是静态资源的请求,就将该请求转由 Web 应用服务器默认的
Servlet 处理。一般的服务器都有默认的 Servlet。

2.3.2 使用< mvc:resources/>(常用)

第一种解决方案,依赖服务器,第二种解决方案则不依赖服务器,加入该标签之后,框架会创建ResourceHttpRequestHandler这个对象,
并且添加了<mvc:resources/>标签,专门用于解决静态资源无法访问问题。需要在 springmvc 配置文件中添加如下形式的配置:<mvc:resources mapping="/images/**" location="/images/"/>location 表示静态资源所在目录。当然,目录不要使用/WEB-INF/及其子目录。mapping 表 示 对 该 资 源 的 请 求 ( 以 /images/ 开 始 的 请 求 , 如 /image/beauty.jpg , /images/car.png 等)。注意,后面是两个星号**。 小技巧:有时候静态资源有很多种,比如html,js,图片,这个时候我们需要写几个<mvc:resources>标签,我们也可以将所有的静态资源文件夹放入一个大的文件夹(比如static文件夹),这样我们在写标签的时候就可以写成<mvc:resources mapping="/static/**" location="/static/"/>。问题:< mvc:resources/>和@RequestMapping存在一定冲突,需要加入< mvc:annotation-driven/>来解决冲突。

相关文章:

SpringMVC <url-pattern/>解读

1. < url-pattern/>的值 (1).使用拓展名的方式&#xff0c;语法*.xxx&#xff0c;xxx是自定义的拓展名&#xff0c;常用的方式*.do&#xff0c;*.action,不能使用*.jsp. (2).使用斜杠 "/"当项目中使用了 / &#xff0c;他会替代tomcat中的default。导致所有的…...

大学毕业设计的益处:培养实践能力、深入专业领域、展示自信与建立联系

大学生做毕业设计有许多好处&#xff0c;以下是一些主要的原因和好处&#xff1a; 实践应用能力&#xff1a;毕业设计通常需要学生将所学的知识和技能应用到一个具体的项目中&#xff0c;这有助于他们将理论知识转化为实际应用能力。 独立思考和解决问题&#xff1a;毕业设计要…...

ChatGPT:概述Vue.js中data函数初始化和created钩子函数调用的顺序和问题解决方法

ChatGPT&#xff1a;概述Vue.js中data函数初始化和created钩子函数调用的顺序和问题解决方法 我将输入一段Vue代码&#xff0c;请你记住&#xff1a; created() {console.log(this.queryInfo)this.getClueList();},data() {return {allQueryInfo: {str: ,//线索标题查询信息},/…...

SpringBoot【基础篇】

一、快速上手 按照要求&#xff0c;左侧选择web&#xff0c;然后在中间选择Spring Web即可&#xff0c;选完右侧就出现了新的内容项&#xff0c;这就表示勾选成功了 关注&#xff1a;此处选择的SpringBoot的版本使用默认的就可以了&#xff0c;需要说一点&#xff0c;SpringBo…...

Vuex - state 状态(获取和使用共享数据)

文章目录 一、state是什么&#xff1f;二、state状态的作用三、如何使用store数据呢&#xff1f;使用数据的两种方式&#xff1a;1. 通过store 直接访问2. 通过辅助函数访问(简化) 一、state是什么&#xff1f; state是状态&#xff08;数据&#xff09; &#xff0c; 类似于v…...

tcp连接+套接字编程

tcp头部 tcp端口号 TCP的连接是需要四个要素确定唯一一个连接&#xff1a;&#xff08;源IP&#xff0c;源端口号&#xff09; &#xff08;目地IP&#xff0c;目的端口号&#xff09; 所以TCP首部预留了两个16位作为端口号的存储&#xff0c;而IP地址由上一层IP协议负责传递 源…...

OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合

目录 1.轮廓外接最大矩形boundingRect() 2.轮廓外接最小矩形minAreaRect() 3.轮廓外接多边形approxPolyDP() 1.轮廓外接最大矩形boundingRect() Rect cv::boundingRect ( InputArray array ) array:输入的灰度图像或者2D点集&#xff0c;数据类型为vector<Point>或者M…...

Kafka3.0.0版本——消费者(offset的默认维护位置)

目录 一、offset的默认维护位置1.1、offset的默认维护位置概述1.2、offset的默认维护位置图解 二、消费者offset的案例 一、offset的默认维护位置 1.1、offset的默认维护位置概述 Kafka0.9版本之前&#xff0c;consumer默认将offset保存在Zookeeper中。从Kafka0.9版本开始&am…...

Wireshark技巧[监听串口包]

监听串口包 本文摘录于&#xff1a;https://blog.csdn.net/qq_20405005/article/details/79652927只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 这里要保证安装了USBpcap: 打开USBpcap后一半都要输入过滤条件,否则USB太多数据了,比如…...

安全运营中心即服务提供商评估

如果组织当前没有自己的安全运营中心(SOC)&#xff0c;那么可能需要考虑如何在不从头开始构建的情况下获得安全运营中心(SOC)。自己构建安全运营中心(SOC)的费用可能会非常昂贵&#xff0c;考虑到工作人员全天候运营的配置成本&#xff0c;就更是如此。在过去几年中&#xff0c…...

算法通关村第十三关——幂运算问题解析

前言 幂运算为常见的数学运算&#xff0c;形式为 a b a^b ab &#xff0c;其中a为底数&#xff0c;b为指数&#xff0c; 力扣中&#xff0c;幂运算相关的问题主要是判断一个数是不是特定正整数的整数次幂&#xff0c;以及快速幂的处理。 1.求2的幂 力扣231题&#xff0c;给…...

Python 之使用Numpy库来加载Numpy(.npy)文件并检查其内容

文章目录 总的介绍data.dtypedata.shapedata.ndimdata.size 总的介绍 要判断一个Numpy&#xff08;.npy&#xff09;文件的数据集类型&#xff0c;你可以使用Python中的Numpy库来加载该文件并检查其内容。以下是一些常见的步骤&#xff1a; 导入Numpy库&#xff1a; 首先&…...

C#学习系列之UDP同端口收发问题

C#学习系列之UDP同端口收发问题 前言解决办法关于JoinMulticastGroup总结 前言 想测试自己的程序问题&#xff0c;建立了两个UDP程序&#xff0c;一个往端口中接到数就传出去&#xff0c;另一个从这个端口接数据来解析。 出现的问题是 每次打开端口&#xff0c;另一个程序就无…...

SpringMVC之文件上传下载以及jrebel的使用

目录 一、文件上传 1.1 导入依赖 1.2 配置文件上传解析器 1.3 配置服务器存放文件地址 1.3.1 点击编辑Configurations 1.3.2 将项目部署至tomcat服务器上 1.3.3 配置相对路径 1.4 导入PropertiesUtil工具类 1.5 编写resource.properties 1.6 添加sql 1.7 编写PageCo…...

基于Fomantic UI Web构建 个人导航站点网站源码 网站技术导航源码

BYR-Navi-master好看有个性的网站技术导航源码 该网站基于Fomantic UI Web框架构建&#xff0c;整个项目的设计和构建具有高度的配置和定制灵活性。 整体风格比较适合个人导航站点使用 搜索框输入关键词后&#xff0c;点击上方搜索引擎图标可跳转打开对应搜索引擎搜索结果&am…...

DRF02-请求响应与路由

文章目录 1. http请求响应1.1. 请求与响应1.1.1 Request1.1.1.1 常用属性1).data2).query_params3)request._request基本使用1.1.2 Response1.1.2.1 构造方式1.1.2.2 response对象的属性1).data2).status_code3).content1.1.2.3 状态码1)信息告知 - 1xx2)成功 - 2xx3)…...

http直接调用paddlepaddle实现文字转语音,语音转文字

由于环境问题,折腾好久,记录下来,安装后使用还是很方便的 记录下来,方便自己,方便大家 1.安装 参考官方文档: mirrors / paddlepaddle / paddlespeech GitCode 2.启动server 参考官方文档: mirrors / paddlepaddle / paddlespeech GitCode 3.直接调用 参考官方文档: htt…...

9. xaml ComboBox控件

1.运行图像 2.运行源码 a.Xaml源码 <Grid Name="Grid1"><!--IsDropDownOpen="True" 默认就是打开的--><ComboBox x:Name="co...

【后量子密码】CRYSTALS-KYBER 算法(二):密钥封装 KEM(附源码分析)

一、前言 Kyber 算法是一种满足 IND-CCA2 安全的密钥封装机制(key-encapsulation mechanism,KEM),其安全性依赖于MLWE 问题的困难性。Kyber 算法构建采用了两阶段的方法:首先引入了一种IND-CPA 安全的公钥加密方案,用于加密长度为32字节的消息,称之为Kyber.CPAPKE;然后…...

什么是原⼦操作?在 JUC 中有哪些原⼦类?

原子操作是一种在多线程环境下不会被中断的操作,它要么完全执行,要么完全不执行,不会出现中间状态。原子操作通常是对共享数据的操作,确保多个线程同时访问共享数据时不会导致数据不一致或损坏。 在Java中,java.util.concurrent 包提供了一组原子类,用于执行原子操作。以…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...