springmvc实验(三)——请求映射

news2024/11/20 7:26:38

【知识要点】

  1. 方法映射概念
    所谓的方法映射就是将前端发送的请求地址和后端提供的服务方法进行关联。在springMVC框架中主要使用@Controller和@RequestMapping两个注解符,实现请求和方法精准匹配。
  2. 注解符@Controller
    Spring中包含了一个Controller接口,但是实现Controller接口只能处理一个单一的请求,使用起来非常不灵活。使用@Controller注解,可以标记类的实例是一个SpringMVC控制器对象,并可以支持同时处理多个请求动作,相对于实现变得更加简单,更加灵活,分发处理器会扫描使用了该注解类的方法
  3. 注解符@RequestMapping
    SpringMVC中使用@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求。注解符@RequestMapping可以使用到方法上,也可以使用到类上。注解符@RequestMapping使用在方法上,与URL中最后一个反斜杠后值与方法建立映射关系,注解在方法上时@RequestMapping很多属性,常用属性如下表所示,使用这些属性规定匹配规则。注解在类上,代表该类中所有方法都将映射为相对于类级别的请求,该控制器所处理的所有请求都被映射到value属性值所指定的路径下,起到窄化路径的作用
    在这里插入图片描述
    4)方法映射的组合注解
    Spring框架的4.3版本中,引入了新的组合注解,来帮助简化常用的HTTP方法的映射,并更好的表达被注解方法的语义,如下表所示。
    在这里插入图片描述

【实验目的】

  • 了解注解符@Controller
  • 熟悉springMVC请求映射过程
  • 熟悉组合注解的使用
  • 掌握@RequestMapping的使用

【实验内容】

  1. 编写前端控制器StudentController
  2. 注解符@Controller的使用
  3. 验证注解符@RequestMapping及其属性的使用

【实验步骤】

1. 创建SpringMVC工程demo2

2. 代码编写

在com.bjwl.controller包中添加学生控制类(StudentController),其代码如下所示

@Controller  
@RequestMapping("student")  
public class StudentController {  
    @RequestMapping("list")  
    public void getAllStudent(HttpServletResponse response) throws IOException {  
        response.setContentType("text/html;charset=utf-8");  
        response.getWriter().write("测试注解符@RequestMapping中value");  
    }  
} 

代码的第1行使用注解符@Controller标注该类的实例是一个控制器对象;第2行在类上使用@RequestMapping注解,进行路径窄化表示请求路径必须包括student;第4行在方法使用@RequestMapping注解,请求url中最后一部分值与注解符value中的值进行匹配,从而建立请求与方法的映射关系

3. 验证@RequestMapping属性

  1. 验证method属性,下述代码中请求方法只能使用post方法,代码如下所示
@RequestMapping(value="list2",method = {RequestMethod.POST})  
public void InsertStudent(HttpServletResponse response) throws IOException {  
    response.setContentType("text/html;charset=utf-8");  
    response.getWriter().write("测试注解符@RequestMapping中method的使用");  
}  
  1. 验证params属性,示例代码中匹配请求参数必须包含username和password,且username的值不能是李四,代码如下所示
@RequestMapping(value = "verify3",params = {"username!=李四","password"})  
public void handle3(HttpServletRequest request,  
                      HttpServletResponse response) throws Exception {  
    response.setContentType("text/html;charset=utf-8");  
    response.getWriter().write("测试注解符@RequestMapping中paramsshuxing ");  
} 
  1. 验证consumes和produces。示例代码中匹配的方法仅处理请求Content-Type为application/json类型的请求,produces标识代表返回的内容类型为application/json;代码如下所示
@RequestMapping(value = "verify5",consumes="application/json", produces="application/json")  
public void handle5(HttpServletRequest request,  
                    HttpServletResponse response) throws Exception {  
    response.setContentType("application/json;charset=utf-8");  
    response.getWriter().write("验证consumes和produces");  
}

4) 验证headers属性。使用headers可以更精确的映射请求,指定request中必须包含某些指定的header值,才能让该方法处理请求,代码如下所示。

@RequestMapping(value = "verify6",headers = "Content-Type=application/json;charset=utf-8")  
public void handle6(HttpServletRequest request,  
                    HttpServletResponse response) throws Exception {  
    response.setContentType("application/json;charset=utf-8");  
    response.getWriter().write("验证headers属性");  
}  

4. 组合注解的使用

以下仅验证@PostMapping和@PutMapping注解,示例代码如下。

    @PostMapping("insert")
    public void insert(HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("验证@PostMapping,新增成功");
    }
    @PutMapping("update")
    public void update(HttpServletResponse response) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write("验证@PutMapping,修改成功");
    }

修改请求方法类型,返回404
在这里插入图片描述

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

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

相关文章

【C/C++笔试练习】this指针的概念、初始化列表、const对象调用、构造和析构函数、继承和组合、重载和多态、虚函数的定义、计算日期到天数转换、幸运的袋子

文章目录 C/C笔试练习选择部分(1)this指针的概念(2)初始化列表(3)const对象调用(4)构造和析构函数(5)继承和组合(6)重载和多态&#x…

七天.NET 8操作SQLite入门到实战 - 第四天EasySQLite前后端项目框架搭建

前言 今天的主要任务是快速下载并安装.NET 8 SDK,搭建EasySQLite的前后端框架。 .NET 8 介绍 .NET 8 是 .NET 7 的后继版本。 它将作为长期支持 (LTS) 版本得到三年的支持。 使用技术栈和开发环境 咱们的.NET 8操作SQLite入门到实战教程主要使用技术栈为如下所示…

Android帝国之进程杀手--lmkd

本文概要 这是Android系统启动的第三篇文章,本文以自述的方式来讲解lmkd进程,通过本文您将了解到lmkd进程在安卓系统中存在的意义,以及它是如何杀进程的。(文中的代码是基于android13) 我是谁 init:“大…

Java---抽象类讲解

文章目录 1. 抽象类概述2. 抽象类特点3. 抽象类的成员特点4. 抽象类猫狗应用 1. 抽象类概述 在Java中,一个没有方法体的方法应该定义为抽象方法;而类中如果有抽象方法,该类必须定义为抽象类。 2. 抽象类特点 1. 抽象类和抽象方法必须使用abst…

RabbitMQ消息模型之Routing-Topic

Routing Topic Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key的时候使用通配符!这种模型Routingkey一般都是由一个或多个单词组成,多个单词之间以”…

vscode非常好用的扩展插件

1、Code Spell Checker: 帮助我们检查单词是否拼写错误,检查规则遵循驼峰拼写法。 2、Color Highlight:高亮显示颜色值 3、Svg Preview: 实时预览svg图片(修改width、height、fill等值来实时查看效果) 4、…

统信桌面版arm系统安装火狐浏览器和浏览器驱动

一、系统信息 二、下载浏览器和驱动 1、浏览器 https://security.debian.org/debian-security/pool/updates/main/f/firefox-esr/firefox-esr_115.5.0esr-1~deb10u1_arm64.deb 2、驱动 https://github.com/mozilla/geckodriver/releases geckodriver-v0.33.0-linux-aarch6…

pip安装python包(pytorch)时遇到超时现象的通用解决方案

最近在使用服务器配置pytorch环境的时候,遇到了极为恼火的事情,使用pytorch官方的命令来下载GPU版本的pytorch总会是不是下载到一半就会崩溃,然而pip下载并不会断点续传(什么时候能出这个功能啊喂!)。每次下…

字节10年经验之谈 —— 从0到1开发自动化测试框架!

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏;其次,代码模块常改动,回归测试很频繁,测试重复低效;最后&#x…

【Node.js】笔记整理 3 -npm

写在最前:跟着视频学习只是为了在新手期快速入门。想要学习全面、进阶的知识,需要格外注重实战和官方技术文档,文档建议作为手册使用 系列文章 【Node.js】笔记整理 1 - 基础知识【Node.js】笔记整理 2 - 常用模块【Node.js】笔记整理 3 - n…

Android修行手册 - 一篇文章从0到1搞一个Android Studio插件。

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

Web安全漏洞分析-XSS(上)

随着互联网的迅猛发展,Web应用的普及程度也愈发广泛。然而,随之而来的是各种安全威胁的不断涌现,其中最为常见而危险的之一就是跨站脚本攻击(Cross-Site Scripting,简称XSS)。XSS攻击一直以来都是Web安全领…

一次Apollo Client升级导致的生产404 Not Found问题排查记录

概述 本文记录一次升级Apollo Client组件到1.7.0后遇到的重大生产事故。只想看结论的,可直接快进到文末。实际上,第一句话就是一个结论。 另,本文行文思路事后看起来可行略显思路清晰,实际上排查生产问题时如无头苍蝇&#xff0…

初学者如何入门深度学习:以手写数字字符识别为例看AI 的学习路径,一图胜千言!

文章大纲 深度神经网络机器学习,深度学习,数据发掘之间的关系理解深度神经网络最好的可视化工具深度学习基础概念能解决神马种类的问题?卷积池化以手写字符识别为例讲述深度学习的分类问题MNIST 数据集简介初学者入门 :生成式 AI -- generative-ai-for-beginners参考文献与…

【Web端CAD/CAE文字标注】webgl+canvas 2d实现文字标注功能

一、需求背景 在CAD/CAE领域经常会遇到显示节点编号这种需求,效果如下图: 本文介绍如何在WebGL中实现文字的显示,对于如何在OpenGL中实现请绕路。 二、实现原理 Canvas是HTML5提供的元素,用于在网页上绘制图形,其支…

计算机网络(超详解!) 第二节 物理层(上)

1.物理层的基本概念 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。 用于物理层的协议也常称为物理层规程(procedure)。 2.物理层的主要任务 主要…

Unity版本使用情况统计(更新至2023年10月)

本期UWA发布的内容是第十三期Unity版本使用统计,统计周期为2023年5月至2023年10月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势,了解近半年来哪些Unity版本的使用概率更…

Steps步骤条(antd-design组件库)简单用法

1.Steps步骤条 引导用户按照流程完成任务的导航条。 2.何时使用 当任务复杂或者存在先后关系时,将其分解成一系列步骤,从而简化任务。 组件代码来自: 步骤条 Steps - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:hello-…

11.兔子生崽问题【2023.11.26】

1.问题描述 有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问 第二十个月的兔子对数为多少对&#xff1f; 2.解决思路 3.代码实现 #include<stdio.h> int mai…

单相直流电表和单相智能电表有哪些区别?

在众多的智能电表中&#xff0c;单相智能电表已成为家庭用电、工业用电等领域的重要组成部分。与此同时&#xff0c;单相直流电表也因其特性在某些特定场合受到关注。下面就来讲讲两者都有哪些区别&#xff0c;一起来看下吧&#xff01; 一、工作原理及性能差异 1.单相直流电表…