Spring MVC(三)--控制器接受普通请求参数
Spring MVC中控制器接受参数的类方式有以下几种:
- 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况;
- pojo类型:如果前端传的是一个pojo对象,只要保证参数名称和pojo属性一致即可;
- 注解方式:当前端参数名和控制器名称不一致时可以使用注解方式,比如前端是param_id,而控制器中是paramId的情况;
- URL方式:当前端以restful格式传递参数时,后台使用这种方式接受;
- JSON方式:前后端如果用json方式交互时,可以使用这种方式,这是常用的方式;
- 列表方式:如果前端传的是一个列表,列表元素可以是基本类型也可以是引用类型,使用这种方式接受;
- 表单序列化方式:有时候如果表单数据较少,控制器可以用这种方式接受表单序列化后的数据;
以上七中类型,我将一一进行总结,这几种方式花了我一天时间测试调试,真实醉了,看着简单,实践起来总会出现你意想不到的问题,所以还是能动手就不吵吵!
下面是我创建的页面,包含了八种方式(注意⚠️:上面说的七种中,列表方式根据元素类型分成了基本类型和引用类型)

以上八种方式,我将一一进行介绍,举出实例,本文介绍控制器接受简单参数类型的方式。
这种方式要求http传递的参数名称和控制器中的参数名称一致,这样不需要注解就能获取了。下面举实例,场景是这样的:
在上图简单参数传递中输入名称和描述点击提交按钮之后进入一个新的页面,在这个页面获取到刚才传过来的参数。参数传递的过程为:
1⃣️点击提交按钮之后表单提交给对应的控制器;
2⃣️控制器接受参数,并将参数渲染到对应的视图中;
3⃣️显示渲染后的页面;
这三个步骤需要两个页面和一个控制器,下面直接贴代码:
1、输入参数页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%
String root = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ root + "/";
%>
<script type="text/javascript"
src="<%=basePath%>jslib/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="<%=basePath%>jslib/jquery.form.js"></script>
<script type="text/javascript" src="<%=basePath%>js/param.js"></script>
<link href="<%=basePath%>css/param.css" type="text/css" rel="stylesheet">
<title>Insert title here</title>
</head>
<body> <!-- 简单参数传递 -->
<p style="text-align: center;color: red;font-size: x-large;">Spring MVC控制器接受参数方式测试</p>
<div class="param">
<div class="simple public">
<p style="text-align: center;">简单参数传递</p>
<form id="paramForm" action="<%=basePath%>param/simpleParam"
method="post">
<table>
<tr>
<td>名称:</td>
<td><input type="text" name="paramName" value=""></td>
</tr>
<tr>
<td>描述:</td>
<td><input type="text" name="paramDesc" value=""></td>
</tr>
<tr>
<td></td>
<td style="text-align: right;"><input type="submit"
value="提交" id="setSimpleParam"></td>
</tr>
</table>
</form>
</div> </body>
</html>
注意上面代码中红色加粗的部分,在spring MVC中获取引入静态资源的方式,我是这样引入的,因为如果使用相对路径会报错,找不到资源,除此之外,还要在web.xml中配置静态资源的拦截,否则引入js\css等静态资源是会报404,尽管路径没错。配置如下:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping> <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
还可以配置图片等的路径。
2、控制器
@Controller
@RequestMapping("/param")
public class ParamController { /**
* 获取简单参数:参数名称必须和表单中的name保持一致
*
* @param paramname
* @param paramDesc
* @return
*/
@RequestMapping(value = "simpleParam", method = RequestMethod.POST)
public ModelAndView getSimpleParam(String paramName, String paramDesc) {
ModelAndView mv = new ModelAndView();
System.out.println(paramName);
System.out.println(paramDesc);
mv.addObject("paramName", paramName);
mv.addObject("paramDesc", paramDesc);
mv.setViewName("simpleParam");
return mv;
}
}
在上面的控制器中,需要注意以下两点:
- 方法接受参数的方式是直接传参数名,这个参数名就是第一步表单中的两个参数,也就是http协议传递给后台的参数,它们必须保持一致,否则会接受失败!
- 控制器返回的视图名称是simpleParam,所以接下来需要创建这个页面;
3、创建返回视图
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Simple Param</title>
</head>
<body> <h2>
获取到的参数名称:<label>${paramName }</label> <br /> 获取到的参数描述:<label>${paramDesc }</label>
</h2> </body>
</html>
这个视图中渲染了控制器返回的数据,获取的参数名就是控制器通过addObject()方法设置的键名;
通过以上三步,就完成了简单参数的传递和接受过程,下面进行测试,在页面输入名称和描述,如下图所示:

提交之后的结果如下:

可以看到获取成功了。
4、总结
这种方式一般比较适合参数较少的情况,而且一定一定要保持控制器中的参数名和前端传递的参数名是完全一样的,这样Spring MVC才能自动映射。显然,当参数较多时,这种方式会在控制器传多个参数,显得不太好看,这个时候我们可以将这些参数封装成一个pojo对象,具体过程看下一篇文章。
Spring MVC(三)--控制器接受普通请求参数的更多相关文章
- Spring MVC(八)--控制器接受简单列表参数
有些场景下需要向后台传递一个数组,比如批量删除传多个ID的情况,可以使用数组传递,数组中的ID元素为简单类型,即基本类型. 现在我的测试场景是:要从数据库中查询minId<id<maxId ...
- Spring MVC(九)--控制器接受对象列表参数
前一篇文章介绍是传递一个参数列表,列表中的元素为基本类型,其实有时候需要传递多个同一类型的对象,测试也可以使用列表,只是列表中的元素为对象类型. 我模拟的场景是:通过页面按钮触发传递参数的请求,为了简 ...
- Spring MVC(四)--控制器接受pojo参数
以pojo的方式传递参数适用于参数较多的情况,或者是传递对象的这种情况,比如要创建一个用户,用户有十多个属性,此时就可以通过用户的pojo对象来传参数,需要注意的是前端各字段的名称和pojo对应的属性 ...
- Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式
首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...
- spring mvc(2):请求地址映射(@RequestMapping)
@RequestMapping 参数说明 value定义处理方法的请求的 URL 地址.method定义处理方法的 http method 类型,如 GET.POST 等.params定义请求的 UR ...
- 【Spring MVC】spring mvc中相同的url请求返回不同的结果
在项目中凡是使用Spring MVC这种控制器的,大多都是返回JSON数据对象,或者JSP页面. 但是相同的URL请求如何让他自动的选择放回的是什么? 在这里有由于鄙人没有亲自测试过,就不敢乱贴代码, ...
- 使用Spring mvc接收整个url地址及参数时注意事项
使用Spring mvc接收整个url地址及参数时注意事项:url= http://baidu?oid=9525c1f2b2cd45019b30a37bead6ebbb&td=2015-08- ...
- Spring MVC 接受的请求参数
目录 1. 概述 2. 详解 2.1 处理查询参数 2.2 处理路径参数接受输入 2.3 处理表单 3. 补充内容 3.1 Ajax/JSON 输入 3.2 multipart参数 3.3 接收 he ...
- Spring MVC(五)--控制器通过注解@RequestParam接受参数
上一篇中提到,当前后端命名规则不一致时,需要通过注解@RequestParam接受参数,这个注解是作用在参数上.下面通过实例说明,场景如下: 在页面输入两个参数,控制器通过注解接受,并将接受到的数据渲 ...
随机推荐
- fastjson 过滤不需要序列化的属性
JSON JSON英文全称为JavaScriptObject Natation,采用key:value键值对的方式存贮数据,与xml格式相比,JSON是一种轻量级的数据交换格式:不要被JavaScri ...
- java设计模式系列1-- 概述
准备开始写些设计模式的随笔,这是第一篇,概述主要回顾下六大原则 先用轻松和谐的语言描述下这6个原则: 单一职责 每个类甚至每个方法都只要做自己分内的事,不要背别人的锅,也就是功能要分类,代码要解耦 里 ...
- POJ 1127 /// 判断线段与线段是否相交
题目大意: 给定n条线段 接下来n行是端点信息 接下来询问 a b 是否相交 若a与c相交 b与c相交 ,那么a与b就是相交的 先判断任两条线段是否相交 再用folyd #include <cs ...
- js 实时监听textarea输入
html: <textarea class="area" name="" id="text1" maxlength="100 ...
- linux 文件类型的颜色
linux文件颜色的含义:蓝色代表目录 绿色代表可执行文件 红色表示压缩文件 浅蓝色表示链接文件 灰色表示其他文件 红色闪烁表示链接的文件有问题了 黄色表示设备文件 蓝色文件----------目录 ...
- android 使用现成做get请求
//接受子线程发来的消息 Handler hanler = new Handler() { @Override public void handleMessage(Message msg) { // ...
- Android开发 处理内存申请失败的报错(Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM)
问题原因 当你在操作图片或者其他大量文件数据时会出现:Failed to allocate a 38189038 byte allocation with 16777216 free bytes an ...
- python 简单的图片比较
# by movie on 2019/12/18 from PIL import Image from PIL import ImageChops path1 = 'images/trumpA689. ...
- HashMap数据结构
2.1 HashMap 2.1.1 HashMap介绍 先看看HashMap类头部的源码: public class HashMap<K,V> extends AbstractMap< ...
- Chrome快捷键, Mac 下 Chrome 浏览器 快捷键
Chrome窗口和标签页快捷键:Ctrl+N 打开新窗口 Ctrl+T 打开新标签页 Ctrl+Shift+N 在隐身模式下打开新窗口 Ctrl+O,然后选择文件 在谷歌浏览器中打开计算机上的文件 按 ...