第2章:SpringMVC的@RequestMapping注解

news2024/12/25 23:39:16

一、SpringMVC搭建框架

1.创建一个Maven程序的步骤

 ①在pom.xml导入maven依赖

<!--打包方式是war-->
<!--war 包通常用于网站,它是一个可以直接运行的 web 模块-->
<packaging>war</packaging>
<dependencies>
    <!-- SpringMVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.1</version>
    </dependency>

    <!-- 日志 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

    <!-- ServletAPI -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <!--scope 依赖范围provided已存在,程序打包为War包,依赖不会存在-->
        <scope>provided</scope>
    </dependency>

    <!-- Spring5和Thymeleaf整合包 -->

    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
        <version>3.0.12.RELEASE</version>
    </dependency>
</dependencies>

②在main包下创建webapp,并把xml导入

 ③配置web.xml,前端控制器

<!--配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理-->
<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--配置SpringMVC配置文件的位置和名称-->
    <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>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
<!-- 设置springMVC的核心控制器所能处理的请求的请求路径
    /所匹配的请求可以是/login或.html或.js或.css方式的请求路径
    但是/不能匹配.jsp请求路径的请求-->
</servlet-mapping>

④配置springMVC.xml

扫描组件—视图解析器

<context:component-scan base-package="com.atguigu.mvc.controller"></context:component-scan>

<!-- 配置Thymeleaf视图解析器 -->
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
    <property name="order" value="1"/>
    <property name="characterEncoding" value="UTF-8"/>
    <property name="templateEngine">
        <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
            <property name="templateResolver">
                <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">

                    <!-- 视图前缀 -->
                    <property name="prefix" value="/WEB-INF/templates/"/>

                    <!-- 视图后缀 -->
                    <property name="suffix" value=".html"/>
                    <property name="templateMode" value="HTML5"/>
                    <property name="characterEncoding" value="UTF-8" />
                </bean>
            </property>
        </bean>
    </property>
</bean>

二、@RequestMapping注解

1.@RequestMapping注解的功能

作用是将请求和处理请求的控制方法关联起来,建立映射关系

SpringMVC接收到指定请求,就会找到映射关系中对应的控制器方法来处理这个请求

2.多个控制器下的@RequestMapping的value值一样,会报错

 

 报错结果

 /方法已经被映射了,所以@RequestMapping的value值要唯一

3. @RequestMapping注解的位置

  • @RequestMapping标识一个类:设置映射请求路径的初始信息
  • @RequestMapping标识一个方法:设置映射请求路径的具体信息

此时请求映射的请求路径为:/test/ target

@Controller
@RequestMapping("/test")
public class RequestMappingController {
   @RequestMapping("/target")
   public String target (){
      //返回视图名称--通过视图解析器解析
      return "target";
   }   
}

 4. @RequestMapping注解的value属性

  • @RequestMapping注解的value属性通过请求地址匹配请求映射
  • @RequestMapping注解的value属性是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求
  • @RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射。

 访问的http://localhost:8080/SpringMVCTest/t2(t1)时候都是跳转target.html

5. @RequestMapping注解的method属性

  • @RequestMapping注解的method属性通过请求的请求方式(get或post)匹配请求映射
  • @RequestMapping注解的method属性是一个RequestMethod类型的数组,表示该请求映射能够匹配多种请求方式的请求
  • 若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足method属性,则浏览器报错405:Request method ‘POST’ not supported
  • get请求:在地址栏上,请求参数会显示上面。采用?拼接。数据量有限

    Post请求:请求参数不会在地址栏上,会放在请求体中。

①当控制器不指定@RequestMapping注解的method属性时

 ②不管是post请求还是get请求都能访问

 ③当@RequestMapping注解加上method属性时

 ④此时访问只能是get请求,如果是post进行请求出现405

6. @RequestMapping注解结合请求方式的派生注解

①:对于处理指定请求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解

处理get请求的映射–>@GetMapping

处理post请求的映射–>@PostMapping

处理put请求的映射–>@PutMapping

处理delete请求的映射–>@DeleteMapping

②常用的请求方式有get,post,put,delete

③但是目前浏览器只支持get和post,若在form表单提交时,为method设置了其他请求方式的字符串(put或delete),则按照默认的请求方式get处理

④若要发送put和delete请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter,在RESTful部分会讲到

7. @RequestMapping注解的params属性(了解)

  • @RequestMapping注解的params属性通过请求的请求参数匹配请求映射
  • @RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系
  • “param”:要求请求映射所匹配的请求必须携带param请求参数
  • “!param”:要求请求映射所匹配的请求必须不能携带param请求参数
  • “param=value”:要求请求映射所匹配的请求必须携带param请求参数且param=value
  • “param!=value”:要求请求映射所匹配的请求必须携带param请求参数但是param!=value

index.html

<a th:href="@{/target(username='admin',password=123456)}">访问目标页面target.html</a>

②控制器

@RequestMapping(value = "/target",params = {"username=admin","password=123456"})
public String ToTarget(){
   return "target";
}

8.@RequestMapping注解的headers属性(了解)

①:@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射

②:@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系

  • “header”:要求请求映射所匹配的请求必须携带header请求头信息
  • “!header”:要求请求映射所匹配的请求必须不能携带header请求头信息
  • “header=value”:要求请求映射所匹配的请求必须携带header请求头信息且header=value
  • “header!=value”:要求请求映射所匹配的请求必须携带header请求头信息且header!=value
  • ③:若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面显示404错误,即资源未找到

9. SpringMVC支持ant风格的路径

:表示任意的单个字符

http://localhost:8080/SpringMVCTest/a?a/testAnt ?任意的单个字符

@RequestMapping("/a?a/testAnt")
public String testAnt(){
   return "target";
}

② *:表示任意的0个或多个字符

http://localhost:8080/SpringMVCTest/a*a/testAnt

@RequestMapping("/a*a/testAnt")
public String testAnt(){
   return "target";
}

**:表示任意的一层或多层目录

注意:在使用**时,只能使用**/**/xxx的方式

@RequestMapping("/**/testAnt")
public String testAnt(){
   return "target";
}

10.SpringMVC支持路径中的占位符(重点)

  • 原始方式:/deleteUser?id=1
  • rest方式:/deleteUser/1
  • SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

浏览器输入http://localhost:8080/SpringMVCTest/testAnt/6/zhilei

 输出:id=6,username=zhilei

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

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

相关文章

二战阿里巴巴成功上岸,准备了小半年,拿23k也不算很高吧~

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;阿里的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

如何获取 C#程序 内核态线程栈

一&#xff1a;背景 1. 讲故事 在这么多的案例分析中&#xff0c;往往会发现一些案例是卡死在线程的内核态栈上&#xff0c;但拿过来的dump都是用户态模式下&#xff0c;所以无法看到内核态栈&#xff0c;这就比较麻烦&#xff0c;需要让朋友通过其他方式生成一个蓝屏的dump&…

线程同步(一)

上篇文章讲述了什么是线程&#xff0c;以及在Linux系统下线程的相关操作 线程&#xff08;Linux系统实现&#xff09;_小梁今天敲代码了吗的博客-CSDN博客 本文将继续讲述线程的相关知识——线程同步 目录 1.线程同步的概念 2.线程不同步可能会发生什么 3.线程同步方式 …

机器学习——聚类算法详解

1.聚类问题 1&#xff09;聚类问题与核心概念 聚类算法做的事情&#xff0c;就是对无标签的数据&#xff0c;基于数据分布进行分群分组&#xff0c;使得相似的数据尽量落在同一个簇内。 我们先对比区分一下聚类和分类&#xff1a; 聚类是一种无监督学习&#xff0c;而分类是…

第十三届蓝桥杯C++B组j国赛

第十三届蓝桥杯C组 题目 2693: 蓝桥杯2022年第十三届决赛真题-卡牌 题目描述 这天&#xff0c;小明在整理他的卡牌。 他一共有 n 种卡牌&#xff0c;第 i 种卡牌上印有正整数数 i(i ∈ [1, n])&#xff0c;且第 i 种卡牌 现有 ai 张。 而如果有 n 张卡牌&#xff0c;其中…

硬件测试—温升测试之JinKo 多路温度测试仪使用说明

一、概述 1.1&#xff1a;测试概述 在硬件测试中&#xff0c;温升测试也是很重要的一项测试&#xff0c;产品各项器件在稳定的环境温度下满载工作的芯片温度&#xff0c;根据测试情况评估散热需求。 1.2&#xff1a;产品图片 1.3&#xff1a;使用设备 名称 厂家 型号 PC电脑…

Acer Aspire V3-572G电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板Acer Aspire V3-572G 处理器i7 5500U 2 Cores/4 Threads2,4Ghz已驱动 内存Any Samsung, Hynix or Kingston DDR3 8GB(4GBx2).已驱动 硬…

CSDN 每日一练用例数据缺失了怎么办?

CSDN 每日一练用例数据缺失了怎么办&#xff1f; 引子1、用例与结果不匹配2、阅读理解困难3、用例数据缺失 用例数据缺失&#xff0c;却有人 AC &#xff1f;神奇的 c28761 津津的储蓄计划70093 近视的小张 小结最后的吐槽 引子 老顾最近几个月经常在 CSDN 举办的周赛上浑水摸…

Tomcat 部署

一.Tomcat介绍 Servlet 是 Java Servlet 的简称&#xff0c;可以理解为是一个服务连接器&#xff0c;是用 Java 编写的服务器端程序&#xff0c;具有独立于平台和协议的特性&#xff0c; 简单的理解&#xff1a;servlet 就是一个中间件&#xff0c;包含了接口和方法&#xff0…

5.2.6 地址解析协议ARP

5.2.6 地址解析协议ARP 我们知道要想实现全球范围内主机之间的通信&#xff0c;必须要有两个统一&#xff0c;一个是地址&#xff0c;另一个是数据格式&#xff0c;我们使用IP地址来实现统一的地址&#xff0c;使用IP分组实现统一的数据格式&#xff0c;在前面局域网的学习中我…

【AIGC】13、GLIP | 首次将 object detection 重建为 phrase grounding 任务

文章目录 一、背景二、方法2.1 将 object detection 和 phrase grounding 进行统一2.2 Language-aware deep fusion2.3 使用语义丰富的数据来进行预训练 三、效果3.1 迁移到现有 Benchmarks3.2 在 COCO 上进行零样本和有监督的迁移3.3 在 LVIS 上进行零样本迁移学习3.4 在 Flic…

android 如何分析应用的内存(四)

android 如何分析应用的内存&#xff08;四&#xff09; 接上文 在介绍细节部分时&#xff0c;先介绍了各种工具的使用&#xff0c;而这些工具&#xff0c;大部分都用来调试&#xff0c;诸如&#xff1a;特定内存点&#xff0c;堆栈&#xff0c;寄存器&#xff0c;变量值等的…

MySQL安装流程 及 8.0与5.7区别

一、MySQL版本介绍 1、MySQL 8.0 窗口函数&#xff1a;MySQL 8.0版本支持窗口函数&#xff0c;这是数据分析工作中非常常用的一类函数。窗口函数可以让用户在单个查询中跨多个行检索数据&#xff0c;并在查询结果中对数据执行计算。隐藏索引&#xff1a;在MySQL 8.0版本中&am…

C++STL详解 string【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 string 函数模板 函数模板的原理 template <typename T> //模板参数 ——类型 void Swap(T& x1, T& x2) {T tmp x1;x1 x2;x2 tmp; } int main()…

牛客网语法刷题篇(C语言) — 输出格式化

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言—语法篇》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;…

解析Linux中断子系统之中断映射

中断是当前计算机系统的基础功能&#xff0c;也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念&#xff0c;本文针对ARM公司提供的通用中断控制器&#xff08;GIC,Generic Interrupt Controller&#xff09;介绍在linux系统中的硬件中断号与软件中断号…

SpringBootWeb登录认证

1. 登录功能 1.1 需求 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 “登录” 按钮就要请求服务器&#xff0c;服务端判断用户输入的用户名或者密码是否正确。如果正确&#xff0c;则返回成功结果&#xff0c;前端跳转至系统首页面。 1.2 …

简单聊一聊数据库驱动

数据库驱动通常是数据库厂家提供的&#xff0c;他们按照jdbc协议对自家数据库封装了一套可对外调用的API。在应用程序和数据库之间起到了桥接的作用。它是一个软件组件&#xff0c;提供了与特定数据库系统进行通信的接口和功能。 1. 数据库驱动的作用&#xff1a; 连接数据库&…

AAOS 音频动态路由

文章目录 基本概念车载音频配置文件外部的配置音频区的方式车载音频服务配置路由流程框架中获取可用输出设备配置例子测试方法相关问题 基本概念 Android 管理来自 Android 应用的声音&#xff0c;同时控制这些应用&#xff0c;并根据其声音类型将声音路由到 HAL 中的输出设备…

FastAPi上传文件报错,There was an error parsing the body

问题描述 通过postman调用fastapi编写的文件接口报错&#xff0c;如下图&#xff1a; {"detail": "There was an error parsing the body" } 问题的解决过程 postman本身的问题 postman有个work directory的概念&#xff0c;所以再使用postman上传的文…