五 获取请求参数
在Servlet中我们通过request.getParameter(name)方法获取请求参数,该方式存在两个问题:
请求参数较多时会出现代码冗余;与容器紧耦合。
在spring mvc中可以使用HttpServletRequest对象获取请求数据,同时还提供了参数注入的方式用于获取请求数据。
SpringMVC参数注入的优点:
1 通过HttpServletRequest对象获取请求数据
代码
/**
* HttpServletRequest
* @return
*/
@RequestMapping("/getRequestParameter")
public ModelAndView getRequestParameter(HttpServletRequest request){
// getParameter方法获取参数
String username = request.getParameter("username");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("username",username);
return modelAndView;
}
<%--
Created by IntelliJ IDEA.
User: HP
Date: 2020/11/16
Time: 8:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
${msg}<br/>
${username}
</body>
</html>
运行结果
2 通过参数注入获取请求参数
2.1注入多参数
必须名称一致,不能缺,否则报错
/**
* 多参数注入,请求参数名称与方法参数名称一致
* @return
*/
@RequestMapping("/addUsers")
public ModelAndView getRequestParameter(String username,int userage){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("username",username);
modelAndView.addObject("userage",userage);
return modelAndView;
}
<%--
Created by IntelliJ IDEA.
User: HP
Date: 2020/11/16
Time: 8:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
${msg}<br/>
${username}<br/>
${username} - ${userage}<br/>
</body>
</html>
运行结果
少参数:
参数名不一致
完全一致
2.2@RequestParam注解
代码:
/**
* @RequestParam
* @return
*/
@RequestMapping("/addUsers2")
public ModelAndView addUsers2(@RequestParam(value="name",required = true,defaultValue="oldLu")String username,
@RequestParam("age")int userage){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
modelAndView.addObject("username",username);
modelAndView.addObject("userage",userage);
return modelAndView;
}
<%--
Created by IntelliJ IDEA.
User: HP
Date: 2020/11/16
Time: 8:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
${msg}<br/>
${username}<br/>
${username} - ${userage}<br/>
</body>
</html>
运行结果
请求参数中的名称,与注解中的value名称不一致
如果没有defaultValue指明,报错
如果有defaltValue,是默认值
2.3注入集合参数
在 SpringMVC 请求参数注入中,如果有多请求参数的 name 相同,那么可以使用 String[] 或 List 集合来接收请求参数。如果使用的 List 类型需要在该参数前添加@RequestParam 注 解,String[]则不需要。
2.3.1 创建页面
index2.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Created by IntelliJ IDEA.
User: HP
Date: 2020/11/18
Time: 22:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--不写/,写了就没项目上下文那个了--%>
<form action="suibian/addUsers3">
用户姓名:<input type="text" name="username"/><br/>
爱好:<br/>
体育<input type="checkbox" name="userlike" value="Sport" />
音乐<input type="checkbox" name="userlike" value="Music"/>
艺术<input type="checkbox" name="userlike" value="Art"/><br/>
<input type="submit" value="OK"/>
</form>
</body>
</html>
2.3.2 修改控制器
/**
* 注入集合参数 checkbox
* List<String>
* String[]
* @return
*/
@RequestMapping("/addUsers3")
public ModelAndView addUsers2(@RequestParam(value="name",required = true,defaultValue="oldLu")String username,
String[] userlike){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index2.jsp");
modelAndView.addObject("username",username);
StringBuilder sb = new StringBuilder();
for(int i=0;i<userlike.length;i++){
String s <