Spring MVC控制器方法參數類型


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]}")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM