(基于上一篇的SpringMVC2代码)
一、从前端获取数据:
第一种方法:通过 HttpRequestServlet获取请求参数
- 添加HttpServletRequest参数时,不一定需要添加HttpServletResponse参数。
- 当添加参数后,在方法中,调用参数的getParameter(String)方法即可获取请求参数的值,做法同使用Servlet编程。
//第一种: 通过HttpRequestServlet获取请求参数
public String handlerRegister(HttpServletRequest request) {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("UserController.handlerRegister()");
String username = request.getParameter("username");
System.out.println("username" + username);
String password = request.getParameter("password");
System.out.println("password" + password);
return null;
}
第二种:通过添加处理请求的方法的参数获取请求参数值
- 在处理请求的方法中,声明与前端页面(html/jsp/...)的表单中相同名称的参数,则这个参数将自动被赋上用户提交的值。
- 通常要求参数的名称与前端页面的表单中的名称保持一致!如果参数名与表单中使用的名称不同,可以使用 @RequestParam 注解。
- 尽管这种方式简单易用,但是,不太适用于提交的数据个数偏多的应用场景,假设某个业务需要用户提交20个数据,则为方法添加20个参数是不合适的!
/*
* 第二种:通过添加处理请求的方法参数获取请求的参数
*/
@RequestMapping("/handlerRegister")
public String handlerRegister(String username,
@RequestParam("password") String pwd, int salary) {
System.out.println("UserController.handlerRegister()");
System.out.println("username" + username);
System.out.println("pwd" + pwd);
System.out.println("salary" + salary);
return null;
}
第三种:通过Java Bean直接接收所有请求参数的值
设计一个Java Bean包含所有的请求参数,并且在Java Bean中的属性名与前端页面的表单中使用的名称保持一致,然后,在处理请求的方法中,添加这个Java Bean类型的参数即可使用(类似于以上第2种做法)。
/*
* 第三种:通过JavaBean直接接收所有请求参数的值
*/
@RequestMapping("/handlerRegister")
public String handlerRegister(HttpServletRequest request,User user) {
System.out.println(user);
return null;
}
二、向前端发送数据
第一种方法:通过HttpServletRequest封装数据
UserController.java:
@RequestMapping("/handlerRegister")
public String handlerRegister(HttpServletRequest request, User user) {
// 假设将user已经处理完毕
// 通过request封装数据,以转发到jSP
request.setAttribute("name", user.getUsername());
return "user_register_info";
}
user_register_info.jsp:
<body>
<center>
<div id="content-warpper">
<div id="content">
<h2>注册成功</h2>
<!-- EL表达式简化代码 -->
您的用户名是:${name}, 您的密码是:${pwd}, 您的工资是:${salary}
</div>
</div>
</center>
</body>
- 在处理请求的方法中添加HttpServletRequest参数。在方法中,调用参数的setAttribute()方法将数据封装。由于Spring的处理过程会默认将请求转发到View组件,在View组件(例如jsp页面)中可以通过EL表达式应用这些数据。转发的行为不需要自己写,Spring会自动完成!
第二种方法,使用ModelAndView:
//向前端发送数据的第二种方式:通过ModelAndView封装数据
@RequestMapping("/handlerRegister.do")
public ModelAndView handlerRegister(User user) {
// 假设将user已经处理完毕
// ModelAndView包含两部分:model和view
ModelAndView mav = new ModelAndView();
mav.getModel().put("pwd", 123456);
mav.getModel().put("salary", user.getSalary());
mav.setViewName("user_register_info");
return mav;
}
第三种,使用ModelMap:
@RequestMapping("/handlerRegister.do")
public String handlerRegister(User user, ModelMap data) {
// 使用ModelMap
data.addAttribute("salary", user.getSalary());
return "user_register_info";
}
- 这种方式的做法与使用HttpServletRequest几乎一致:先在处理请求的方法中添加ModelMap类型的参数,然后在方法中调用参数的addAttribute()方法封装数据即可!
- 虽然这种做法从代码上来看与使用HttpServletRequest是相同的,但是推荐使用这种做法(原因待续)。
补充:使用HttpSession:
public String handlerRegister( User user ,HttpServletRequest request) {
request.getSession().setAttribute("name", user.getUsername());
return "user_register_info";
}
注意:由于Session存在的时间相对略长,所以,不要把所有数据都存在Session中!