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

SpringMVC (二)请求处理

目录

章节简介

一 请求处理(初级)

eg:请求头

二 请求处理(进阶)

eg:请求体

三 获取请求头

四 获取Cookie

五 级联封装

六 使用@RequestBoby封装JSON对象

七 文件的上传

八 获取整个请求 HttpEntity

九 原生请求


Spring MVC 是 Spring 框架中的一个核心模块,专门用于构建 灵活、松耦合的 Web 应用程序。它基于经典的 MVC(Model-View-Controller)设计模式,但通过 Spring 的依赖注入(DI)和面向切面(AOP)等特性,简化了开发流程,提高了代码的可维护性。

与传统 Servlet/JSP 对比

特性Spring MVC传统 Servlet/JSP
耦合性低(基于接口和注解)高(直接依赖 Servlet API)
配置注解驱动,简化 XML/Java 配置需手动配置 web.xml
测试易于单元测试(Mock 框架支持)测试复杂(依赖容器)
扩展性模块化设计,易于扩展扩展需手动管理
功能集成无缝集成 Spring 生态(如安全、事务)需自行整合其他库

复习巩固前言JSON

图示:

章节简介

一 请求处理(初级)

eg:请求头

1 处理请求参数

前端代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>信息提交表单</title>
</head>
<body>
<h3>信息采集</h3>
<!-- 指定提交地址为 /handle02  表单数据会附加在 URL 参数中-->
<form action="/handle02" method="get"><fieldset><legend>主要信息</legend><label for="account1">账户:</label><input type="text" id="account1" name="account" value="" maxlength="10"><br><label>密码:<input type="password" id="password1" name="pw" maxlength="9"></label><br><label>性别:<input type="radio" name="gender" id="gender1" value="male" checked> 男<input type="radio" name="gender" value="female"> 女</label><br><label>爱好:<input type="text" id="hobby" name="hobby"><input type="checkbox" name="hobby" value="smoke"> 抽烟<input type="checkbox" name="hobby" value="drink"> 喝酒<input type="checkbox" name="hobby" value="perm"> 烫头</label><br></fieldset>其他补充信息:<br><textarea name="other" cols="25" rows="2"></textarea><br>籍贯:<select name="place"><option value="鲁">山东省</option><option value="皖">安徽省</option><option value="粤">广东省</option><option value="京" selected>北京市</option><option value="苏">江苏省</option></select><br><input type="hidden" name="hid" value="hahahahahahaha"><input type="submit" value="确认"><input type="reset" value="重置">
</form>
</body>
</html>

请求方法类:

package org.example.spring04mvc.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
public class RequestTestController {@RequestMapping("/handle01")public String handleRequest(@RequestParam String account,@RequestParam String pw,@RequestParam String gender,@RequestParam List<String> hobby,@RequestParam(required = false) String other,@RequestParam String place,@RequestParam String hid) {System.out.println("Account: " + account);System.out.println("Password: " + pw);System.out.println("Gender: " + gender);System.out.println("Hobbies: " + hobby);System.out.println("Place: " + place); // 自动处理URL编码(如"京")if (other != null) {System.out.println("Other: " + other);}System.out.println("隐藏信息: " + hid);return "表单上传成功!";}}

Sprig项目启动页面展示

个人控制台与浏览器展示:

二 请求处理(进阶)

eg:请求体

前端代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>信息提交表单</title>
</head>
<body>
<h3>信息采集</h3>
<!-- 指定提交地址为 /handle02 表单数据会通过 HTTP 请求体(Body) 发送到服务器。 -->
<form action="/handle02" method="post"><fieldset><legend>主要信息</legend><label for="account1">账户:</label><input type="text" id="account1" name="account" value="" maxlength="10"><br><label>密码:<input type="password" id="password1" name="pw" maxlength="9"></label><br><label>性别:<input type="radio" name="gender" id="gender1" value="male" checked> 男<input type="radio" name="gender" value="female"> 女</label><br><label>爱好:<input type="text" id="hobby" name="hobby"><input type="checkbox" name="hobby" value="smoke"> 抽烟<input type="checkbox" name="hobby" value="drink"> 喝酒<input type="checkbox" name="hobby" value="perm"> 烫头</label><br></fieldset>其他补充信息:<br><textarea name="other" cols="25" rows="2"></textarea><br>籍贯:<select name="place"><option value="鲁">山东省</option><option value="皖">安徽省</option><option value="粤">广东省</option><option value="京" selected>北京市</option><option value="苏">江苏省</option></select><br><input type="hidden" name="hid" value="hahahahahahaha"><input type="submit" value="确认"><input type="reset" value="重置">
</form>
</body>
</html>

封装:(可能由于版本问题@Data使用出错)

package org.example.spring04mvc.bean;import lombok.Data;@Data
public class emailUsers {// 账号指定默认值private String account="zhangsan";private String pw;private String gender;private String hid;private String place;private String other;private String[] hobby;}

指定:

package org.example.spring04mvc.controller;import org.example.spring04mvc.bean.emailUsers;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
public class RequestTestController {@RequestMapping("/handle01")public String handleRequest(@RequestParam String account,@RequestParam String pw,@RequestParam String gender,@RequestParam List<String> hobby,@RequestParam(required = false) String other,@RequestParam String place,@RequestParam String hid) {System.out.println("Account: " + account);System.out.println("Password: " + pw);System.out.println("Gender: " + gender);System.out.println("Hobbies: " + hobby);System.out.println("Place: " + place); // 自动处理URL编码(如"京")if (other != null) {System.out.println("Other: " + other);}System.out.println("隐藏信息: " + hid);return "表单上传成功!";}@RequestMapping("/handle02")public String handleRequest02(emailUsers emailUser){System.out.println(emailUser);return "表单上传成功!";}}

运行结果:

三 获取请求头

    @RequestMapping("/handle03")public String handleRequest03(@RequestHeader(value = "Host",defaultValue = "localhost") String host) {System.out.println(host);return "Ok" + host;}

四 获取Cookie

    @RequestMapping("/handle04")public String handleRequest04(@CookieValue(value = "JSESSIONID",defaultValue = "") String sessionId) {System.out.println(sessionId);return "Ok" + sessionId;}

五 级联封装

六 使用@RequestBoby封装JSON对象

代码实现:

    //测试接收JSON数据,获取请求体json的数据,自动转为对象@RequestMapping("/handle06")public String handleRequest06(@RequestBody emailUsers emailUser) {System.out.println(emailUser);return "OK";}
    //将JSON对象以字符串接收@RequestMapping("/handle07")public String handleRequest07(@RequestBody String json) {System.out.println(json);return "OK";}

七 文件的上传

    //接收文件上传表单@RequestMapping("/handle08")public String handleRequest08(emailUsers emailUser,@RequestParam("file") MultipartFile f1,@RequestParam("file2") MultipartFile[] f2) throws IOException {// 1获取原始文件名String originalFilename = f1.getOriginalFilename();// 2获取文件大小long size = f1.getSize();// 3获取文件流InputStream inputStream = f1.getInputStream();// 4文件保存f1.transferTo(new File("D:\\" + originalFilename));System.out.println(emailUser);return "OK";}

更改部分参数

八 获取整个请求 HttpEntity

HttpEntity 是 Spring Framework 中用于表示 HTTP 请求或响应实体 的核心类,它封装了 HTTP 消息的 头部(Headers) 和 正文(Body),常用于客户端和服务端之间的数据交互。以下是其核心特性和用法:


1. 核心功能

  • 封装数据:包含 HTTP 消息的 body(如 JSON、XML、表单数据)和 headers(如 Content-TypeAuthorization)。

  • 支持泛型HttpEntity<T> 允许指定正文内容的类型(如 Stringbyte[]Map 或自定义对象)。

  • 不可变性:创建后不可修改,若需变更需通过 HttpEntity 的构建方法生成新实例。

    // HttpEntity 封装请求头请求体,把整个请求拿过来封装@RequestMapping("/handle09")public String handleRequest09(HttpEntity<String> httpEntity){//拿到请求头HttpHeaders headers = httpEntity.getHeaders();//拿到请求体String body = httpEntity.getBody();return "OK";}

九 原生请求

    //使用原生API@RequestMapping("/handle10")public String handleRequest10(HttpServletRequest request) throws IOException {//拿到请求头Enumeration<String> headerNames = request.getHeaderNames();//拿到请求体String body = request.getReader().readLine();return "OK";}


http://www.mrgr.cn/news/94558.html

相关文章:

  • Go语言对于MySQL的基本操作
  • 【后端开发面试题】每日 3 题(十三)
  • 图解AUTOSAR_CP_BSW_General
  • Python软件和搭建运行环境
  • [多线程]基于单例懒汉模式的线程池的实现
  • Centos7使用docker搭建redis集群
  • Java 大视界 -- Java 大数据中的异常检测算法在工业物联网中的应用与优化(133)
  • Linux 命令学习记录
  • C++基础 [三] - 面向对象三
  • Java 大视界 -- Java 大数据在智能金融资产定价与风险管理中的应用(134)
  • Keil5下载教程及安装教程(附安装包)
  • Java基础语法练习42(基本绘图-基本的事件处理机制-小坦克的绘制-键盘控制坦克移动)
  • 推荐系统基础
  • 操作系统-八股
  • 每日一题---dd爱框框(Java中输入数据过多)
  • 每日一题---腐烂的苹果(广度优先搜索)
  • 网络爬虫【简介】
  • C++中string常用方法总结
  • 6.PE文件新增节
  • 【算法】动态规划