当前位置: 首页 > 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/>来解决冲突。
http://www.lryc.cn/news/162661.html

相关文章:

  • 大学毕业设计的益处:培养实践能力、深入专业领域、展示自信与建立联系
  • ChatGPT:概述Vue.js中data函数初始化和created钩子函数调用的顺序和问题解决方法
  • SpringBoot【基础篇】
  • Vuex - state 状态(获取和使用共享数据)
  • tcp连接+套接字编程
  • OpenCV(三十四):轮廓外接最大、最小矩形和多边形拟合
  • Kafka3.0.0版本——消费者(offset的默认维护位置)
  • Wireshark技巧[监听串口包]
  • 安全运营中心即服务提供商评估
  • 算法通关村第十三关——幂运算问题解析
  • Python 之使用Numpy库来加载Numpy(.npy)文件并检查其内容
  • C#学习系列之UDP同端口收发问题
  • SpringMVC之文件上传下载以及jrebel的使用
  • 基于Fomantic UI Web构建 个人导航站点网站源码 网站技术导航源码
  • DRF02-请求响应与路由
  • http直接调用paddlepaddle实现文字转语音,语音转文字
  • 9. xaml ComboBox控件
  • 【后量子密码】CRYSTALS-KYBER 算法(二):密钥封装 KEM(附源码分析)
  • 什么是原⼦操作?在 JUC 中有哪些原⼦类?
  • 2022年12月 C/C++(八级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Hadoop的HDFS的集群安装部署
  • uniapp 在 onLoad 事件中 this.$refs 娶不到的问题
  • 常見算法時間複雜度分析
  • 自学Python05-学会Python中的函数定义
  • 设计模式-组合模式(Composite)
  • 架构核心技术之微服务架构
  • SQL Server2022版+SSMS安装教程(保姆级)
  • go语言基础---8
  • Oracle的 dblink 学习笔记
  • 任意文件上传