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>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习在医疗保健领域的应用:从图像识别到疾病预测

文章目录 深度学习在医学影像识别中的应用1. 癌症检测2. 病理学图像分析3. 医学图像分割 深度学习在疾病预测中的应用1. 疾病风险预测2. 疾病诊断辅助3. 药物研发 深度学习在个性化治疗中的应用1. 基因组学分析2. 临床数据集成 深度学习在医疗保健中的挑战和未来数据隐私和安全…

【小吉送书—第二期】阿里后端开发:抽象建模经典案例

文章目录 0.引言1.抽象思维2.软件世界中的抽象2.1 命名抽象2.2 分层抽象2.3 原则抽象 3. 经典抽象案例3.1 方案一&#xff1a;战术抽象&#xff0c;多快好省&#xff0c;跑步前进3.2 方案二&#xff1a;深入分析&#xff0c;透过表象&#xff0c;探寻本质 5. 推荐一本书&#x…

给 Ubuntu 操作系统配置静态 IP

针对 Ubuntu 22.04.3 操作系统的静态 IP 配置 一、查看初始的网络信息 查看网卡名称 ifconfig查看网关信息 route -n二、编辑网络配置文件 编辑文件&#xff0c;配置文件的名称可能不一样&#xff0c;自己去 /etc/netplan/ 目录查看 sudo vim /etc/netplan/01-network-manager-…

虚幻引擎集成web前端<一>:win环境UE4.27导出像素流并集成到vue2环境(附案例)

本案例附件&#xff1a;https://download.csdn.net/download/rexfow/88303544 第一部分&#xff1a;虚幻引擎导出像素流windows包 第1步&#xff1a;软件设置 -AudioMixer -PixelStreamingIPlocalhost -PixelStreamingPort8888 第2步&#xff1a;信令服务器设置 1、执行run_l…

WebSocket原理简介

慢聊Go之GoLang中使用Gorilla Websocket&#xff5c;Go主题月 - 掘金 (juejin.cn) 【Go项目】24. WebSocket 基本原理_哔哩哔哩_bilibili 1.http和socket的区别 1&#xff09; http要先给服务器发请求&#xff0c;然后才会得到响应&#xff0c;基本是一问一答式。 而socke…

DataX实现Mysql数据同步到ElasticSearch(ES)

Linux环境要求 jdk1.8及以上 python2 准备工作 Linux安装jdk yum install -y java-1.8.0-openjdk.x86_64查看是否安装成功 java -versionlinux安装python yum install -y python查看python版本号&#xff0c;判断是否安装成功 python --version下载DataX&#xff1a; Dat…

部署elasticsearch集群

创建es集群 编写一个docker-compose.yaml文件&#xff0c;内容如下 version: 2.2 services:es01:image: elasticsearch:7.12.1container_name: es01environment:- node.namees01- cluster.namees-docker-cluster- discovery.seed_hostses02,es03- cluster.initial_master_nod…

线性代数(六) 线性变换

前言 《线性空间》定义了空间&#xff0c;这章节来研究空间与空间的关联性 函数 函数是一个规则或映射&#xff0c;将一个集合中的每个元素&#xff08;称为自变量&#xff09;映射到另一个集合中的唯一元素&#xff08;称为因变量&#xff09;。 一般函数从 “A” 的每个元…

3招“挽回”:微信怎么恢复聊天记录

由于工作需要&#xff0c;经常使用微信与客户对接。害怕内存不足&#xff0c;所以我每个月都会清理一些不需要的文件&#xff0c;结果却不小心误删了与客户的聊天记录&#xff0c;有什么方法能够恢复回来吗&#xff1f; 聊天记录是微信的一个重要组成部分&#xff0c;里面保存着…

智慧公厕是对智慧城市“神经末梢”的有效激活,公共厕所实现可感知、可视化、可管理、可控制

在当今科技迅速发展的时代&#xff0c;智慧城市已经成为人们关注的热点话题。作为城市基础设施的重要组成部分&#xff0c;公共厕所也逐渐融入到智慧城市的建设中&#xff0c;成为城市管理的焦点之一。智慧公厕作为智慧城市的“神经末梢”&#xff0c;通过可感知、可视化、可管…

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续,山水长

JP《乡村振兴振兴战略下传统村落文化旅游设计》许少辉书香续&#xff0c;山水长

浅析目标检测入门算法:YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4

本文致力于让读者对以下这些模型的创新点和设计思想有一个大体的认识&#xff0c;从而知晓YOLOv1到YOLOv4的发展源流和历史演进&#xff0c;进而对目标检测技术有更为宏观和深入的认知。本文讲解的模型包括&#xff1a;YOLOv1,SSD,YOLOv2,YOLOv3,CenterNet,EfficientDet,YOLOv4…

TypeScript:赋予JavaScript数据类型新的力量,提升编程效率!

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ &#x1f4da; 前言 TypeScript&#xff1a;扩展JavaScript数据类型&#xff0c;赋予编程更强大的表达能力&#xff01…

React三属性之:props

作用 将父组件的参数传递给子组件 父组件 import ./App.css; import React from react; import PropsTest from ./pages/propsTest class App extends React.Component{render(){return(<div><h2>App组件</h2><PropsTest obj{{name:王惊涛,age:27}}>…

构建企业分支网络

构建企业分支网络 目录 1.1 项目背景 1.2 项目拓扑 1.3 项目需求 1.4 设备选型 1.5 技术选型 1.6 地址规划 1.6.1 交换设备地址规划表 1.6.2 路由设备地址规划表 1.6.3 ISP设备地址规划表 1.6.4 终端地址规划表 1.6.4.1 VLAN 规划 1.7 VLAN 规划 1.8 项目实施 1.…

无法将类型为“Newtonsoft.Json.Linq.JObject”的对象转换为类型“Newtonsoft.Json.Linq.JArray”解决方法

对于“Newtonsoft.Json.Linq.JObject”的对象强制类型转换为类型“Newtonsoft.Json.Linq.JArray”报错 第一的图为对象{“*************”:“********”} 第二个图片为数组[{“…”:“…”}] 在我这里进行强制转换对象转换为类型“Newtonsoft.Json.Linq.JArray”报错. 那我们…

Maven中导入jQuery,前端页面中引用jQuery

第一步pom文件中&#xff0c;配置maven坐标。 第二步&#xff0c;在前端页面中引用jQuery 注&#xff1a;该前端页面需要在web根目录即webapp目录下。可认为在maven中导入jQuery后&#xff0c;jquery.min.js文件放在目录webapp/webjars/jquery/3.3.1下。

新手小白制作产品册的攻略合集

在如今竞争激烈的市场中&#xff0c;一个精美而专业的产品册可以帮助你吸引更多的客户和提升品牌形象。然而&#xff0c;对于新手小白来说&#xff0c;制作产品册可能会显得有些困难。不用担心&#xff01;小编将告诉大家一些制作产品册的攻略&#xff0c;帮助你轻松入门 首先我…

MySQL触发器使用指南大全

一、介绍 触发器是与表有关的数据库对象&#xff0c;指在insert/update/delete之前或之后&#xff0c;触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&#xff0c;数据校验等操作。 使用别名OLD和NEW来引…

yolov7添加pconv模块

连接pconv 1、复制到models-common.py文件最后 2、添加模块到yolo.py 3、修改网络&#xff0c;建议替换3x3的卷积&#xff0c;后面的参数不要了 4、不能替换步长为2的卷积