業務方法的參數
業務方法的參數類型、參數個數是任意的,根據需要使用。
常見的參數類型:
- HttpServletRequest、HttpServletResponse、HttpSession
獲取Servlet原生的API
- Model 、ModelMap
向視圖傳遞數據,會自動將Model、ModelMap中的數據傳給視圖。
- 簡單數據類型 、實體類
接收表單傳遞的數據
常見的返回值類型
- ModeAndView
視圖名+數據
- String
返回視圖名,會與視圖解析器中的前綴、后綴拼接起來,組成完整的視圖名。
可以和@ResponseBody配合使用,直接向瀏覽器輸出字符串。
- void
有時候接收到請求后,做一些操作就OK了,不必返回視圖來響應,這時可以把返回值類型寫成void。
如果想轉發、重定向、向視圖傳遞數據,可以傳入參數HttpServletRequest、HttpServletResponse。
需要注意的是,使用HttpServletRequest、HttpServletResponse進行轉發、重定向時,不會使用視圖解析器,需要寫完整的視圖名。
示例 返回視圖名
比如登錄成功,返回某個視圖名,轉發到指定的頁面。
@RequestMapping("/login")
public String login(){
//....
return "index";
}
@RequestMapping("/logout")
public String logout(){
//....
return "index";
}
@RequestMapping("/upload")
public String upload(){
//....
return "success";
}
示例 使用Model向視圖傳遞數據
@RequestMapping("/handler")
public String handler(Model model){
User user = new User();
user.setUsername("chy");
user.setPassword("abcd");
model.addAttribute("user", user);
return "user_info";
}
在視圖中可通過${key}的方式獲取對應的value。
Model中可儲存多個數據,使用多個setAttribute()即可,數據的類型可以不相同(實質是使用Map儲存數據)。
示例 直接輸出到瀏覽器
方式一:
@RequestMapping("/user")
@ResponseBody public String handler(){
return "<h2>hello</h2>";
}
把字符串添加到響應體中返回給瀏覽器。瀏覽器會解析里面的html標簽。
方式二:
@RequestMapping("/user")
public void handler(HttpServletResponse response) throws IOException {
response.getWriter().print("<h1>hello</h1>");
}
注意print()才是輸出到瀏覽器頁面上,write()是向瀏覽器寫數據,瀏覽器會把write()的內容保存到文件中(下載)。
