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. React脚手架 创建React项目

    React团队主要推荐使用create-react-app来创建React新的单页应用项目的最佳方式. React脚手架(create-react-app)意义 脚手架是官方提供,零配置,无需手动配置 ...

  2. v-once指令 v-if和v-show

    v-once指令 只渲染元素和组件一次,之后元素和组件将失去响应式功能 v-if和v-show 根据表达式的布尔值(true/false)进行判断是否渲染该元素 注:v-if 有更高的切换开销,而 v ...

  3. kettle从入门到精通 第十七课 kettle Transformation executor

    Transformation executor步骤是一个流程控件,和映射控件类似却又不一样. 1.子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使 ...

  4. win11 恢复Win10右键菜单的方法

    1.Win+R运行CMD 2.输入:reg add HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocS ...

  5. Vue学习:15.组件化开发

    组件化开发 组件化开发是一种软件开发方法,它将应用程序拆分成独立的.可重用的模块,每个模块都被称为组件.这些组件可以独立开发.测试.维护和部署,从而提高了代码的可维护性.可扩展性和复用性.在前端开发中 ...

  6. WebStorm 中自定义文档注释模板

    WebStorm 中自定义文档注释模板 前提 使用WebStrom写HTML,JavaScript,进行头部注释. 减少重复劳动 养成良好的代码习惯,规范化代码,规范的注释便于后续维护. 头部注释内容 ...

  7. APOLLO DEV环境列表无法显示解决,重启对应的Apollo服务

    APOLLO DEV环境列表无法显示解决,重启对应的Apollo服务 找到项目中的apollo-core jar包中的配置文件,查看dev.meta的服务器配置IP:端口 apollo-env.pro ...

  8. 这几个必备的vscode插件,你安装了几个

    作为一名前端开发者,vscode想必大家应该都接触过,就像大多数 IDE 一样,VSCode 也有一个扩展和主题市场,包含了数以千计质量不同的插件. 作为一名熟练掌握各种前端开发工具安装和卸载的大师兄 ...

  9. 19-Docker数据持久化

    什么是Docker数据持久化 容器在运行时会在镜像层上加上一层:可写层. 当删除容器时,可写层就会一起被删除,数据丢失. 数据持久化就是就是将数据持久化保存,删除容器之后,数据仍然存在. 方法1-挂载 ...

  10. ecnuoj 5042 龟速飞行棋

    5042. 龟速飞行棋 题目链接:5042. 龟速飞行棋 赛中没过,赛后补题时由于题解有些抽象,自己写个题解. 可以发现每次转移的结果只跟后面两个点的胜负状态有关. 不妨设 \(f_{u,a,b}\) ...