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. 使用Express写接口

    接口规范 随着前后端分离越来越普遍, 后端接口规范也就越来越重要了,一套良好的接口规范可以提升工作效率, 减少沟通障碍.通常我们都会采用RestfulApi方式来提供接口, 使用 JSON 来传输数据 ...

  2. CF98C Help Greg the Dwarf 题解

    CF98C Help Greg the Dwarf 题解 为什么不三分? 首先我们考虑如何求出答案. 如图,考虑设夹角为 \(\theta\),那么可以得到表达式: \[[\cfrac a {\tan ...

  3. C#.NET 使用Task.Run和Task.Delay 延时执行任务(代码)

    C#.NET 使用Task.Run和Task.Delay 延时执行任务(代码) 环境: .NET 4.5.2 .NET WEB MVC + WEB API. 示例代码: using CommonUti ...

  4. EBLK日志收集方案

    ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch.Logstash 和 Kibana.该组合版本会统一发布. Elast ...

  5. Mysql性能优化(详解)

    引言 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操 ...

  6. mybatis Selective动态判断属性值新增或修改操作,batch批量操作

    mybatis Selective动态判断属性值新增或修改操作,batch批量操作 mybatis insert foreach批量添加https://www.cnblogs.com/oktokeep ...

  7. 一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

    案发现场:混沌初现 2024年6月10日,本应是平静的一天.但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响.北京可用区服务器节点突然出现大量 "not ready&q ...

  8. Django设置、使用Cookie

    使用背景: 前端根据用户选择的模块,结合ajax实现局部刷新,进到到具体模块页面后,返回,希望保持到原来选择的模块上,这就需要保存当前选择的模块id; 尝试: 1.使用Js的设置cookie,douc ...

  9. shell 编程简记

    1. 环境变量 环境变量是指操作系统中记录一些配置信息的变量,这些变量在不同的程序之间共享,可以被操作系统或者 shell 脚本读取和修改. 环境变量也可以类比为各个语言中的全局变量,其作用域是全局的 ...

  10. Freertos学习:02-FreeRTOSConfig.h

    --- title: rtos-freertos-02-FreeRTOSConfig.h EntryName: rtos-freertos-02-FreeRTOSConfig date: 2020-0 ...