業務方法的參數
業務方法的參數類型、參數個數是任意的,根據需要使用。
常見的參數類型:
- 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()的內容保存到文件中(下載)。