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

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注解允许设置默认值,如果请求参数不存在或为空,将使用默认值。

相关文章:

SpringMVC入门案例

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

Docker本地私有仓库搭建配置指导

一、说明 因内网主机需要拉取镜像进行Docker应用&#xff0c;因此需要一台带外主机作为内网私有仓库来提供内外其他docker业务主机使用。参考架构如下&#xff1a; 相关资源&#xff1a;加密、Distribution registry、Create and Configure Docker Registry、Registry部署、D…...

python 通过定时任务执行pytest case

这段Python代码使用了schedule库来安排一个任务&#xff0c;在每天的22:50时运行。这个任务执行一个命令来运行pytest&#xff0c;并生成一个报告。 代码开始时将job_done变量设为False&#xff0c;然后运行预定的任务。一旦任务完成&#xff0c;将job_done设置为True并跳出循…...

算法面试题:合并两个有序链表

描述&#xff1a;给定两个按非递减顺序排列的链表&#xff0c;合并两个链表&#xff0c;并将结果按非递减顺序排列。 例如&#xff1a; # 链表 1: 1 -> 2 -> 4 # 链表 2: 1 -> 3 -> 4合并后的链表应该是&#xff1a;1 -> 1 -> 2 -> 3 -> 4 -> 4 …...

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型&#xff08;如 Chinese-LLaMA、ChatGLM等&#xff09;的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…...

西门子博途用SCL语言写的入栈出栈

1.用户登录 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogin(1) 2.用户退出 #pragma code ("useadmin.dll") #include "PWRT_api.h" #pragma code() PWRTLogout(); 3.画面跳转 SetPictureName("P…...

密码产品推介 | 沃通安全电子签章系统(ES-1)

产品介绍 沃通安全电子签章系统&#xff08;ES-1&#xff09;是一款基于密码技术、完全自主研发的商用密码产品&#xff0c;严格遵循国家密码管理局制定的相关标准&#xff0c;可为企业和个人提供安全、合规的电子签章功能服务。产品的主要用途是为各类文书、合同、表单等电子…...

蓝桥杯真题(Python)每日练Day1

说明&#xff1a;在CSP认证的基础上&#xff08;可以看看本人CSP打卡系列的博客&#xff09;备赛2024蓝桥杯&#xff08;Python&#xff09;&#xff0c;本人专业&#xff1a;大数据与数据科学 因此对python要求熟练掌握&#xff0c;通过练习蓝桥杯既能熟悉语法又能锻炼算法和思…...

IDEA怎么用Devtools热部署

IDEA怎么用Devtools热部署 大家知道在项目开发过程中&#xff0c;有时候会改动代码逻辑或者修改数据结构&#xff0c;为了能使改动的代码生效&#xff0c;往往需要重启应用查看改变效果&#xff0c;这样会相当耗费时间。 重启应用其实就是重新编译生成新的Class文件&#xff0…...

boost.circular_buffer的使用和介绍

C 文章目录 C 很多时候&#xff0c;我们需要在内存中记录最近一段时间的数据&#xff0c;如操作记录等。由于这部分数据记录在内存中&#xff0c;因此并不能无限递增&#xff0c;一般有容量限制&#xff0c;超过后就将最开始的数据移除掉。在stl中并没有这样的数据结构&#xf…...

深入理解Java中的ThreadLocal

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天咱们来聊聊ThreadLocal。首先&#xff0c;让咱们先搞清楚&#xff0c;ThreadLocal是个什么玩意儿。简单说&#xff0c;ThreadLocal可以让咱们在每个线程中创建一个变量的“私有副本”。这就意味着&#xff0c;每个线程…...

【重点】【DP】300. 最长递增子序列

题目 更好的方法是耐心排序&#xff0c;参见《算法小抄》的内容&#xff01;&#xff01;&#xff01; 法1&#xff1a;DP 基础解法必须掌握&#xff01;&#xff01;&#xff01; class Solution {public int lengthOfLIS(int[] nums) {if (nums null || nums.length 0) …...

使用freessl为网站获取https证书及配置详细步骤

文章目录 一、进入freessl网站二、修改域名解析记录三、创建证书四、配置证书五、服务启动 一、进入freessl网站 首先进入freessl网站&#xff0c;需要注册一个账号 freessl网站 进入网站后填写自己的域名 接下来要求进行DCV配置 二、修改域名解析记录 到域名管理处编辑域名…...

Java-初识正则表达式 以及 练习

目录 什么是正则表达式&#xff1f; 1. 正则表达式---字符类&#xff08;一个大括号匹配一个字符&#xff09;&#xff1a; 2. 正则表达式---预字符类&#xff08;也是匹配一个字符&#xff09;&#xff1a; 正则表达式---数量词 &#xff08;可以匹配多个字符&#xff09;…...

【Flutter 问题系列第 80 篇】TextField 输入框组件限制可输入的最大长度后,输入的内容中包含表情符号时,获取输入的内容数还是会超出限制的问题

这是【Flutter 问题系列第 80 篇】&#xff0c;如果觉得有用的话&#xff0c;欢迎关注专栏。 博文当前所用 Flutter SDK&#xff1a;3.10.5、Dart SDK&#xff1a;3.0.5 一&#xff1a;问题描述 在输入用户名称、简介等内容时&#xff0c;一般我们都会限制输入框内最大可输入…...

漏洞检测和评估【网站子域扫描工具02】

上一篇&#xff1a;爬取目标网站的域名和子域名【网站子域扫描工具01】 在Python中&#xff0c;有一些流行的漏洞扫描库可以对子域进行漏洞扫描和评估&#xff0c;比如Nmap、Sublist3r等。 1.端口扫描 以下是一个简单的示例代码&#xff0c;展示了如何使用Nmap进行基本的端口扫…...

压力测试+接口测试(工具jmeter)

jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简单。因 为jmeter是java开发的&#xff0c;所以运行的时候必须先要安装jdk才可以。jmeter是…...

LeetCode 46 全排列

题目描述 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入…...

npm install 无反应 npm run serve 无反应

说明情况&#xff1a;其实最开始我就是发现我跟着黑马的苍穹外卖的前端day2的环境搭建做的时候&#xff0c;到这一步出现了问题&#xff0c;无论我怎么 npm install 和 npm run serve 都没有像黑马一样有很多东西进行加载&#xff0c;因此我换了一种方法 1.在这个文件夹下cmd …...

JAVAEE初阶 文件IO(二)

文件IO 一. 文件流1.1 字节流 inputStream(1) try with resources方法 1.2 read方法(1) 第一个read方法(2) 第二个read方法(3) read的第三个方法 1.3 字节流 OutoutStream1.4 字符流(1) reader(2) writer 一. 文件流 1.1 字节流 inputStream 在字节流中,我们使用inputStream和…...

PostgreSQL 判断大导入是否正在执行 pg_stat_activity

PostgreSQL 判断大导入还在跑吗&#xff1f;pg_stat_activity 完整笔记&#xff08;ERP Staging 场景&#xff09; 摘要 大批量 ERP 资源导入&#xff08;Excel → erp_resource_import_staging → 合并正式表&#xff09;时&#xff0c;Java 应用常因单条大 SQL 长时间无日志&…...

OpenClaw技能市场巡礼:Phi-3-mini-128k-instruct适配的十大实用工具

OpenClaw技能市场巡礼&#xff1a;Phi-3-mini-128k-instruct适配的十大实用工具 1. 为什么需要技能市场&#xff1f; 当我第一次接触OpenClaw时&#xff0c;最让我惊喜的不是它能够操控鼠标键盘的能力&#xff0c;而是它背后那个充满可能性的技能市场。作为一个长期与命令行打…...

嵌入式系统中命令模式的应用与优化

1. 嵌入式系统中的误操作救赎之道在嵌入式开发中&#xff0c;参数配置误操作就像厨房里的盐罐打翻——一瞬间的失误可能导致整锅菜报废。上周我就遇到一个真实案例&#xff1a;某工业设备因为工程师误触"恢复出厂设置"&#xff0c;导致产线上30台设备参数全部重置&am…...

IT自动化运维平台建设解决方案:三阶段演进思路、平台架构与核心能力、关键功能模块、典型自动化场景与执行流程

该方案提出从人工运维向自动化、智能化演进&#xff0c;核心是通过统一平台整合Zabbix监控、脚本管理与工单系统&#xff0c;实现告警自动治愈与周期性任务自动化执行。方案采用分批推进策略&#xff0c;旨在提升效率、保障业务连续性并降低人为风险&#xff0c;最终落地智能化…...

从火柴盒到AI:探索MENACE的数字化旅程

在计算机科学的历史中,有许多有趣的实验和发明,其中之一便是由唐纳德米奇(Donald Michie)设计的“火柴盒计算机”(Matchbox Educable Noughts and Crosses Engine,简称MENACE)。这个装置使用了火柴盒和彩色珠子来模拟人工智能,教机器玩井字游戏(Tic-Tac-Toe)。本文将…...

drm_gpusvm 与 drm_pagemap 执行顺序分析

概述 在 SVM&#xff08;Shared Virtual Memory&#xff09;实现中&#xff0c;drm_gpusvm 和 drm_pagemap 分属两个不同的抽象层&#xff0c;协同完成 GPU 对进程虚拟地址空间的共享访问。两者的执行顺序并非固定的"先底层后上层"&#xff0c;而是根据操作场景有不同…...

Linux网络编程核心API速查手册

认识Pass层级结构 Pass范围从上到下一共分为5个层级&#xff1a; 模块层级&#xff1a;单个.ll或.bc文件 调用图层级&#xff1a;函数调用的关系。 函数层级&#xff1a;单个函数。 基本块层级&#xff1a;单个代码块。例如C语言中{}括起来的最小代码。 指令层级&#xff1a;单…...

测试计划详细说明

一份高质量的测试计划本质上是质量风险的防御蓝图&#xff0c;它要在有限资源和无限质量诉求之间找到平衡点。我将从结构、内容、决策逻辑三个维度展开&#xff0c;并提供一个可直接落地的框架。一、测试计划的核心定位测试计划的本质回答三个问题&#xff1a;测什么&#xff1…...

移动端ncnn部署YOLOv11:从官方转换到实战排错

1. 移动端部署YOLOv11的完整流程 在移动端部署YOLOv11模型&#xff0c;ncnn无疑是最佳选择之一。这个轻量级的高性能神经网络前向计算框架&#xff0c;专为移动端优化设计。我最近刚完成一个项目&#xff0c;需要把YOLOv11部署到安卓设备上&#xff0c;整个过程虽然踩了不少坑…...

【硬件小达人-基础篇(1)】-电阻那些事儿

文章目录什么是电阻电阻的功率一定要降额使用电阻的额定电压和精度额定电压精度PCB设计中&#xff0c;电阻的作用1.限流电阻保护敏感元件常用经验2.分压电阻电压反馈ADC采集电路一些经验3.分流电阻4.上拉电阻/下拉电阻什么是上下拉作用一、 防止引脚悬空&#xff0c;消除外部干…...