springMVC获取请求参数的几种形式
1.通过form表单方式发送请求,后端获取简单类型的参数:
2.通过ajax方式发送请求,后端获取简单类型参数:
3.通过form表单发送请求,后端将参数封装到javabean中:
Javabean:
请求页面代码:
后端代码:
这里有一个小细节:
首先,如果我后端控制器这样写:
然后,我success.jsp是这样写:
发送请求的页面不变,意思是我现在后端不往request域中封装参数,而是通过param的形式获取值是能直接获取到的,结果页面如下:
发送请求页面:
结果页面:
而使用request域的方式是获取不到参数的,因为没有往request域中封装参数。
经过分析,个人认为是param的方式是直接获取了请求页面的参数,与后台是否封装参数无关。
4.通过ajax发送请求,后端将参数封装到javabean中(这里的javabean同上一个):
5.通过form表单发送请求,后端将获取的参数封装到类的包装类中:
javabean:
请求页面代码:
后端代码:
6.通过ajax方式发送请求,后端将前端参数封装到类的包装类中(这里的javabean同上一个):
7.使用form表单发送请求,后端将获取到的参数封装到List集合中:
首先需要新建一个UserModel类来封装User:
User的javabean同上不变,Address的javabean同上不变。
请求页面代码:
后端代码:
8.使用ajax方式发送请求,后端将获取到的参数封装到List集合中:
javabean不做任何改变。
请求页面代码:
后端代码:
9.通过form表单发送请求,后端将获取到的参数封装到Map集合中:
创建一个类UserMap:
其他javabean不变。
请求页面代码:
后端代码:
10.通过ajax方式发送请求,后端将获取到的参数封装到Map集合当中:
javabean部分不需要变化。
请求页面代码:
后端代码:
11.后端返回值采用String类型,跳转页面不变,这样做的代码比返回ModelAndView对象看起来更简洁:
跳转的页面同ModelAndView的方式,代码看起来更简洁,编码效率更高。
12.使用@PathVariable方式获取参数:
13.使用@RequestParam方式:
该方式适用于前端提交的参数名称与后端方法中形参名称不一致的情况,可以看到在注解的括号内配置与前端提交的参数名称相同的参数名就可以了。
这个方式还有一个用处,就是当前端请求的参数不存在时,默认情况下会报400-Bad Request,而如果在这个注解中加入了required=false之后,就不会报错了,后端会获取到一个null:
请求页面把username注释掉:
此时客户端页面上:
可以看到没有username,点击提交后:
前端页面成功跳转,看下后端控制台:
此时username部分显示的是null,表明设置生效。
14.通过@ModelAttribute方式获取参数:
使用该注解,可以在结果页面通过该注解中设置的值获取到该参数,比如在结果页面中可以写${requestScope.u}获取到user这个参数。
该注解还有几个用处,首先就是应用在没有返回值的方法上,使得这个方法可以在Controller之前执行,具体用法如下:
此时执行上面这个案例,结果如下:
发现在上面这个方法执行之前当前方法就已经被执行了,这样的方法可用于更新数据库之前的查询操作。
然后这个注解还可以向结果页面传参:
在结果页面输入${requestScope.aaa }即可获取该键所对应的值。
该注解还能用到有返回值的方法上,可以初始化某些参数,比如:
后端代码如下:
请求页面代码需要换成:
否则会按照输入的参数获取,因为@ModelAttribute注解的方法会先于Controller的执行,因此在该方法执行完后,前端请求的参数又再次被后端获取,覆盖掉上一次的值。