【Spring】15、spring mvc路徑匹配原則

来源:http://www.cnblogs.com/wangzhongqiu/archive/2017/05/19/6877632.html
-Advertisement-
Play Games

Ant path 匹配原則 在Spring MVC中經常要用到攔截器,在配置需要要攔截的路徑時經常用到<mvc:mapping/>子標簽,其有一個path屬性,它就是用來指定需要攔截的路徑的。例如: <mvc:interceptor><mvc:mapping path="/**" /><bean c ...


Ant path 匹配原則

在Spring MVC中經常要用到攔截器,在配置需要要攔截的路徑時經常用到<mvc:mapping/>子標簽,其有一個path屬性,它就是用來指定需要攔截的路徑的。例如: <mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor" />
</mvc:interceptor> </mvc:interceptor> 根據以上配置,此攔截器會攔截所有的請求。   Spring MVC中的路徑匹配要比標準的web.xml要靈活的多。預設的策略實現了 org.springframework.util.AntPathMatcher,就像名字提示的那樣,路徑模式是使用了Apache Ant的樣式路徑,Apache Ant樣式的路徑有三種通配符匹配方法(在下麵的表格中列出)
這些可以組合出很多種靈活的路徑模式
Table Ant Wildcard Characters
Wildcard Description  
? 匹配任何單字元  
* 匹配0或者任意數量的字元  
** 匹配0或者更多的目錄  

Table Example Ant-Style Path Patterns

Path Description  
/app/*.x 匹配(Matches)所有在app路徑下的.x文件  
/app/p?ttern 匹配(Matches) /app/pattern 和 /app/pXttern,但是不包括/app/pttern  
/**/example 匹配(Matches) /app/example, /app/foo/example, 和 /example  
/app/**/dir/file. 匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo/bar/dir/file.pdf, 和 /app/dir/file.java  
/**/*.jsp 匹配(Matches)任何的.jsp 文件  

 

 HandlerMapping

一 個WEB應用程式基本上都要依賴於URL與請求處理器之間的映射,spring MVC也是一樣,但Spring MVC就像Spring所作的一切一樣(譯者:靈活,可以配置各種東西,但是也造成了很多複雜性),肯定不會只有一種方法來映射URL和 Controller之間的關係,並且在實際上,允許你自己創建映射規則和實現,而不僅僅依賴URL映射。
Spring提供了URL的映射處理, 並且處理路徑模式的順序和方法並沒有限定到任何的介面上。Spring MVC的預設實現org.springframework.web.servlet.handler. AbstractUrlHandlerMapping, 會以最長符合路徑模式來匹配一個路徑。
例如:給定一個請求是 /app/dir/file.jsp 並且現在存在兩個路徑匹配模式/**/*.jsp 和/app/dir/*.jsp, 那麼,URL會匹配那個模式呢?最後的那個模式/app/dir/*.jsp,會因為最長(has more characters)的原則被匹配,它比/**/*.jsp擁有更多的字元.註意的是,這個原則並沒有在任何高級別的介面中指定,但卻是一種實現細節。
!!下麵看一下預設的兩個HandlerMapping
BeanNameUrlHandlerMapping
默 認的映射策略實現是org.springframework.web. servlet.handler.BeanNameUrlHandlerMapping類. 這個類要求任何有可能處理請求的Bean都要起一個以反斜杠(/)字元開頭的名稱或者別名,這個名稱或者別名可以是符合URL Path匹配原則中的任何名字。

Listing A Controller Mapped by a Bean Name

xml 代碼
  1. <bean name="/home"  class="com.apress.expertspringmvc.flight.web.HomeController">  
  2. <property name="flightService" ref="flightService" /> 
  3. </bean

■註意:你不能使用id這個屬性來指定任何的URL路徑,因為在XML規格定中禁止(/)字元來指定XML的id,不過你可以在一個Bean定義中同時擁有id和name屬性 
BeanNameUrlHandlerMapping 的缺點
它 非常便於使用的同時,也擁有一些缺點。它不能影射一個Prototype的Bean.換句話說,當使用 BeanNameUrlHandlerMapping時, 所有的請求處理類只能是單例的(singletons) . 一般來說,Controllers 都是按照單例建立的,所以這個並不是一個很嚴重的問題.還有,我會在後面的章節中介紹Controller,只會有很少類型的Controller需要是 prototypes.


■註釋: Prototype bean 是一種非單例(non-singleton)的bean. 任何一次調用ApplicationContext的getBean()方法時都會返回一個新的Bean實例.

BeanNameUrlHandlerMapping的另外一個問題存在於在你的應用程式中 應用攔截(interceptor). 因為請求的映射(handler mapping )和Bean(beans imapping)的映射給綁定在一起了,沒有分開,這樣就不可能在Controller和攔截之間創建複雜的關係。如果有複雜的請求映射需求,你可以用 SimpleUrlHandlerMapping 來代替BeanNameUrlHandlerMapping. SimpleUrlHandlerMapping作為BeanNameUrlHandlerMapping的另外一種選擇, SimpleUrlHandlerMapping直指BeanNameUrlHandlerMapping的兩大軟肋.它可以映射 prototype類型的請求處理器,並且它允許你為處理器(handlers)和攔截器(interceptors)之間創建複雜靈活的映射路徑的映射演算法BeanNameUrlHandlerMapping是 使用相同的基礎組件,所以這個模式依然是映射URL到請求處理器的(request handler) ,你簡單的在ApplicationContext中聲明一下,就可以使用SimpleUrlHandlerMapping了. DispatcherServlet會根據類型找到的,並且不會創建預設的映射器了(BeanNameUrlHandlerMapping).意思就是, 如果你想兩個都用,那麼就要全部聲明一下在ApplicationContext里.
■提示 DispatcherServlet會鏈式處理請求的(譯者:依次處理請求,可以參照過濾器和GOF中的責任鏈模式),這樣允許按照你的要求處理映射,映射處理器(Handler mappings )實現了Orderedr介面.

轉自:http://blog.csdn.net/rj042/article/details/23278337


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 預設是 singleton ,單例模式,如下代碼: 獲取的 service 和 service2 都是一個對象,結果為true。 如果將 scope 設置為 prototype: 1 <bean id="userService" class="com.bjsxt.service.UserServic ...
  • Js原生Ajax和Jquery的Ajax 學習目標 案例1-非同步校驗用戶名是否存在 案例2-站內查詢 學習目標 案例1-非同步校驗用戶名是否存在 案例2-站內查詢 一、Ajax概述 1.什麼是同步,什麼是非同步 同步現象:客戶端發送請求到伺服器端,當伺服器返迴響應之前,客戶端都處於等待卡死狀態 非同步現象 ...
  • 給出一個長為n的數列,以及n個操作,操作涉及區間加法,區間求和。 這題的詢問變成了區間上的詢問,不完整的塊還是暴力;而要想快速統計完整塊的答案,需要維護每個塊的元素和,先要預處理一下。 考慮區間修改操作,不完整的塊直接改,順便更新塊的元素和;完整的塊類似之前標記的做法,直接根據塊的元素和所加的值計算 ...
  • 顯然我們一定是先走到AB上一點X,然後走到CD上一點Y,最後到D。 那麼答案就是|AX|/P+|XY|/R+|YD|/Q 假設我們已經確定了X,那麼目標就是在CD上找一點Y,使|XY|/R+|YD|/Q最小。 顯然這是個單峰函數。 那麼三分套三分就可以了。 代碼: #include<iostream ...
  • 結構型模式是描述如何將類對象結合在一起,形成一個更大的結構,結構模式描述兩種不同的東西:類與類的實例。故可以分為類結構模式和對象結構模式。在GoF設計模式中,結構型模式有:1.適配器模式 Adapter 適配器模式是將一個類的介面轉換成客戶希望的另外一個介面。適配器模式使得原本由於介面不相容而不能一 ...
  • (filetype("./test")); //判斷是文件還是目錄 * (is_file("./aa.txt")); //判斷是否是文件 * is_dir("./test"); //判斷是否是目錄 echo fileatime("./aa.txt"); //文件的上次訪問時間 返回時間戳 echo ... ...
  • 一、random常用模塊 1.random.random() 隨機生成一個小數 2.random.randint(m,n) 隨機生成一個m到n的整數(包括n) 3. random.randrange(m,n) 隨機生成m到n中的一個數,包括 m 但是不包括 n 4. random.smaple(so ...
  • 1 <bean name="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean> 1 <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"></bean> 用id和name的效果是一樣的,唯一的不同是 n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...