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

SpringMVC应用

文章目录

  • 一、常用注解
  • 二、参数传递
    • 2.1 基础类型+String
    • 2.2 复杂类型
    • 2.3 @RequestParam
    • 2.4.路径传参 @PathVariable
    • 2.4 Json数据传参 @RequestBody
    • 2.5 @RequestHeader
  • 三、方法返回值
    • 3.1 void
    • 3.2 String+model
    • 3.3 ModelAndView

一、常用注解

SpringMVC是一个基于Java的Web框架,它提供了一系列的注解来简化开发过程。以下是一些常用的SpringMVC注解:

  1. @Controller: 用于标识一个类为控制器,处理用户请求并返回相应的结果
  2. @RequestMapping:、 用于映射请求URL和处理方法,可以用在类级别和方法级别。在类级别上,可以指定公共的URL前缀,而在方法级别上,可以指定具体的URL路径。
  3. @RequestParam: 用于将请求参数绑定到方法的参数上。可以指定参数的名称、是否必需以及默认值。
  4. @PathVariable: 用于将URL路径中的变量绑定到方法的参数上。可以指定变量的名称和是否必需。
  5. @ResponseBody: 用于将方法的返回值直接写入HTTP响应体中,而不是通过视图解析器进行渲染。
  6. @ModelAttribute:用于将请求参数绑定到方法的参数上,并将其添加到模型中。可以指定参数的名称和是否必需。
  7. @SessionAttributes:用于指定模型中的属性应该存储在会话中,以便在多个请求之间共享。
  8. @Valid:用于启用参数的校验功能,可以与JSR-303/JSR-349标准的注解一起使用。

这些注解只是SpringMVC中的一部分,还有其他很多注解可以用于处理拦截器、异常处理、文件上传等功能。具体使用哪些注解取决于你的需求和项目的架构。

二、参数传递

SLF4J(Simple Logging Facade for Java)是一个为Java应用程序提供日志记录的简单门面(facade)框架。它允许开发人员在应用程序中使用统一的API来记录日志,而无需关心底层日志实现的细节。SLF4J提供了一种灵活的方式来切换不同的日志实现,如Logback、Log4j和java.util.logging等。通过使用SLF4J,开发人员可以在不修改应用程序代码的情况下更改日志记录实现,从而提供了更好的可维护性和灵活性。
pom.xml

<log4j2.version>2.9.1</log4j2.version>
<log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
<slf4j.version>1.7.13</slf4j.version>//-------------------------------------------------<!--4.log日志相关依赖--><!-- log4j2日志相关依赖 -->
<!-- log配置:Log4j2 + Slf4j -->
<!-- slf4j核心包-->
<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version>
</dependency>
<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version><scope>runtime</scope>
</dependency><!--核心log4j2jar包-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>${log4j2.version}</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>${log4j2.version}</version>
</dependency>
<!--用于与slf4j保持桥接-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-slf4j-impl</artifactId><version>${log4j2.version}</version>
</dependency>
<!--web工程需要包含log4j-web,非web工程不需要-->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-web</artifactId><version>${log4j2.version}</version><scope>runtime</scope>
</dependency><!--需要使用log4j2的AsyncLogger需要包含disruptor-->
<dependency><groupId>com.lmax</groupId><artifactId>disruptor</artifactId><version>${log4j2.disruptor.version}</version>
</dependency>

2.1 基础类型+String


package com.xqx.web;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Slf4j
@Controller
@RequestMapping("/param")
public class ParamController {@RequestMapping("/hello1")public String toHello1(Integer bid,String bname){log.info("基础类型+String传参:bid:{},bname:{}",bid,bname);return "index";}

在这里插入图片描述

在这里插入图片描述

2.2 复杂类型

@Slf4j
@Controller
@RequestMapping("/param")public String hello1(Book book, HttpServletRequest request){//servlet参数获取方式log.info("复杂类型参数:bname:{},bid:{}",request.getParameter("bid"),request.getParameter("bname"));//复杂传参log.info("复杂类型参数:book:{}", book.toString());return "index";}

在这里插入图片描述
在这里插入图片描述

2.3 @RequestParam

	@Slf4j@Controller@RequestMapping("/hello3")public String requestParam(@RequestParam String bname,@RequestParam(required = false)  Integer bid) {log.info("requestParam类型参数 bname:{},bid:{}", bname, bid);return "index";}

在这里插入图片描述

这种参数传递类型,如果不传参会报错

被@RequestParam注解的参数required默认为true表示请求中一定要传入对应的参数,否则会报404错误如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。

2.4.路径传参 @PathVariable

如果我要通过id进行删除某一项可以用PathVariable注释

    @RequestMapping("/hello4/{bid}")public String rjcc(@PathVariable("bid")Integer bid) {log.info("PathVariable bid:{}",bid);return "index";}

在这里插入图片描述
在这里插入图片描述

2.4 Json数据传参 @RequestBody

在实际开发中运用最多的就是通过Json数据进行传输,SpringMVC默认使用的是jackson来处理json的转换,所以需要在pom.xml添加jackson依赖。另外推荐使用postman或者apipost/eolink等工具发送请求数据。

 <jackson.version>2.9.3</jackson.version><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>${jackson.version}</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>${jackson.version}</version></dependency>
//    能接受json数据,前提导入了Jackson依赖,没有导入Jackson依赖的话那进不了这个方法@RequestMapping("/hello6")public String RequestBody2(@RequestBody Map map) {log.info("RequestBody map:{}",map);return "index";}//  不能接受json数据@RequestMapping("/hello5")public String RequestBody1(Map map) {log.info("RequestBody map:{}",map);return "index";}

在这里插入图片描述

2.5 @RequestHeader

@RequestHeader 注解可以用在方法的参数上,用于将指定的请求头的值注入到方法参数中。

    @RequestMapping("/hello7")public String RequestHeader(@RequestHeader("jwt") String  jwt) {log.info("RequestHeader jwt:{}",jwt);return "index";}

在这里插入图片描述

三、方法返回值

为了方便模拟效果,借助ResponseUtil工具类,ResponseUtil类提供了一种方便的方式来将对象以文本或JSON格式写入HTTP响应流中,以便在Web应用程序中向客户端返回数据。
ResponseUtil:

package com.xqx.util;import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;public class ResponseUtil {public static void write(HttpServletResponse response,Object o)throws Exception{response.setContentType("text/html;charset=utf-8");PrintWriter out=response.getWriter();out.println(o.toString());out.flush();out.close();}public static void writeJson(HttpServletResponse response,Object o)throws Exception{ObjectMapper om = new ObjectMapper();
//		om.writeValueAsString(o)代表了json串write(response, om.writeValueAsString(o));}
}

3.1 void


@Controller
@RequestMapping("/rs")
public class ReturnController {@RequestMapping("/hello1")public void hello1(HttpServletResponse response){Map<String,Object> map=new HashMap<>();map.put("code",200);map.put("msg","成功添加...");try {ResponseUtil.writeJson(response,map);} catch (Exception e) {e.printStackTrace();}}

在这里插入图片描述

3.2 String+model

jsp

<%--Created by IntelliJ IDEA.User: 86156Date: 2023/9/5Time: 15:49To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
名称:${name}
地址:${address}
</body>
</html>

测试

@Controller
@RequestMapping("/rs")
public class ReturnController {@RequestMapping("/hello2")public String hello2(Model model,HttpServletRequest request){model.addAttribute("name","xqx");request.setAttribute("address","长沙");return "index";}}

在这里插入图片描述

3.3 ModelAndView


@Controller
@RequestMapping("/rs")
public class ReturnController {@RequestMapping("/hello3")public ModelAndView hello3(){ModelAndView mv=new ModelAndView();mv.addObject("xqx","666");mv.setViewName("index");return mv;}}

jsp

<%--Created by IntelliJ IDEA.User: 86156Date: 2023/9/5Time: 17:00To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
名称:${name}
地址:${address}
评价:${xqx}
</body>
</html>

在这里插入图片描述

相关文章:

SpringMVC应用

文章目录 一、常用注解二、参数传递2.1 基础类型String2.2 复杂类型2.3 RequestParam2.4.路径传参 PathVariable2.4 Json数据传参 RequestBody2.5 RequestHeader 三、方法返回值3.1 void3.2 Stringmodel3.3 ModelAndView 一、常用注解 SpringMVC是一个基于Java的Web框架&#…...

百度输入法全面升级,打造首个基于大模型的输入法原生应用

基于文心一言&#xff0c;百度输入法宣布全面升级&#xff0c;打造行业首个“基于大模型的输入法原生应用”&#xff0c;从“输入工具”全面转型为“AI创作工具”。 近日&#xff0c;百度文心一言正式向公众开放。基于文心一言&#xff0c;百度输入法宣布全面升级&#xff0c;打…...

如何解决GitHub 访问不了?小白教程

GitHub 是全球最大的代码开源平台&#xff0c;小伙伴们平时都喜欢在那里找一些优质的开源项目来学习&#xff0c;以提升自己的编程技能。 但是很多小白初探GitHub 发现访问不了&#xff0c;不能访问 通过一下方法绕过这堵墙&#xff0c;成功下载 GitHub 上的项目。过程非常简单…...

龙芯指令集LoongArch——学习笔记(1)

1 龙芯架构 PDF下载链接&#xff1a; https://www.loongson.cn/download/index 1.1 龙芯架构概述 龙芯架构具有 RISC 指令架构的典型特征。 它的指令长度固定且编码格式规整&#xff0c; 绝大多数指令只有两个源操作数和一个目的操作数&#xff0c; 采用 load/store 架构&…...

ubuntu 20.04 docker安装emqx 最新版本或指定版本

要在Ubuntu 20.04上使用Docker安装EMQX&#xff08;EMQ X Broker&#xff09;的4.4.3版本&#xff0c;您可以执行以下步骤&#xff1a; 1.更新系统包列表&#xff1a; sudo apt update2.安装Docker&#xff1a; sudo apt install docker.io3.启动Docker服务并设置其开机自启…...

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…...

CEF内核和高级爬虫知识

(转)关于MFC中如何使用CEF内核&#xff08;CEF初解析&#xff09; Python GUI: cefpython3的简单分析和应用 cefpython3&#xff1a;一款强大的Python库 开始大多数抓取尝试可以从几乎一行代码开始&#xff1a; fun main() PulsarContexts.createSession().scrapeOutPages(&q…...

视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台视频能力丰富灵活&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传…...

科技成果鉴定测试报告一般包含哪些测试内容?

软件测评报告 一、科技成果评价是需要做第三方软件测评报告&#xff0c;一般是证明技术指标点是否完善&#xff0c;覆盖主要申报内容&#xff0c;应用软件项目科技成果鉴定测试内容&#xff1a; &#xff08;一&#xff09;是否完成合同或计划任务书要求的指标&#xff1b; …...

IDEA中的“Deployment“ 将项目直接部署到服务器上

ntelliJ IDEA中的"Deployment"工具栏是一个方便的工具&#xff0c;用于将你的项目直接部署到服务器上。这个工具栏提供了三种部署的方式&#xff1a; 1.Web Server在本地电脑上&#xff0c;并且服务器运行目录也在项目目录下。 2.Web Server在本地电脑上&#xff0c;…...

密室逃脱小游戏

欢迎来到程序小院 密室逃脱 玩法&#xff1a; 判断可生存的空间&#xff0c;鼠标点击屏幕进行人物左右移动&#xff0c;躲避闸道进行生存&#xff0c;每进行一次关卡都会有分数统计&#xff0c;赶紧去闯关吧^^。开始游戏https://www.ormcc.com/play/gameStart/176 html <c…...

【MyBatis】MyBatis项目结构的搭建

Mybatis项目的搭建 依赖 将打包方式添加为jar包 <groupId>com.qinghe.mybatis</groupId><artifactId>Mybatis_demo3</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging>添加如下依赖 <depen…...

Vant组件库入门知识

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

Java字符串查找

目录 1.查找字符 &#xff08;1&#xff09;以索引查找字符 &#xff08;2&#xff09;以字符查找索引 2.查找字符串 在给定的字符串中查找需要的字符或字符串是常见的操作&#xff0c;以下是String类中常用的查找方法。 1.查找字符 查找字符分为两种情况&#xff1a;一种…...

2023年7月京东投影仪行业品牌销售排行榜(京东大数据)

鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉&#xff01; 7月份&#xff0c;投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知&#xff0c;7月京东平台投影仪的销量将近20万&#xff0c;同比增长约16%&#xff1b;销售额将近3.8亿&#xff0c;同比增长约4%。 ​*数据…...

设计模式-01简单工厂模式详解 详细代码对比

目录 ChatGpt问答原生代码简单工厂模式代码 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;新增boat 对比两种方法原生代码为什么使用强制转换&#xff1f;简单工厂模式 简单工厂方法总结与原生代码的区别&#xff1a;优点:缺点&#xff1a; 参考 本文将介绍什么…...

IPD-PDT-POP角色的名称、定位和职责说明书

在IPD推进中&#xff0c;有一个不是很关键但却离不开的角色叫做POP&#xff0c;POP这个角色通常是设置在PDT团队中。 那么IPD的PDT团队中的POP这个角色到底是什么意思呢&#xff1f;POP如何开展工作&#xff0c;以及POP的主要岗位职责有哪些呢&#xff1f;华研荟今天给大家分享…...

在MySQL中查看数据库和表的数据大小

在MySQL中查看数据库和表的数据大小 在管理和维护MySQL数据库时&#xff0c;了解数据库和表的数据大小是非常重要的。这可以帮助您监控数据库的增长、优化性能以及规划存储需求。本博客将介绍如何使用SQL查询来查看MySQL数据库和表的数据大小。 查看MySQL数据库的总数据大小 …...

Android前端音视频数据接入GB28181平台意义

技术背景 在华脉智联研发Android平台GB28181前端音视频接入模块之前&#xff0c;业内听到最多的是&#xff0c;如何用Android端在没有国标摄像头设备的前提下&#xff0c;模拟GB28181的信令和媒体流交互流程&#xff0c;实现GB28181整体方案的测试。 Android端真的没有必要做…...

Ubuntu 20.04上docker安装Redis

要在Ubuntu 20.04上使用Docker安装Redis&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1.更新系统包列表&#xff1a;sudo apt update2.安装Docker&#xff1a;sudo apt install docker.io3.启动Docker服务并设置其开机自启动&#xff1a;sudo systemctl start docker …...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...