1.【不推荐】将需要转发的数据封装在HttpServletRequest中
可以在处理请求的方法的参数列表中添加HttpServletRequest类型的参数,当需要转发数据时,调用参数对象setAttribute(String name, Object value)方法进行封装,然后转发即可:
@RequestMapping("handle_login.do")
public String handleLogin(String username, String password,
HttpServletRequest request) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
request.setAttribute("errorMessage", "密码错误");
return "error";
}
} else {
// 用户名错误
request.setAttribute("errorMessage", "用户名不存在");
return "error";
}
return null;
}
然后,在Thymeleaf的模版页面中,使用表达读取以上封装的数据:
<h3 th:text="${errorMessage}">xxxxxxx</h3>
2.【推荐】将需要转发的数据封装在ModelMap中
使用方法与使用HttpServletRequest基本一致!需要在处理请求的方法的参数列表中添加ModelMap类型的参数,当需要转发数据时,调用该参数对象的addAttribute(String name, Object value)封装所需要转发的数据:
@RequestMapping("handle_login.do")
public String handleLogin(String username, String password,
ModelMap modelMap) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
// request.setAttribute("errorMessage", "密码错误");
modelMap.addAttribute("errorMessage", "[M] 密码错误");
return "error";
}
} else {
// 用户名错误
// request.setAttribute("errorMessage", "用户名不存在");
modelMap.addAttribute("errorMessage", "[M] 用户名不存在");
return "error";
}
return null;
}
ModelMap是继承自LinkedHashMap的,其中的addAttribute()方法本质就是调用了Map的put()方法来实现的。
3.【不推荐】使用ModelAndView作为处理请求的方法的返回值
将处理请求的方法的返回值声明为ModelAndView类型,在需要返回结果时,调用ModelAndView(String viewName, Map<String, ?> model)构造方法,确定视图名称和数据即可:
@RequestMapping("handle_login.do")
public ModelAndView handleLogin(String username, String password) {
System.out.println("UserController.handleLogin()");
System.out.println("username=" + username);
System.out.println("password=" + password);
Map<String, Object> map = new HashMap<String, Object>();
// 判断用户名
if ("root".equals(username)) {
// 用户名正确,需要判断密码
if ("1234".equals(password)) {
// 密码也正确,则登录成功
// TODO 处理登录成功
} else {
// 密码错误
// request.setAttribute("errorMessage", "密码错误");
// modelMap.addAttribute("errorMessage", "[M] 密码错误");
map.put("errorMessage", "[MAV] 密码错误");
return new ModelAndView("error", map);
}
} else {
// 用户名错误
// request.setAttribute("errorMessage", "用户名不存在");
// modelMap.addAttribute("errorMessage", "[M] 用户名不存在");
map.put("errorMessage", "[MAV] 用户名不存在");
return new ModelAndView("error", map);
}
return null;
}