1. 程式人生 > >springmvc中轉發與重定向

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