SpringMVC入门案例

引言

Spring MVC是一个基于MVC架构的Web框架,它的主要作用是帮助开发者构建Web应用程序。它提供了一个强大的模型驱动的开发方式,可以帮助开发者实现Web应用程序的各种功能,如请求处理、数据绑定、视图渲染、异常处理等。

开发步骤

1.创建web工程(maven结构)

项目结构:

2.导入依赖:
  • Spring MVC框架的核心依赖,包含了Spring MVC框架的所有必要组件和功能。
  <!--SpringMVC环境依赖-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.2.18.RELEASE</version>
    </dependency>
  • Java Servlet API的标准实现,Spring MVC依赖于Servlet容器来处理HTTP请求和响应。
<dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <!--如果使用插件配置Tomcat,那么必须给Servlet依赖指定以下作用域-->
        <scope>provided</scope>
    </dependency>
3.定义处理请求的功能类
//定义表现层控制器bean
@Controller
//responseBody注解设置当前操作返回结果为JSON数据
@ResponseBody
public class DemoController {
    //设置映射路径
    @RequestMapping("/demo")

    public String show(){
        System.out.println("user save....");
        return "springMVC demo....";
    }
}
4.编写springMVC配置类,加载请求的bean
@Configuration
//IOC组件扫描
@ComponentScan("com.yaorange.springmvcdemo1.controller")
//开启SpringMVC注解支持
@EnableWebMvc
public class SpringMVCconfig {
    
}
5.加载springMVC配置,并设置请求拦截路径
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    //加载Spring配置,初始化Spring容器
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] {};
    }

    @Override
   //加载SpringMVC配置,初始化SpringMVC容器
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] {SpringMVConfig.class};
    }

    @Override
    //配置SpringMVC处理请求的映射地址,配置/代表处理所有请求
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}
6.修改URL
7.运行结果:

使用postman测试

打开postman

如果点击发送后报错,那么查看返回体是否设置为JSON格式,或者可能后端没打开

正确运行结果:

SpringMVC常用注解解析

  1. @Controller:用于标注Controller层,即控制层。它用于标记在一个类上,使用@Controller标记的类就变成一个SpringMVCController对象。分发处理器将会扫描使用了该注解的类的方法。
  2. @RequestMapping:这是一个处理请求地址映射的注解,可用于类或方法上。用于类上表示该类中的所有响应请求的方法都会以该地址作为父路径;作用于方法时,则会在已有父路径的基础上添加相应路径。
  3. @ResponseBody注解的作用是将Controller的方法返回的对象转换为指定的格式后,写入到Response对象的body数据区。这意味着当方法上使用了@ResponseBody注解时,方法的返回值将直接写入到HTTP响应的body中,而不是被解析为视图路径或者跳转路径。
  4. @RequestBody注解的作用是将请求体中的数据绑定到后端方法的参数上。当客户端发送一个包含数据的请求体时,Spring框架会自动将该数据转换为Java对象,并将其作为参数传递给后端方法。

    需要注意的是,在使用@RequestBody注解时,前端发送的请求方法必须是POST或PUT,因为GET请求没有请求体。此外,如果你希望在方法参数上使用@RequestBody注解,那么该参数的类型必须是一个Java对象,而不是基本类型或字符串。

  5. @RequestParam它的作用是将HTTP请求参数绑定到Controller方法的参数上。这个注解通常用于处理GET、POST等请求,并且可以接收简单类型的属性。

  6. @PathVariable是Spring 3.0中引入的新特性,用于接收URL路径中的参数。通过使用@PathVariable注解,可以将URL中的占位符参数绑定到控制器处理方法的参数上。

@RequestMapping的常用属性
  • value:指定请求的实际地址,指定的地址可以是URI Template模式。
  • method:指定请求的method类型,例如GET、POST、PUT、DELETE等。
  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/json,text/html。
  • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
  • params:指定request中必须包含某些参数值才让该方法处理。
  • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。
@RequestParam注解通常有以下几个属性:
  • value:指定参数的名称,这个名称应该是唯一的。
  • required:指定参数是否必须,默认为true。如果设置为false,则请求中可以不包含该参数。
  • defaultValue:指定参数的默认值,如果请求中没有提供该参数,则使用默认值。通常分页查询中会使用默认值
@PathVariable与@RequestParam的区别
  • 请求参数的位置:@PathVariable用于从URL路径中获取参数,而@RequestParam用于从HTTP请求的参数(query string或form data)中获取参数。
  • 参数值的绑定:@PathVariable注解的参数值直接绑定到URL路径中的占位符上,而@RequestParam注解的参数值绑定到HTTP请求的参数上。
  • 参数值的类型:@PathVariable注解的参数值类型通常是基本类型或字符串,而@RequestParam注解的参数值类型可以是任何Java对象。
  • 参数值的可选性:@PathVariable注解的参数值是必需的,因为URL路径中的占位符是固定的,而@RequestParam注解的参数值是可选的,因为HTTP请求的参数可能不存在或为空。
  • 默认值:@PathVariable注解没有提供默认值的概念,如果URL路径中的占位符不存在,将导致404错误或无法找到资源。而@RequestParam注解允许设置默认值,如果请求参数不存在或为空,将使用默认值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XSS漏洞:xss.haozi.me靶场通关

xss系列往期文章&#xff1a; 初识XSS漏洞-CSDN博客 利用XSS漏洞打cookie-CSDN博客 XSS漏洞&#xff1a;xss-labs靶场通关-CSDN博客 XSS漏洞&#xff1a;prompt.mi靶场通关-CSDN博客 目录 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C…

JS取余运算符 %,ES2023 新增数组方法Array.at

取余运算符&#xff08;%&#xff09;的作用就是用来两个操作数进行相除运算之后的余数。 注意&#xff0c;两个操作数取余是有循环范围的&#xff0c;这个范围为 0 - 第二个参数 - 1。 如下图&#xff1a; 对于6取余的话&#xff0c;得到的取余数据就会一直在0-5之间进行循环…

克魔助手工具详解、数据包抓取分析、使用教程

目录 摘要 引言 克魔助手界面 克魔助手查看数据捕获列表 数据包解析窗口 数据包数据窗口 克魔助手过滤器表达式的规则 抓包过滤器实例 总结 参考资料 摘要 本文介绍了克魔助手工具的界面和功能&#xff0c;包括数据包的捕获和分析&#xff0c;以及抓包过滤器的使用方…

精品基于Uniapp+springboot农产品安全领域的信息采集系统App

《[含文档PPT源码等]精品基于Uniappspringboot农产品安全领域的信息采集系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;sprin…

arcgis javascript api4.x以basetilelayer方式加载arcgis发布的栅格切片服务

需求&#xff1a; 以arcgis js api的basetilelayer加载arcgis发布的栅格切片服务 效果图&#xff1a; 其中和tileinfo和lods&#xff0c;这样获取&#xff1a; https://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer/?fpjson urltemplate&#xff1a; …

C++发展史

目录 什么是C C的发展史 C的重要性 C在实际工作中的应用 “21天教你学会C” 什么是C 先看看祖师爷&#xff0c;记得多拜拜&#x1f92d; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度…

算法学习系列(二十三):最小生成树问题

目录 引言一、最小生成树问题二、Prim算法三、Kruskal算法 引言 这个最小生成树问题其实思想都非常的简单&#xff0c;然后代码也是比较简单的&#xff0c;很多人听到这个问题觉得难&#xff0c;比如说跟我一样&#xff0c;主要是因为不知道这个算法&#xff0c;就是一种未知的…

原生SSM整合(Spring+SpringMVC+MyBatis)案例

SSM框架是Spring、Spring MVC和MyBatis三个开源框架的整合&#xff0c;常用于构建数据源较简单的web项目。该框架是Java EE企业级开发的主流技术&#xff0c;也是每一个java开发者必备的技能。下面通过查询书籍列表的案例演示SSM整合的过程. 新建项目 创建文件目录 完整文件结…

CRM系统的销售漏斗是什么?如何提升销售效率?

​ CRM管理系统有许多重要的功能&#xff0c;很多人不太了解什么叫销售漏斗。网上关于CRM销售漏斗的讲解。看完以后仿佛懂了&#xff0c;细心想了想&#xff0c;好像没说透。下面说说CRM销售漏斗如何指导销售人员行动。简单来说就是分解销售目标、规划销售时间、预测销售业绩。…

【时间复杂度】时间复杂度优化法则简讲

一、引言 时间复杂度是衡量算法运行效率的一项重要指标&#xff0c;它描述了随着输入规模的增加&#xff0c;算法的执行时间如何增长。在算法设计与分析中&#xff0c;我们经常面临着优化时间复杂度的任务&#xff0c;以便提高程序的性能。本博客将深入探讨时间复杂度的优化法…

【MYSQL】事务隔离级别

脏读、幻读、不可重复读 脏读 一个事务正在对一条记录做修改&#xff0c;在这个事务完成并提交前&#xff0c;另一个事务也来读取同一条记录&#xff0c;读取了这些未提交的“脏”数据&#xff0c;并据此做进一步的处理&#xff0c;就会产生未提交的数据依赖关系。这种现象被形…

删除edge浏览器文本框储存记录值以及关闭自动填充

当我们点击输入框时总会出现许多以前输入过的信息。 一、删除edge浏览器文本框储存记录值 1、首先按下↓键选中你想删除的信息 2、然后按ShiftfnDel鍵(MAC)/ShiftDel鍵(Win)&#xff0c;就可以成功删除。 二、关闭自动填充。 1、在地址栏输入edge://wallet/settings跳转到以…

语言大模型的分布式训练与高效微调指南

原文&#xff1a;语言大模型的分布式训练与高效微调指南 - 知乎 目录 收起 1 分布式训练 2 ZeRO驱动的数据并行 3 全分片数据并行 4 实现 5 高效微调 6 实践指南 7 关于DeepSpeed和FSDP的更多内容 OneFlow编译 翻译&#xff5c;杨婷、宛子琳 最近语言大模型&#xff…

[windows]给WSL安装一个桌面gnome版本

【安装前提】 请提前安装好WSL系统&#xff0c;最好ubuntu系统>18.04 【安装步骤】&#xff1a; WSL 不支持 systemd 而 Gnome 桌面又是基于 systemd&#xff0c;所以先解决这个问题。 sudo apt update sudo apt install git git clone https://github.com/DamionGans/u…

redis数据安全(五)事务

一、概念&#xff1a; 1、介绍&#xff1a;Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。在事务执行过程&#xff0c;会按照顺序串行化执行队列中的命令&#xff0c;其他客户端提交的命令请求不会插入到事务执行命…

尚无忧【无人共享空间 saas 系统源码】无人共享棋牌室系统源码共享自习室系统源码,共享茶室系统源码

可saas多开&#xff0c;非常方便&#xff0c;大大降低了上线成本 UNIAPPthinkphpmysql 独立开源&#xff01; 1、定位功能&#xff1a;可定位附近是否有店 2、能通过关键字搜索现有的店铺 3、个性轮播图展示&#xff0c;系统公告消息提醒 4、个性化功能展示&#xff0c;智能…

【JavaEE进阶】 图书管理系统开发日记——壹

文章目录 &#x1f332;序言&#x1f334;前端代码的引入&#x1f38b;约定前后端交互接口&#x1f343;后端服务器代码实现&#x1f6a9;UserController.java&#x1f6a9;BookController.java ⭕总结 &#x1f332;序言 该图书管理系统&#xff0c;博主将一步一步进行实现。…

秒懂Precision精确率、Recall召回率-附代码和案例

经常有同学目标检测评价指标含糊不清这次带你通俗易懂了解该知识 强烈推荐的博客&#xff1a; 更多有用知识&#xff0c;请点我 //☏:qq1309399183// 深度学习视觉必做项目 计算 precision&#xff08;精确率&#xff09;**和 recall&#xff08;召回率&#xff09;是评估分类…

Linux设备驱动开发学习笔记(等待队列,锁,字符驱动程序,设备树,i2C...)

1. 内核工具和辅助函数 1.1宏container_of container_of函数可以通过结构体的成员变量检索出整个结构体 函数原型&#xff1a; /* pointer 指向结构体字段的指针 container_type 结构体类型 container_field 结构体字段名称 返回值是一个指针 */ container_of(pointer, con…

智慧水务平台有哪些应用场景?

随着城市化进程的加速&#xff0c;城市水资源管理面临着越来越多的挑战。如何实现高效、智能的水资源管理&#xff0c;成为了城市管理者亟待解决的问题。智慧水务平台作为新一代信息技术在水务领域的深度应用&#xff0c;为城市水资源管理提供了全新的解决方案。 智慧水务平台的…