4.1 环境搭建

创建名为spring_mvc_demo2的新module,过程参考3.1节

4.1.1、创建请求控制器

package org.rain.controller;

import org.springframework.stereotype.Controller;

/**
* @author liaojy
* @date 2023/10/9 - 8:32
*/
@Controller
public class TestParamController {
}

package org.rain.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; /**
* @author liaojy
* @date 2023/10/9 - 8:49
*/
@Controller
public class PortalController {
@RequestMapping("/")
public String portal(){
return "index";
}
}

4.1.2、创建静态资源目录及页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body> </body>
</html>

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>成功</title>
</head>
<body> <h1>success.html</h1> </body>
</html>

4.1.3、配置tomcat

4.2、通过ServletAPI获取请求参数

4.2.1、控制器方法示例

如果控制器方法有HttpServletRequest类型的形参,DispatcherServlet就会将封装了当前请求的对象传给控制器方法

    @RequestMapping("/param/servletAPI")
public String getParamByServletAPI(HttpServletRequest request){
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("username:"+username);
System.out.println("password:"+password);
return "success";
}

4.2.2、页面请求示例

<form th:action="@{/param/servletAPI}" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>

4.2.3、测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.3、通过控制器方法的形参获取请求参数

4.3.1、控制器方法示例

如果在控制器方法存在和请求参数同名的形参,DispatcherServlet就会将请求参数赋值给控制器方法中对应的形参

    @RequestMapping("/param")
public String getParam(String username,String password){
System.out.println("username:"+username);
System.out.println("password:"+password);
return "success";
}

4.3.2、页面请求示例

<form th:action="@{/param}" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>

4.3.3、测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.4、@RequestParam注解

@RequestParam注解用于将请求参数和控制器方法的形参建立映射关系,其有三个属性:

  • value:指定要为形参赋值的请求参数的参数名。

  • required:设置是否必须传输此请求参数,默认值为true;

    若设置为true时,则当前请求必须传输value所指定的请求参数,

    若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required String parameter 'xxx' is not present;

    若设置为false时,则当前请求不是必须传输value所指定的请求参数,

    若没有传输该请求参数,则注解所标识的形参的值为null。

  • defaultValue:设置形参的默认值;

    不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值。

4.4.1、控制器方法示例

    @RequestMapping("/param")
public String getParam(@RequestParam(value = "name",required = true,defaultValue = "everyone") String username, String password){
System.out.println("username:"+username);
System.out.println("password:"+password);
return "success";
}

4.4.2、页面请求示例

<form th:action="@{/param}" method="post">
用户名:<input type="text" name="name">
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>

4.4.3、有传参的测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.4.4、无传参的测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.5、@RequestHeader和@CookieValue

  • @RequestHeader 注解用于将请求头信息和控制器方法的形参建立映射关系,其三个属性的用法和@RequestParam的相同

  • @CookieValue 注解用于将Cookie数据和控制器方法的形参建立映射关系,其三个属性的用法和@RequestParam的相同

4.5.1、控制器方法示例

    @RequestMapping("/param")
public String getParam(
@RequestParam(value = "name",required = true,defaultValue = "everyone") String username,
String password,
@RequestHeader("referer") String referer,
@CookieValue(value = "JSESSIONID",required = false) String jsessionId
) {
System.out.println("username:"+username);
System.out.println("password:"+password);
System.out.println("referer:"+referer);
System.out.println("jsessionId:"+jsessionId);
return "success";
}

4.5.2、测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.6、通过实体类形参获取请求参数(常用)

4.6.1、实体类示例

注意:要保证实体类的属性名和请求参数名一致

package org.rain.pojo;

/**
* @author liaojy
* @date 2023/10/10 - 8:45
*/
public class User { private Integer id; private String username; private String password; public User() {
} public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

4.6.2、控制器方法示例

    @RequestMapping("/param/pojo")
public String getParamByPojo(User user){
System.out.println(user);
return "success";
}

4.6.3、页面请求示例

<form th:action="@{/param/pojo}" method="post">
用户名:<input type="text" name="username">
密码:<input type="password" name="password">
<input type="submit" value="登录">
</form>

4.6.4、测试效果

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

+++++++++++++++++++++++++分割线+++++++++++++++++++++++++

4.7、解决获取请求参数的乱码问题

4.7.1、post请求的乱码解决方式

注意:SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效;过滤器的顺序根据filter-mapping标签的排序决定。

    <!--配置springMVC的编码过滤器-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<!--该初始化参数用于设置请求参数的编码方式-->
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<!--该初始化参数用于设置响应参数也使用同样的编码方式-->
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

4.7.2、get请求的乱码解决方式

从tomcat8及以后的版本,get请求的乱码问题默认已被官方解决;本例展示tomcat7的解决方式。

  • 找到并打开编辑该文件:tomcat安装目录\conf\server.xml

  • 在第一个 Connector 标签中,添加对应的 UTF 编码

URIEncoding="UTF-8"

4、SpringMVC之获取请求参数的更多相关文章

  1. 学习SpringMVC——如何获取请求参数

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...

  2. 【SpringMVC】获取请求参数

    通过ServletAPI获取 test.html <a th:href="@{/testServletAPI(username='admin',password=123456)}&qu ...

  3. SpringMVC——如何获取请求参数

    参考 http://www.cnblogs.com/bigdataZJ/p/springmvc2.html (文章讲了几个注解的使用,但不够深入.) 参考 http://www.cnblogs.com ...

  4. 学习SpirngMVC之如何获取请求参数

    学习SpringMVC——如何获取请求参数   @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@Cooki ...

  5. springMvc源码学习之:spirngMVC获取请求参数的方法2

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他 (@CookieValue)!她(@ModelAndView ...

  6. SpringMVC 获取请求参数

    1.获取Request response对象 在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用 2.获取request对象请求参数 a.通过request对 ...

  7. springMVC(spring)+WebSocket案例(获取请求参数)

    开发环境(最低版本):spring 4.0+java7+tomcat7.0.47+sockjs 前端页面要引入: <script src="http://cdn.jsdelivr.ne ...

  8. SpringMVC中post请求参数注解@requestBody使用问题

    一.httpClient发送Post 原文https://www.cnblogs.com/Vdiao/p/5339487.html public static String httpPostWithJ ...

  9. Springmvc之接受请求参数二

    Springmvc之接受请求参数 准备工作 新建一个表单提交 请求地址: http://localhost:8080/ProjectName/user/login.do <form action ...

  10. springMVC中接收请求参数&&数据转发

    ### 1. 接收请求参数 #### 1.1. [不推荐] 通过HttpServletRequest获取请求参数 假设存在: <form action="handle_login.do ...

随机推荐

  1. java中SimpleDateFormat解析日期格式的问题

    在日常写代码的过程中,我们经常要处理各种格式的日期,常见的日期格式有:"20240601","2024-06-01","2024-6-1". ...

  2. 多项分布模拟及 Seaborn 可视化教程

    多项分布 简介 多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布.与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及 ...

  3. mvn 打包报错:no compiler is provided in this environment

    最近公司换了电脑,系统也从 win7 升级到 win11,开发环境都重新安装了一遍,然后在 idea 用mvn 执行打包命令 mvn clean package 报错: no compiler is ...

  4. 鸿蒙HarmonyOS实战-ArkTS语言基础类库(通知)

    前言 移动应用中的通知是指应用程序发送给用户的一种提示或提醒消息.这些通知可以在用户设备的通知中心或状态栏中显示,以提醒用户有关应用程序的活动.事件或重要信息. 移动应用中的通知可以分为两种类型:本地 ...

  5. Visual Studio(VS)常用快捷键整理

    ​ 前言 在使用Visual Studio编写代码时,使用快捷键能够提高编码效率,作为程序员,我们有必要记住一些比较常用的快捷键.这篇文章将记录我自己比较常用的快捷键,并根据我的使用情况,更新常用快捷 ...

  6. 使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法

    使用优启通 制作 WIN PE U盘时报BOOT.WIM 有毒的解决方法 1.打开"Windows Defender". 2.点击"病毒和威胁防护". 3.点击 ...

  7. vs code 中开发 .net5 mvc

    asp.net core mvc ------------ 安装vscode-solution-explorer,C# 2个扩展.遇到yes就点yes. 新建一个文件夹:D:\repos\Net5Mv ...

  8. C# .NET core Avalonia 11.0版本,发布linux和MAC的简单记录

    .net core 7.0+centos 7.0 cetnos目前运行在hyper V虚拟机里 虚拟机部署的注意事项 1 需要配置网络环境, 确保在同一局域网下 如果sftp无法连接 ctrl+shi ...

  9. 记一次 MatPlotLib 报错及解决方案:AttributeError: module 'matplotlib.cbook' has no attribute '_Stack'

    记一次 MatPlotLib 报错及解决方案 目录 记一次 MatPlotLib 报错及解决方案 解决方法 具体发生了什么 报错 log 1 内容 报错 log 2 内容 最近出现 MatPlotLi ...

  10. Android 自定义带动画的柱状图

    功能分析 假设要使用柱状图展示用户一周的数据,通用的做法是对接三方图表SDK或者自己通过代码绘制. 1.三方SDK通常包体较大,且定制性差,对特定的UI需求兼容性差; 2.自己绘制,比较复杂,而且要考 ...