基本介紹
- 中文名:映射請求
- 外文名:Map requests
- 涉及學科:信息科學
- 套用:虛擬網路等
- 實質:針對BIOS設定的選項
- 作用:從BIOS映射中直接讀取。
背景
虛擬網路的映射
- 離線VN映射問題解決方案
- 線上VN映射問題解決方案。
虛擬網路映射面臨的挑戰
@RequestMapping映射請求的使用
- 類定義處:提供初步的請求映射信息。相當於當前 WEB 套用的根目錄
- 方法處:提供進一步的細分映射信息。相對於類定義處的 URL。
- 若類定義處未標註@RequestMapping,則方法處標記的 URL 相當於當前 WEB 套用的根目錄
- 若類定義處標註@RequestMapping,則方法處標記的 URL 相對於類定義處的@RequestMapping而言的!
- param1: 表示請求必須包含名為 param1 的請求參數
- !param1: 表示請求不能包含名為 param1 的請求參數
- param1 != value1: 表示請求包含名為 param1 的請求參數,但其值 不能為 value1
- {“param1=value1”, “param2”}: 請求必須包含名為 param1 和param2 的兩個請求參數,且 param1 參數的值必須為 value1!
@RequestMapping(value="/helloParams",params={"username","pwd!=123456"}) public String helloParams(){ return "success"; } |
- ?:匹配檔案名稱中的一個字元
- *:匹配檔案名稱中的任意多個任意字元[0個字元除外!]
- **:** 匹配多層路徑
- /user/*/createUser: 匹配
- /user/aaa/createUser、/user/bbb/createUser 等 URL
- /user/createUser、/user/aaa/bbb/createUser 等 URL
- /user/createUseraa、/user/createUserbb 等 URL
帶占位符的 URL 是 Spring3.0 新增的功能,該功能在 SpringMVC 向 REST 目標挺進發展過程中具有里程碑的意義
@RequestMapping(value="/helloPathVariable/{id}") public String helloPathVariable(@PathVariable(value="id") Integer id) throws IOException{ System.out.println("id="+id); return "success"; } |
- value:這個欄位要與請求參數的name屬性值一致!
- required:布爾值,默認是true,當指定為false的時候,說明這個參數不是必須的,可以不帶!
- defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!
//獲取請求參數信息 @RequestMapping(value="/helloReqParam") public String helloReqParam(@RequestParam(value="username",required=false) String username){ System.out.println("username-------"+username); return SUCCESS; } |
- value:這個欄位要與請求參數的name屬性值一致!
- required:布爾值,默認是true,當指定為false的時候,說明這個參數不是必須的,可以不帶!
- defaultValue:在我們不傳值的時候,默認使用defaultValue的值,傳遞參數的時候,使用我們傳遞的參數值!
Servlet規範對映射請求的描述
- 容器將嘗試找到一個請求路逕到servlet路徑的精確匹配。成功匹配則選擇該servlet。
- 容器將遞歸地嘗試匹配最長路徑前綴。這是通過一次一個目錄的遍歷路徑樹完成的,使用‘/’字元作為
路徑分隔設定。最長匹配確定選擇的servlet。 - 如果URL最後一部分包含一個擴展名(如.do),servlet容器將視圖匹配為擴展名處理請求的Servlet。
擴展名定義在最後一部分的最後一個‘.’字元之後。 - 如果前三個規則都沒有產生一個servlet匹配,容器將試圖為請求資源提供相關的內容。如果套用中定義
了一個“default”servlet,它將被使用。許多容器提供了一種隱式的default servlet用於提供內容。
容器必須使用區分大小寫字元串比較匹配。
容器的匹配過程
- 精確路徑匹配。例子:比如servletA 的url-pattern為 /test,servletB的url-pattern為 /* ,這個時候,如果我訪問的url為http://localhost/test ,這個時候容器就會先進行精確路徑匹配,發現/test正好被servletA精確匹配,那么就去調用servletA,也不會去理會其他的 servlet了。
- 最長路徑匹配。例子:servletA的url-pattern為/test/*,而servletB的url-pattern為/test/a/*,此時訪問http://localhost/test/a時,容器會選擇路徑最長的servlet來匹配,也就是這裡的servletB。
- 擴展匹配,如果url最後一段包含擴展,容器將會根據擴展選擇合適的servlet。例子:servletA的url-pattern:*.action
- 如果前面三條規則都沒有找到一個servlet,容器會根據url選擇對應的請求資源。如果套用定義了一個default servlet,則容器會將請求丟給default servlet(什麼是default servlet?後面會講)。
- 以”/’開頭和以”/*”結尾的是用來做路徑映射的。 (對應於第2條匹配規則)
- 以前綴”*.”開頭的是用來做擴展映射的。(對應於第3條匹配規則)
- “/”是用來定義default servlet映射的。(對應於第4條匹配規則)
- 剩下的都是用來定義詳細映射的。比如: /aa/bb/cc.action(對應於第1條匹配規則)
注意
- Request URI = context path + servlet path + path info.
- Context paths 和 servlet paths 以 '/' 開始,但是不以'/'結尾.
- HttpServletRequest 提供3個方法 getContextPath(),getServletPath() 和getPathInfo() 來分別獲取 context path, servlet path, path info。
識別servlet路徑
- 精確路徑匹配(上面匹配的第一條規則):在這種情況下,getPathInfo()為空。
- 最長路徑匹配(上面匹配的第二條規則):如果有一個匹配,請求URI的匹配部分是getServletPath() 結果,其餘部分是getPathInfo()。
- 擴展匹配(上面匹配的第三條規則):在這種情況下,完整的請求URI是getServletPath()和getPathInfo()為空。
- 默認servlet匹配(上面匹配的第四條規則):如果沒有默認的servlet,它會傳送未找到指示的servlet的錯誤訊息。