### 1. 接收请求参数
#### 1.1. 【不推荐】 通过HttpServletRequest获取请求参数
假设存在:
<form action="handle_login.do" method="POST"> <div>请输入用户名</div> <div><input name="username" /></div> <div>请输入密码</div> <div><input name="password" /></div> <div><input type="submit" value="登录" /></div> </form>
则在控制器中:
@RequestMapping("handle_login.do") public String handleLogin() { // 暂不关心后续的页面 return null; }
当需要处理请求时,可以在方法的参数中添加`HttpServletRequest`,然后,在方法体中,通过该参数获取请求参数:
@RequestMapping("handle_login.do") public String handleLogin( HttpServletRequest request) { String username = request.getParameter("username"); String password = request.getParameter("password"); System.out.println("username=" + username); System.out.println("password=" + password); // 暂不关心后续的页面 return null; }
注意:Spring MVC框架默认使用的编码是ISO-8859-1,是不支持中文的,解决方案再议。
#### 1.2. 【推荐】 直接使用同名参数
在Spring MVC中,也可以直接将请求参数声明为处理请求的方法的参数,例如:
@RequestMapping("handle_reg.do") public String handleReg( String username, String password, Integer age, String phone, String email) { System.out.println("username=" + username); System.out.println("password=" + password); System.out.println("age=" + age); System.out.println("phone=" + phone); System.out.println("email=" + email); // 暂不关心后续的页面 return null; }
使用这种做法时,需要保证请求参数的名称与方法参数名称是一致的!如果不一致,则无法获取到对应的参数,且服务器端会视为“客户端并没有提交名为xxx的参数,则值为null。”
这种做法虽然简便,但是,不适合处理请求参数过多的请求,如果某个请求中有10个或更多参数,则处理请求的方法也需要添加这么多参数,是不合适的!
#### 1.3. 【推荐】 通过对象接收请求参数
如果请求参数过多,可以将请求参数封装在某个类型中:
public class User { private String username; private String password; private Integer age; private String phone; private String email; // SET/GET }
然后,在处理请求时,将该类型作为方法的参数即可:
@RequestMapping("handle_reg.do") public String handleReg(User user) { System.out.println(user); // 暂不关心后续的页面 return null; }
在使用这种做法时,也需要保证名称的统一!
#### 1.4. 小结
以上3种做法,除了第1种比较麻烦以外,另2种做法,请根据具体情况选择性的使用,甚至这2种做法可以混合使用,处理请求时,参数不区分先后顺序。
当然,第1种做法也不是完全没有用武之地,在除了控制器以外的组件中依然可能需要使用。
### 2. 转发数据
#### 2.1. 通过HttpServletRequest对象转发
Spring MVC处理请求时,默认的返回即表示“转发”,所以,返回值应该理解为:处理完请求之后转发到的JSP文件的名称。
当需要转发数据时,直接将数据封闭在`HttpServletRequest`对象中即可:
request.setAttribute("msg", message);
后续,并不需要获取转发器执行转发!在SpringMVC中返回时,就会将数据进行转发的操作!
#### 2.2. 【不推荐】 使用ModelAndView转发
在ModelAndView中,model表示的就是转发的数据,而view表示的就是转发的目标JSP页面,在使用时: