【第3章】spring-mvc请求参数处理

news2024/12/29 16:25:42

文章目录

  • 前言
  • 一、准备
    • 1. 增加mavan配置
  • 二、简单参数
    • 1.JSP
    • 2.Controller
  • 三、复杂参数
    • 1.JSP
    • 2.Controller
  • 三、扩展
    • 1.JSP
    • 2.header
    • 3.cookie
    • 4.session
  • 总结


前言

在上一章的基础上,我们来学习对于请求参数的解析,前后端分离已经是大势所趋,JSP相关部分建议大家了解即可。


一、准备

1. 增加mavan配置

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version> <!-- 确保你使用的是支持-parameters标志的版本 -->
    <configuration>
        <source>17</source> <!-- 或者你的目标Java版本 -->
        <target>17</target> <!-- 或者你的目标Java版本 -->
        <compilerArgs>
            <arg>-parameters</arg>
        </compilerArgs>
    </configuration>
</plugin>

二、简单参数

1.JSP

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
  <title>JSP - Hello RequestParam</title>
</head>
<body>
<h1><%= "简单类型参数演示" %></h1>
<br/>
<form action="/params01" method="post">
  <span>姓名:</span><input name="name">
  <span>年龄:</span><input name="age">
  <button type="submit">params01</button>
</form>
<form action="/params02" method="post">
  <span>姓名:</span><input name="userName">
  <button type="submit">params02</button>
</form>
<a href="/params03">params03</a><br>
<a href="/params04">params04</a><br>
</body>
</html>

2.Controller

package org.example.springmvc.params.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * Create by zjg on 2024/4/27
 */
@Controller
public class ParamsController {
    @RequestMapping("hello-params")
    public String params(HttpServletRequest request){//重定向
        System.out.println(request.getCharacterEncoding());
        return "redirect:params/params.jsp";
    }
    @RequestMapping(value = "params01",method = RequestMethod.POST)
    public String params01(String name, Integer age){//接收两种参数
        System.out.println(name);
        System.out.println(age);
        return "forward:params/params.jsp";
    }
    @RequestMapping(value="params02",method = RequestMethod.POST)
    public String params02(@RequestParam("userName") String name){//别名
        System.out.println(name);
        return "forward:params/params.jsp";
    }
    @RequestMapping("params03")
    public String params03(@RequestParam(required = false) String name){//非必传
        System.out.println(name);
        return "forward:params/params.jsp";
    }
    @RequestMapping("params04")
    public String params04(@RequestParam(defaultValue = "admin")String name){//默认值
        System.out.println(name);
        return "forward:params/params.jsp";
    }
}

三、复杂参数

1.JSP

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
  <title>JSP - Hello RequestParam</title>
</head>
<body>
<h1><%= "复杂类型参数演示" %></h1>
<form action="/params05" method="post">
  <span>编号:</span><input name="id"><br>
  <span>姓名:</span><input name="name"><br>
  <span>外号:</span>
  <input name="alias[0]" type="checkbox" value="狗蛋">狗蛋
  <input name="alias[1]" type="checkbox" value="狗蛋">铁蛋<br>
  <span>爱好:</span>
  <input name="hobbies[0]" type="checkbox" value="读书">读书
  <input name="hobbies[1]" type="checkbox" value="看报">看报<br>
  <span>家人们:</span>
  <input name="relatives[father]" type="checkbox" value="爸爸">爸爸
  <input name="relatives[mother]" type="checkbox" value="妈妈">妈妈<br>
  <span>角色:</span>
  <span>编号:</span><input name="role.id">
  <span>名称:</span><input name="role.name"><br>
  <span>朋友们:</span><br>
  <span>编号:</span><input name="friends[0].id">
  <span>名称:</span><input name="friends[0].name"><br>
  <span>编号:</span><input name="friends[1].id">
  <span>名称:</span><input name="friends[1].name"><br>
  <button type="submit">params05</button>
</form>
</body>
</html>

2.Controller

package org.example.springmvc.params.controller;

import jakarta.servlet.http.HttpServletRequest;
import org.example.springmvc.params.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * Create by zjg on 2024/4/27
 */
@Controller
public class ParamsController {
    @RequestMapping("hello-params")
    public String params(HttpServletRequest request){//重定向
        System.out.println(request.getCharacterEncoding());
        return "redirect:params/params.jsp";
    }
    @RequestMapping("params05")
    public String params05(User user){//复杂对象
        System.out.println(user);
        return "forward:params/params.jsp";
    }
}

User(id=1, name=张三, alias=[狗蛋, 狗蛋], hobbies=[读书, 看报], relatives={father=爸爸, mother=妈妈}, role=Role(id=1, name=管理员), friends=[User(id=1, name=小李, alias=null, hobbies=null, relatives=null, role=null, friends=null), User(id=2, name=小王, alias=null, hobbies=null, relatives=null, role=null, friends=null)])

三、扩展

1.JSP

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
  <title>JSP - Hello RequestParam</title>
</head>
<body>
<h1><%= "扩展类型参数演示" %></h1>
<form action="/header" method="post">
  <button type="submit">header</button>
</form>
<form action="/cookie" method="post">
  <button type="submit">cookie</button>
</form>
<form action="/session" method="post">
  <button type="submit">session</button>
</form>
</body>
</html>

2.header

//header
@RequestMapping(value = "header")
public String header(@RequestHeader("Host") String host){
    System.out.println("请求头中的Host变量"+host);
    return path;
}

3.cookie

//cookie
@RequestMapping(value = "cookie")
public String cookie(@CookieValue("JSESSIONID") String id){
    System.out.println("请求中的cookie变量"+id);
    return path;
}

4.session

//session
@RequestMapping(value = "session")
public String session(@SessionAttribute("JSESSIONID") String id){
    System.out.println("请求中的session变量"+id);
    return path;
}

总结

回到顶部

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOS上线操作

1、拥有苹果开发者账号 2、配置证书&#xff0c;进入苹果开发者官网&#xff08;https://developer.apple.com/&#xff09; 3、点击账户&#xff08;account&#xff09;&#xff0c;然后创建一个唯一的标识符 4、点击"Identifiers"&#xff0c;然后点击"&qu…

【C++】学习笔记——内存管理

文章目录 二、类和对象20. 友元1. 友元函数2.友元类 21. 内部类22. 匿名对象23. 拷贝对象时的一些编译器优化 三、内存管理1. C/C内存分布2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C内存管理方式 未完待续 二、类和对象 20. 友元 1. 友元函数 我…

ELK Stack 8 接入ElasticFlow

介绍 Netflow v5 / v9 / v10&#xff08;IPFIX&#xff09;&#xff0c;支持大部分网络厂商及VMware的分布式交换机。 NetFlow是一种数据交换方式。Netflow提供网络流量的会话级视图&#xff0c;记录下每个TCP/IP事务的信息。当汇集起来时&#xff0c;它更加易于管理和易读。…

基于Springboot+Vue的Java项目-入校申报审批系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

产业结构-整体升级、合理化、高级化数据集(1990-2022年)

一、数据介绍 数据名称&#xff1a;产业结构协调-高级化、合理化 数据年份&#xff1a;1990-2022年 数据范围&#xff1a;全国31个省份 数据来源&#xff1a;中国统计NJ、国家TJ局 数据类型&#xff1a;内含原始版本、线性插值版本、ARIMA填补版本 数据说明&#xff1a;参…

分类规则挖掘(二)

目录 三、决策树分类方法&#xff08;一&#xff09;决策树生成框架&#xff08;二&#xff09;ID3分类方法&#xff08;三&#xff09;决策树的剪枝&#xff08;四&#xff09;C4.5算法 三、决策树分类方法 决策树 (Decision Tree) 是从一组无次序、无规则&#xff0c;但有类别…

240 基于matlab的飞行轨迹仿真程序

基于matlab的飞行轨迹仿真程序&#xff0c;多种不同的飞行轨迹&#xff0c;输出经度、纬度、高度三维轨迹&#xff0c;三个方向的飞行速度。程序已调通&#xff0c;可直接运行。 240 飞行轨迹仿真 三维轨迹 飞行速度 - 小红书 (xiaohongshu.com)

Hive优化以及相关参数设置

1.表层面设计优化 1.1 表分区 分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹&#xff0c;该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录&#xff0c;把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要…

sunshine+n2n+moonlight串流远程控制全教程

远程主机说明&#xff08;两台电脑不在同一局域网下&#xff09;&#xff1a; 控制台电脑 被控制电脑 所有工具下载地址&#xff1a;https://www.lanzouw.com/b00eepod7e 密码:1234 一、首先NTN组网 使用NTN技术创建虚拟局域网&#xff0c;实现设备之间的P2P连接。 NTN组网…

制作一个RISC-V的操作系统十五-软件定时器

文章目录 定时器分类定时器相关分类软件定时器设计初始化创建删除触发流程图形示意 优化代码 定时器分类 硬件定时器&#xff1a;由硬件频率和触发限制的大小决定&#xff0c;只有一个&#xff0c;精度高 软件定时器&#xff1a;基于硬件定时器实现&#xff0c;精度大于等于硬…

python学习之词云图片生成

代码实现 import jieba import wordcloudf open("D:/Pythonstudy/data/平凡的世界.txt", "r", encoding"utf-8") t f.read() print(t) f.close() ls jieba.lcut(t) txt " ".join(ls)w wordcloud.WordCloud(font_path"D:/cc…

Redis系列-1 Redis介绍

背景&#xff1a; 本文介绍Redis相关知识&#xff0c;包括Redis的使用、单线程机制、事务、内存过期和淘汰机制。后续将在《三方件-3 Redis持久化机制》中介绍Redis基于RDB和AOF的持久化机制&#xff1b;在《三方件-4 Redis集群》介绍主从、哨兵和Cluster集群相关的内容&#…

【笔记】Anaconda命令提示符(Anaconda Prompt)操作

通过anaconda配置python环境有时需要conda安装一些包或者文件&#xff0c;这里作为一个笔记记录如何打开Anaconda命令提示符&#xff08;Anaconda Prompt&#xff09;&#xff0c;并用conda操作 1.打开Anaconda命令提示符&#xff08;Anaconda Prompt&#xff09; 可直接在搜…

【C++】STL学习之优先级队列

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言一、优先级队列的使用1.1 基本功能1.2 优先级模式切换1.3 相关题目 二、模拟实现优先级…

【Scala---01】Scala『 Scala简介 | 函数式编程简介 | Scala VS Java | 安装与部署』

文章目录 1. Scala简介2. 函数式编程简介3. Scala VS Java4. 安装与部署 1. Scala简介 Scala是由于Spark的流行而兴起的。Scala是高级语言&#xff0c;Scala底层使用的是Java&#xff0c;可以看做是对Java的进一步封装&#xff0c;更加简洁&#xff0c;代码量是Java的一半。 因…

【面试经典 150 | 分治】排序链表

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;链表转数组方法二&#xff1a;自顶向下归并排序方法三&#xff1a;自底向上的归并排序 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内…

注册表获取autoCAD安装位置

注意事项 注意&#xff1a;①64位操作系统注册表会重定向&#xff0c;RegOpenKeyEx第4个参数得加上KEY_WOW64_64KEY&#xff1b;②RegOpenKeyEx遍历子项时注意第2和第4参数&#xff0c;参考图&#xff1a; ③RegQueryValueEx同样得注意第6参数 完整代码 std::unordered_map…

CAS 与 volatile

目录 CAS volatile 为什么无锁效率高 CAS 的特点 CAS AtomicInteger 内部并没有用锁来保护共享变量的线程安全。那么它是如何实现的呢&#xff1f; public void withdraw(Integer amount) {while(true) {// 需要不断尝试&#xff0c;直到成功为止while (true) {// 比如拿到…

C#知识|泛型集合List相关方法

哈喽&#xff0c;你好&#xff0c;我是雷工&#xff01; 以下为泛型集合List相关方法的学习笔记。 01 集合定义 集合定义的时候&#xff0c;无需规定元素的个数。 02 泛型说明 泛型表示一种程序特性&#xff0c;也就是在定义的时候&#xff0c;无需指定特定的类型&#xff…

STM32 看门狗WDG

一、看门狗&#xff08;Watchdog&#xff09; 看门狗可以监控程序的运行状态&#xff0c;当程序因为设计漏洞、硬件故障、电磁干扰等原因&#xff0c;出现卡死或跑飞现象时&#xff0c;看门狗能及时复位程序&#xff0c;避免程序陷入长时间的罢工状态&#xff0c;保证系统的可靠…