springmvc中转发与重定向

在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`。

猜你喜欢

转载自blog.csdn.net/Nishino_shou/article/details/80574934
今日推荐