在Spring MVC中,处理请求时,默认返回的View组件的名称,是按照转发进行处理的!如果需要重定向,则在组件名的左侧添加‘redirect:’即可,例如:
return "redirect:login.do";
注意:如果是转发,‘return’的是组件的名称,可以结合配置得前缀和后缀找到某个jsp页面,如果是重定向, 'return'的‘redirect:’右侧是请求路径,也就是体现在'@RequestMapping'中配置的那些路径格式!
# 向前端页面提供数据
## 【不推荐】通过HttpServletRequest转发
在处理请求的方法中,添加`HttpServletRequest`参数,然后调用参数的`setAttribute(String name, Object data)`方法以封装需要转发的数据,如果有多条数据,则调用多次即可:
request.setAttribute("username", username);
在Spring MVC中,并不需要调用`getRequestDispatcher("").forward(req, resp)`语句,因为Spring MVC默认处理方式就是转发!
## 【不常用】通过ModelAndView转发数据
在`ModelAndView`中,`Model`表示的就是转发的数据,可以通过`ModelAndView(String viewName, Map<String, ?> model)`构造方法封装`Model`,而这里`Model`的类型就是`Map<String, Object>`,例如:
public ModelAndView handleReg(
String username, String password, String age) {
// 封装需要转发的数据
Map<String, Object> model
= new HashMap<String, Object>();
model.put("username", username);
model.put("password", password);
// 创建返回的对象
ModelAndView mav
= new ModelAndView("error", model);
// 执行返回
return mav;
}
## 【推荐】通过ModelMap转发数据
在处理请求的方法中,添加`ModelMap`类型的参数,当需要转发数据时,调用它的`addAttribute(String name, Object value)`方法即可封装数据,如果需要封装多条数据,则多次调用该方法即可:
public String handleReg(
String username, String password, String age,
ModelMap modelMap) {
// 转发数据:直接向参数modelMap中封装数据
modelMap.addAttribute("username", username);
// 返回
return "error";
}
## 把前端页面所需的数据放在HttpSession中
通常会把当前访问的用户的唯一标识(例如用户的ID或用户名、邮箱等)和使用频率较高的数据(例如用户名、昵称、头像)存储在Session中!
使用Session的方式可以完全参考使用`ModelMap`。