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. C# 机器学习

    前言: 提起人工智能,机器学习.大家都是一脸懵的样子.其实呢,就是根据数据进行训练.然后可以大概的预测结果.Visual Studio2019 Preview中提供了图形界面的ML.Net,所以,只要 ...

  2. promise async 和 await

           // promise 是专门用于解决回调地狱的         //         专门用于执行异步程序时使用promise语法         // 语法形式:         // ...

  3. Nodejs静态资源管理 路由

    express提供了一个非常好用的方法,叫做 express.static(),通过此方法,可以非常方便地创建一个静态web资源服务器 app.use(express.static('public') ...

  4. Ubuntu安装VMware tools后不起作用

    复制和立即适应客户机不起作用. 解决: 1)不需要卸载 2)命令行执行sudo apt-get install open-vm-tools-desktop 3)可能会提示apt-get update或 ...

  5. Ansible的常用模块

    目录 ansible常用模块 1. file模块 1.1 file模块的选项 1.2 file模块的使用 1.2.1 使用file模块在远程主机创建文件 1.2.2 创建目录 1.2.3 删除文件/目 ...

  6. shell中各个括号的用法区别

    在 shell 脚本中,[ ].[[ ]].( ).(( )).{ } 和 {{ }} 都有各自特定的用法和区别.下面是对这些结构的详细解释: 1. [ ] (test 命令) [ ] 是 shell ...

  7. 大数据面试吹牛草稿V2.0

    面试吹牛之前先打个草稿! 各位面试官好! 我叫 xxx,毕业于 xxx,之前在 xxx 公司待了 1 年多,期间⼀直从事的是 IT 行业,刚开始的时候做的是 Java 开发后来转岗到大数据方向做大数据 ...

  8. 01-Python介绍、安装与入门

    Python介绍 关于Python Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. 解释型:Python将代码边解释边运行,而不是像C一样编译.类似解释型的语言还有JAVA. ...

  9. 18-Docker资源限制

    背景 若容器使用的计算机资源不加限制,那么,可能会耗光整个计算机资源. 如代码里有bug,出现了死循环,且创建了很多线程. 在Docker中,可以使用Cgroup技术限制CPU.Block IO.RA ...

  10. 2023/3/21 组会:ChatGPT 对数据增强的影响及 ChatGPT 的鲁棒性,Dense 和 Document 检索方法

    前两个也许跟上了,后两个完全没跟上,以后再详细读读吧qwq 反正组会跟不上才是正常现象. AugGPT: Leveraging ChatGPT for Text Data Augmentation 摘 ...