HttpServletRequest
Spring會自動將 Servlet API 作為參數傳過來
HttpServletResponse
InputStream
相當於request.getInputStream() 獲取請求區內容字節流
OutputStream
相當於request.getOutputStream() 獲取響應區內容字節流
Reader
request.getReader()
Writer
request.getWriter()
注意InputStream/OutputStream不能與Reader/Writer混用
WebRequest
提供了統一的訪問請求數據的接口(參數區、請求頭區,但不能訪問Cookie區)
NativeWebRequest
繼承WebRequest,提供本地Servelt API
webRequest.getParameter(“test”)
webRequest.setAttribute(“key”,”value”,WebRequest.SCOPE_REQUEST);作用域范圍
webRequest.getAttribute(“key”,WebRequest.SCOPE_REQUEST)
request = nativeWebRequest.getNativeRequest(HttpServletRequest.class)
response = nativeWebRequest.getNativeResponse(HttpServletResponse.class)
HttpSession
Spring MVC自動將Servlet API的session傳遞過來
命令對象
就是帶有setter方法的普通類,用於接收表單參數
Map map, Model model, ModelMap modelMap
這三個參數能夠暴露控制器中的模型,用於頁面的數據渲染
@RequestMapping("exposeModelData.do") public String testExposeModelData(Map<String,String> map, Model model, ModelMap modelMap){ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); Date date = new Date(); map.put("key1","value1"+dateFormat.format(date)); model.addAttribute("key2","value2"+dateFormat.format(date)); modelMap.addAttribute("key3","value3"+dateFormat.format(date)); return "exposeModelData"; }
<table> <thead><h2>顯示控制器暴露的模型數據</h2></thead> <tbody> <tr> <td>Map</td> <td><c:out value="${key1}"/></td> </tr> <tr> <td>Model</td> <td><c:out value="${key2}"/></td> </tr> <tr> <td>ModelMap</td> <td><c:out value="${key3}"/></td> </tr> </tbody> </table>
頁面上可以這樣獲取數據
其實,Map、Model、ModelMap三者是同一個對象,都是 BindingAwareModelMap 的實例
Errors
錯誤對象,建議錯誤對象緊跟在命令對象后(這點在Spring3.1之前是強制規定)
Locale
本地對象,等價於 ServletRequest.getLocale
@RequestParam注解過的對象
如 @RequestParam String username,則自動從請求中獲取參數名為username的值,也可以指定參數名,@RequestParam("username"),也可以指定是否必須?默認值是多少?
@RequestParam(value = "pageName",required = true,defaultValue = "testModelValueUI")
默認值除了可以是具體的值外,也可以是SpEL表達式。如 #{systemProperties['java.vm.version']}
如果請求中包含了同名參數,則一般使用數組或列表來接收
<td><input type="checkbox" name="cbx" value="1"/></td> <td><input type="checkbox" name="cbx" value="2"/></td> <td><input type="checkbox" name="cbx" value="3"/></td> <td><input type="checkbox" name="cbx" value="4"/></td> <td><input type="checkbox" name="cbx" value="5"/></td> <td><input type="checkbox" name="cbx" value="6"/></td>
@RequestMapping("testRequestParam.do") public String testRequestParam(@RequestParam String[] cbx){ for (String cb:cbx) System.out.println(cb); return "requestParam"; }
@ModelAttribute 放在處理請求的方法參數上,綁定的命令對象
如果將 @ModelAttribute 添加到了方法上(不是參數位置),則暴露返回對象用於頁面渲染(注意,這個方法不是功能方法,應該是被Controller調用的方法(我覺得這沒啥用))
如果將 @ModelAttribute 放在了返回值上,則暴露返回值給頁面
@SessionAttribute 綁定命令對象到session,一般用於多個頁面的連續請求
@Value注解,用於將一個SpEL表達式的值綁定到處理方法參數上
@Value("#{systemProperties[java.vm.version]}")