本文主要以一些簡單的小例子,簡述在SpringMVC開發過程中,經常用到的Request方面的內容,僅供學習分享使用,如有不足之處,還請指正。 ...
本文主要以一些簡單的小例子,簡述在SpringMVC開發過程中,經常用到的Request方面的內容,僅供學習分享使用,如有不足之處,還請指正。
概述
在客戶機和伺服器之間進行請求-響應時,兩種最常被用到的方法是:GET 和 POST。如果要支持其他方式進行訪問,則必須在表單中增加Hidden元素,然後再SpringMVC中過濾器進行攔截,再重新封裝請求方式。
Request常見訪問方式
- GET - 從指定的資源請求數據。
- POST - 向指定的資源提交要被處理的數據
GET方式
訪問的特點:
- GET 請求可被緩存
- GET 請求保留在瀏覽器歷史記錄中
- GET 請求可被收藏為書簽
- GET 請求不應在處理敏感數據時使用
- GET 請求有長度限制
- GET 請求只應當用於取回數據
SpringMVC中GET訪問示例
如下所示:
1 /** 2 * GET請求方式 3 * @return 4 */ 5 @RequestMapping(value="testGet",method=RequestMethod.GET) 6 public ModelAndView testGet(String uname){ 7 String msg="GET方式訪問,uname="+uname; 8 System.out.println(msg); 9 ModelAndView mav=new ModelAndView("HelloWorld"); 10 mav.addObject("msg", msg); 11 return mav; 12 13 }
前端可以通過請求的URL訪問,也可以表單(method=get)的方式訪問,如下所示:
1 <form name="form1" action="testGet" method="get" > 2 <span>GET方式提交</span><br /> 3 <input name="uname" type="text" /> 4 <input name="submit" type="submit" value="提交" /> 5 </form>
POST方式
訪問特點
- POST 請求不會被緩存
- POST 請求不會保留在瀏覽器歷史記錄中
- POST 不能被收藏為書簽
- POST 請求對數據長度沒有要求
SpringMVC中POST方式示例
如下:
1 /** 2 * POST請求方式 3 * @return 4 */ 5 @RequestMapping(value="testPost",method=RequestMethod.POST) 6 public ModelAndView testPost(String uname){ 7 String msg="POST方式訪問,uname="+uname; 8 System.out.println(msg); 9 ModelAndView mav=new ModelAndView("HelloWorld"); 10 mav.addObject("msg", msg); 11 return mav; 12 13 }
前端訪問代碼
POST方式通常採用form的方式,如下所示:
1 <form name="form2" action="testPost" method="post" > 2 <span>POST方式提交</span><br /> 3 <input name="uname" type="text" /> 4 <input name="submit" type="submit" value="提交" /> 5 </form>
PUT方式訪問及步驟
PUT方式是把消息本體中的消息發送到一個URL,跟POST類似,但不常用。
SpringMVC中PUT方式步驟如下:
1. 設置路徑的訪問方式為PUT
1 /** 2 * PUT請求方式 3 * 原始請求,預設只支持GET,POST請求方式,如有要支持PUT和DELETE, 4 * 需要在Form表單(表單的請求方式必須為POST)中,增加一個hidden標簽,name="_method" value="訪問方式" 5 * @return 6 */ 7 @RequestMapping(value="testPut",method=RequestMethod.PUT) 8 public ModelAndView testPut(String uname){ 9 String msg="PUT方式訪問,uname="+uname; 10 System.out.println(msg); 11 ModelAndView mav=new ModelAndView("HelloWorld"); 12 mav.addObject("msg", msg); 13 return mav; 14 15 }
2. 在web.xml中設置過濾器
1 <!-- 設置過濾器 --> 2 <filter> 3 <filter-name>filter</filter-name> 4 <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>filter</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping>
3. form表單中增加hidden訪問控制項
如下所示:method必須為post,hidden的name=_method,value=PUT,屬於固定寫法。
1 <form name="form3" action="testPut" method="post" > 2 <span>PUT方式提交</span><br /> 3 <input type="hidden" name="_method" value="PUT"> 4 <input name="uname" type="text" /> 5 <input name="submit" type="submit" value="提交" /> 6 </form>
DELETE方式訪問及步驟
DELETE主要用於刪除指定資源。
SpringMVC支持Delete方式訪問的步驟
1. 設置路徑訪問方式為DELETE
如下所示:
1 /** 2 * DELETE請求方式 3 * @return 4 */ 5 @RequestMapping(value="testDelete",method=RequestMethod.DELETE) 6 public ModelAndView testDelete(String uname){ 7 String msg="DELETE方式訪問,uname="+uname; 8 System.out.println(msg); 9 ModelAndView mav=new ModelAndView("HelloWorld"); 10 mav.addObject("msg", msg); 11 return mav; 12 13 }
2. 在配置好過濾器的前提下,前端訪問
方式如下:
1 <form name="form4" action="testDelete" method="post" > 2 <span>DELETE方式提交</span><br /> 3 <input type="hidden" name="_method" value="DELETE"> 4 <input name="uname" type="text" /> 5 <input name="submit" type="submit" value="提交" /> 6 </form>
請求參數
請求參數可以採用的restful的方式進行提取,也可以採用參數的方式進行獲取。如果前端請求參數和函數參數名一致,則可以自動匹配。
如果不一致,則可以使用@RequestParam("uname")來聲明
如下所示:
1 /** 2 * 測試請求參數,如果參數名稱和前端頁面參數不一致,則可以使用@RequestParam("uname")來聲明 3 * @param uname 4 * @return 5 */ 6 @RequestMapping(value="testParam",method=RequestMethod.POST) 7 public ModelAndView testParam(@RequestParam("uname") String name){ 8 String msg="POST方式訪問,請求參數,name="+name; 9 System.out.println(msg); 10 ModelAndView mav=new ModelAndView("HelloWorld"); 11 mav.addObject("msg", msg); 12 return mav; 13 14 }
前端訪問方式
1 <form name="form6" action="testParam" method="post" > 2 <span>測試Param</span><br /> 3 <input name="uname" type="text" /><br /> 4 <input name="uage" type="text" /><br /> 5 <input name="submit" type="submit" value="提交" /> 6 </form>
設置是否必須訪問和預設值
1 /** 2 * 請求參數,設置參數是否必填 3 * @param name 4 * @param age 5 * @return 6 */ 7 @RequestMapping(value="testParam2",method=RequestMethod.POST) 8 public ModelAndView testParam2(@RequestParam("uname") String name,@RequestParam(value="uage",required=false,defaultValue="11")int age){ 9 String msg="POST方式訪問,請求參數,name="+name; 10 String msg1="POST方式訪問,請求參數,age="+age; 11 System.out.println(msg); 12 System.out.println(msg1); 13 ModelAndView mav=new ModelAndView("HelloWorld"); 14 mav.addObject("msg", msg+"\r\n"+msg1); 15 return mav; 16 17 }
獲取請求Header信息
@RequestHeader註解可以輕鬆獲取請求的Header信息,如下所示:獲取Accept-Language,並賦給參數header
1 /** 2 * 獲取請求頭部信息,如果多個value,用數組表示 3 * @param header 4 * @return 5 */ 6 @RequestMapping(value="testHeader",method=RequestMethod.POST) 7 public ModelAndView testHeader(@RequestHeader("Accept-Language") String header){ 8 String msg="請求頭部信息,header="+header; 9 System.out.println(msg); 10 ModelAndView mav=new ModelAndView("HelloWorld"); 11 mav.addObject("msg", msg); 12 return mav; 13 14 }
獲取請求cookie信息
如下所示:獲取cookie中的JESSIONID並賦給參數
1 /** 2 * 獲取cookie中的值,服務端在客戶端第一次請求時,會分配一個session給客戶端,其中包含sessionid 3 * @param sessionId 4 * @return 5 */ 6 @RequestMapping(value="testCookie",method=RequestMethod.POST) 7 public ModelAndView testCookie(@CookieValue("JSESSIONID") String sessionId){ 8 String msg="請求cookie信息,JSESSIONID="+sessionId; 9 System.out.println(msg); 10 ModelAndView mav=new ModelAndView("HelloWorld"); 11 mav.addObject("msg", msg); 12 return mav; 13 14 }
備註
快樂很簡單,就是春天的鮮花,夏天的綠蔭,秋天的野果,冬天的漫天飛雪。