springmvc(3)註解
阿新 • • 發佈:2018-11-11
rtu false 以及 測試 顯示 bre pin 架構 system
有疑問可以參考博主其他關於spring mvc的博文
此時直接進行代碼的實現
一般的步驟:
-加入jar包
-配置DispatcherServlet
-加入Spring MVC配置文件
-編寫請求的處理器
-視圖
創建web工程:
加入jar包
web.xml文件
<!-- 配置DispatcherServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置初始化參數 --> <!-- 配置 DispatcherServlet 的一個初始化參數: 配置 SpringMVC 配置文件的位置和名稱 --> <!-- 實際上也可以不通過 contextConfigLocation 來配置 SpringMVC 的配置文件, 而使用默認的. 默認的配置文件為:/WEB-INF/<servlet-name>-servlet.xml 簡單的列子:在WEB-INF文件夾下springDispatcherServlet-servlet.xml,init就不需要在配置了 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
springmvc.xml以及所需要的類
springmvc.xml
<!-- 配置自動掃描的包 --> <context:component-scan base-package="com.MrChengs.A"></context:component-scan> <!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
HelloWord.java
//自動掃描 @Controller public class HelloWord { //返回值通過視圖解析器解析為實際的物理邏輯視圖,InternalResourceViewResolver解析器 //<property name="prefix" value="/WEB-INF/views/"></property> //<property name="suffix" value=".jsp"></property> //通過前綴 prefix + 返回值 + 後綴 // == /WEB-INF/views/ + success + .jsp //使用註解來映射請求url @RequestMapping("/helloword") public String say(){ System.out.println("hello"); return "success"; } }
這裏說明需要在路徑下建立相關的 文件以及路徑:
success.jsp 主要用於成功後的顯示
<body> <h4>success</h4> </body>
在index.jsp
註意路徑在href裏面<body> <a href="helloword">helloword</a> </body>
得到:註意看請求的url
@RequestMapping ->Spring MVC 使用@RequestMapping註解為控制器指定可以處理哪些URL請求 ->在控制器的類定義及方法出都可以標註 -->類定義處:提供初步的請求映射信息。相對於WEB應用的根目錄 -->方法處:提供進一步的細分映射信息,相對於類定義處的URL 若類定義處未標註@RequestMapping,則方法處標記的URL相對於WEB應用的根目錄 -->DispatcherServlet截獲請求後,就通過控制器上 @RequestMapping 提供的映射信息確定請求對應的方法
測試在類定義附加方法處
TestRequestMapping.java 此時的路徑是:類定義+方法
@Controller @RequestMapping("/springmvc") public class TestRequestMapping { @RequestMapping("/RequestMapping") public String RequestMapping(){ System.out.println("RequestMapping"); return "success"; } }
在index,jsp中:
<a href="springmvc/RequestMapping">testMethod</a>
在運行之後點擊超鏈接,控制臺會顯示,主要看路徑:
具體可看圖的解釋:
映射請求參數、請求方法或請求頭 ->@RequestMapping 除了可以使用請求 URL 映射請求外, 還可以使用請求方法、請求參數及請求頭映射請求 ->@RequestMapping 的 value、method、params 及 heads 分別表示請求 URL、請求方法、請求參數及請求頭的映射條 件,他們之間是與的關系,聯合使用多個條件可讓請求映射 更加精確化 ->params 和 headers支持簡單的表達式: – -param1: 表示請求必須包含名為 param1 的請求參數 – -!param1: 表示請求不能包含名為 param1 的請求參數 – -param1 != value1: 表示請求包含名為 param1 的請求參數,但其值 不能為 value1 – -{“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2 的兩個請求參數,且 param1 參數的值必須為 value1
method: TestRequestMapping.java 可以為post,get......
@RequestMapping(value="/RequestMethod",method=org.springframework.web.bind.annotation.RequestMethod.POST) public String RequestMethod(){ System.out.println("RequestMethod"); return "success"; }
index.jsp中:
<form action="springmvc/RequestMethod" method="post"> <input type="submit" value="submit"> </form>點擊運行之後的按鈕: 如果此時強制使用get會報錯
params
TestRequestMapping.java @RequestMapping(value="/paramsAndHeaders",
params={"user","age!=20"})
public String ParamesHeaders(){
return "success";
}
index.jsp
<a href="springmvc/paramsAndHeaders">paramsAndHeaders</a>此時user屬性不寫或者age=20,都會報404錯誤
header:
可以使用params和header更加精確的映射請求, params和headers支持加單的表達式
使用 @RequestMapping 映射請求 Ant 風格資源地址支持 3 種匹配符: – ?:匹配文件名中的一個字符 – *:匹配文件名中的任意字符 – **:** 匹配多層路徑 @RequestMapping 還支持 Ant 風格的 URL: /user/*/createUser: 匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL /user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL /user/createUserer: 匹配 /user/createUseraa、/user/createUserbb 等 URL
簡單的小實例: TestRequestMapping.java
@RequestMapping("/antpath/*/ant")
public String AntPath(){
return "success";
}
index.jsp:
<a href="springmvc/antpath/mvcmmc/ant">Ant</a>
@PathVariable 映射 URL 綁定的占位符 帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有裏程碑的意義 通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 占位符可以通過 @PathVariable("xxx") 綁定到操作方法的入參
TestRequestMapping.java
@RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable(value="id") int id){ System.out.println("testPathVariable:" + id); return "success"; }
index.jsp
<a href="springmvc/testPathVariable/20">testPathVariable</a>
REST REST:即 Representational State Transfer。(資源)表現層狀態轉化。是目前 最流行的一種互聯網軟件架構。它結構清晰、符合標準、易於理解、擴展方便, 所以正得到越來越多網站的采用 資源(Resources):網絡上的一個實體,或者說是網絡上的一個具體信息。它 可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的存在。 可以用一個URI(統一資源定位符)指向它,每種資源對應一個特定的 URI 。要 獲取這個資源,訪問它的URI就可以,因此 URI 即為每一個資源的獨一無二的識 別符。 表現層(Representation):把資源具體呈現出來的形式,叫做它的表現層 (Representation)。比如,文本可以用 txt 格式表現,也可以用 HTML 格 式、XML 格式、JSON 格式表現,甚至可以采用二進制格式。 狀態轉化(State Transfer):每發出一個請求,就代表了客戶端和服務器的一 次交互過程。HTTP協議,是一個無狀態協議,即所有的狀態都保存在服務器 端。因此,如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生“ 狀態轉化”(State Transfer)。而這種轉化是建立在表現層之上的,所以就是 “ 表現層狀態轉化” 具體說,就是 HTTP 協議裏面,四個表示操作方式的動 詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET 用來獲 取資源,POST 用來新建資源,PUT 用來更新資源,DELETE 用來刪除資
示例: – /order/1 HTTP GET :得到 id = 1 的 order – /order/1 HTTP DELETE:刪除 id = 1的 order – /order/1 HTTP PUT:更新id = 1的 order – /order HTTP POST:新增 order ? HiddenHttpMethodFilter:瀏覽器 form 表單只支持 GET 與 POST 請求,而DELETE、PUT 等 method 並不支 持,Spring3.0 添加了一個過濾器,可以將這些請求轉換 為標準的 http 方法,使得支持 GET、POST、PUT 與 DELETE 請求。
需要在web.xml配置:
<!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter.class --> <!-- 可以把POST請求轉為delete/post --> <filter> <filter-name>filter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
java類中:
@RequestMapping(value="/test/{id}",method=org.springframework.web.bind.annotation.RequestMethod.GET) public String testGet(@PathVariable(value="id") int id){ System.out.println("GET:" + id); return "success"; } @RequestMapping(value="/test",method=org.springframework.web.bind.annotation.RequestMethod.POST) public String testPOST(){ System.out.println("POST:"); return "success"; } @RequestMapping(value="/test/{id}",method=org.springframework.web.bind.annotation.RequestMethod.DELETE) public String testDelete(@PathVariable(value="id") int id){ System.out.println("DELETE:" + id); return "success"; } @RequestMapping(value="/test/{id}",method=org.springframework.web.bind.annotation.RequestMethod.PUT) public String testPUT(@PathVariable(value="id") int id){ System.out.println("PUT:" + id); return "success"; }
index.jsp
<a href="springmvc/test/1">GET</a> <br> <form action="springmvc/test" method="post"> <input type="submit" value="POST"> </form> <br> <form action="springmvc/test/1" method="post"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="DELETE"> </form> <br> <form action="springmvc/test/1" method="post"> <input type="hidden" name="_method" value="PUT"> <input type="submit" value="PUT"> </form>
映射請求參數 & 請求參數 請求處理方法簽名 Spring MVC 通過分析處理方法的簽名,將 HTTP 請求信 息綁定到處理方法的相應人參中。 Spring MVC 對控制器處理方法簽名的限制是很寬松的, 幾乎可以按喜歡的任何方式對方法進行簽名。 必要時可以對方法及方法入參標註相應的註解( @PathVariable@RequestParam、@RequestHeader 等)、Spring MVC 框架會將 HTTP 請求的信息綁定到相應的方法入參 中,並根據方法的返回值類型做出相應的後續處理 使用 @RequestParam 綁定請求參數值 在處理方法入參處使用 @RequestParam 可以把請求參數傳遞給請求方法 – ---value:參數名 – --- required:是否必須。默認為 true, 表示請求參數中必須包含對應的參數,若不存在,將拋出異常 TestRequestMapping.java
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="username",required=false) String username,
@RequestParam(value="age") int age){
System.out.println("username:" + username + "--age:" + age);
return "success";
}
index.jsp
<a href="springmvc/testRequestParam?username=MrChang&age=22">testRequestParam</a>
@RequestHeader 綁定請求報頭的屬性值 請求頭包含了若幹個屬性,服務器可據此獲知客戶端的信 息,通過 @RequestHeader 即可將請求頭中的屬性值綁 定到處理方法的入參中 TestRequestMapping.java
@RequestMapping("/RequestHeader") public String testRequestHeader(@RequestHeader(value="Accept")String l){ System.out.println(l); return "success"; }
index.jsp
<a href="springmvc/RequestHeader">RequestHeader</a>
使用 POJO 對象綁定請求參數值 Spring MVC 會按請求參數名和 POJO 屬性名進行自動匹 配,自動為該對象填充屬性值。支持級聯屬性。 如:dept.deptId、dept.address.tel 等
TestRequestMapping.java
@RequestMapping("/testpojo") public String testtestpojo(User user){ System.out.println(user); return "success"; }
User.java
public class User { private String username; private String password; private String email; private Address address; }
Address.java
public class Address { private String city; }
index.java
<form action="springmvc/testpojo" method="post"> username:<input type="text" name="username"> <br> password:<input type="password" name="password"> <br> email:<input type="text" name="email"> <br> city:<input type="text" name="address.city"> <input type="submit" value="submit"> </form>
使用 Servlet API 作為
TestRequestMapping.java
@RequestMapping("/testServletAPI") public String testServletAPI(HttpServletRequest request, HttpServletResponse response){ System.out.println("request:" + request + "-response:" + response); return "success"; }
<a href="springmvc/testServletAPI">testServletAPI</a>
request:org.apache.catalina.connector.RequestFacade@7a434d60-
response:org.apache.catalina.connector.ResponseFacade@addea0e
springmvc(3)註解