欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring mvc路徑匹配原則詳解

 更新時(shí)間:2018年02月10日 13:50:07   作者:rj042  
這篇文章主要介紹了spring mvc路徑匹配原則詳解,小編覺得還是挺不錯(cuò)的,這里分享給大家,需要的朋友可以參考下,下面就和小編一起來看看吧

在Spring MVC中經(jīng)常要用到攔截器,在配置需要要攔截的路徑時(shí)經(jīng)常用到<mvc:mapping/>子標(biāo)簽,其有一個(gè)path屬性,它就是用來指定需要攔截的路徑的。例如:

<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor" />
</mvc:interceptor>
</mvc:interceptor>

根據(jù)以上配置,此攔截器會(huì)攔截所有的請(qǐng)求。

Spring MVC中的路徑匹配要比標(biāo)準(zhǔn)的web.xml要靈活的多。默認(rèn)的策略實(shí)現(xiàn)了 org.springframework.util.AntPathMatcher,就像名字提示的那樣,路徑模式是使用了Apache Ant的樣式路徑,Apache Ant樣式的路徑有三種通配符匹配方法(在下面的表格中列出),這些可以組合出很多種靈活的路徑模式

Table Ant Wildcard Characters


Wildcard
Description
? 匹配任何單字符
* 匹配0或者任意數(shù)量的字符
** 匹配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

一 個(gè)WEB應(yīng)用程序基本上都要依賴于URL與請(qǐng)求處理器之間的映射,Spring MVC也是一樣,但Spring MVC就像Spring所作的一切一樣(譯者:靈活,可以配置各種東西,但是也造成了很多復(fù)雜性),肯定不會(huì)只有一種方法來映射URL和 Controller之間的關(guān)系,并且在實(shí)際上,允許你自己創(chuàng)建映射規(guī)則和實(shí)現(xiàn),而不僅僅依賴URL映射。
Spring提供了URL的映射處理, 并且處理路徑模式的順序和方法并沒有限定到任何的接口上。Spring MVC的默認(rèn)實(shí)現(xiàn)org.springframework.web.servlet.handler. AbstractUrlHandlerMapping, 會(huì)以最長符合路徑模式來匹配一個(gè)路徑。
例如:給定一個(gè)請(qǐng)求是 /app/dir/file.jsp 并且現(xiàn)在存在兩個(gè)路徑匹配模式/**/*.jsp 和/app/dir/*.jsp, 那么,URL會(huì)匹配那個(gè)模式呢?最后的那個(gè)模式/app/dir/*.jsp,會(huì)因?yàn)樽铋L(has more characters)的原則被匹配,它比/**/*.jsp擁有更多的字符.注意的是,這個(gè)原則并沒有在任何高級(jí)別的接口中指定,但卻是一種實(shí)現(xiàn)細(xì)節(jié)。

下面看一下默認(rèn)的兩個(gè)HandlerMapping

BeanNameUrlHandlerMapping

默認(rèn)的映射策略實(shí)現(xiàn)是org.springframework.web. servlet.handler.BeanNameUrlHandlerMapping類. 這個(gè)類要求任何有可能處理請(qǐng)求的Bean都要起一個(gè)以反斜杠(/)字符開頭的名稱或者別名,這個(gè)名稱或者別名可以是符合URL Path匹配原則中的任何名字。

Listing A Controller Mapped by a Bean Name

xml 代碼

<bean name="/home" class="com.apress.expertspringmvc.flight.web.HomeController"> 
<property name="flightService" ref="flightService" /> 
</bean> 

■注意:你不能使用id這個(gè)屬性來指定任何的URL路徑,因?yàn)樵赬ML規(guī)格定中禁止(/)字符來指定XML的id,不過你可以在一個(gè)Bean定義中同時(shí)擁有id和name屬性

BeanNameUrlHandlerMapping 的缺點(diǎn)

它非常便于使用的同時(shí),也擁有一些缺點(diǎn)。它不能影射一個(gè)Prototype的Bean.換句話說,當(dāng)使用 BeanNameUrlHandlerMapping時(shí), 所有的請(qǐng)求處理類只能是單例的(singletons) . 一般來說,Controllers 都是按照單例建立的,所以這個(gè)并不是一個(gè)很嚴(yán)重的問題.還有,我會(huì)在后面的章節(jié)中介紹Controller,只會(huì)有很少類型的Controller需要是 prototypes.

■注釋: Prototype bean 是一種非單例(non-singleton)的bean. 任何一次調(diào)用ApplicationContext的getBean()方法時(shí)都會(huì)返回一個(gè)新的Bean實(shí)例.

BeanNameUrlHandlerMapping的另外一個(gè)問題存在于在你的應(yīng)用程序中 應(yīng)用攔截(interceptor). 因?yàn)檎?qǐng)求的映射(handler mapping )和Bean(beans imapping)的映射給綁定在一起了,沒有分開,這樣就不可能在Controller和攔截之間創(chuàng)建復(fù)雜的關(guān)系。如果有復(fù)雜的請(qǐng)求映射需求,你可以用 SimpleUrlHandlerMapping 來代替BeanNameUrlHandlerMapping. SimpleUrlHandlerMapping作為BeanNameUrlHandlerMapping的另外一種選擇, SimpleUrlHandlerMapping直指BeanNameUrlHandlerMapping的兩大軟肋.它可以映射 prototype類型的請(qǐng)求處理器,并且它允許你為處理器(handlers)和攔截器(interceptors)之間創(chuàng)建復(fù)雜靈活的映射路徑的映射算法與BeanNameUrlHandlerMapping是 使用相同的基礎(chǔ)組件,所以這個(gè)模式依然是映射URL到請(qǐng)求處理器的(request handler) ,你簡單的在ApplicationContext中聲明一下,就可以使用SimpleUrlHandlerMapping了. DispatcherServlet會(huì)根據(jù)類型找到的,并且不會(huì)創(chuàng)建默認(rèn)的映射器了(BeanNameUrlHandlerMapping).意思就是, 如果你想兩個(gè)都用,那么就要全部聲明一下在ApplicationContext里.

■提示 DispatcherServlet會(huì)鏈?zhǔn)教幚碚?qǐng)求的(譯者:依次處理請(qǐng)求,可以參照過濾器和GOF中的責(zé)任鏈模式),這樣允許按照你的要求處理映射,映射處理器(Handler mappings )實(shí)現(xiàn)了Orderedr接口.

總結(jié)

以上就是本文關(guān)于spring mvc路徑匹配原則詳解的全部內(nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • Spring Kafka中@KafkaListener注解的參數(shù)與使用小結(jié)

    Spring Kafka中@KafkaListener注解的參數(shù)與使用小結(jié)

    @KafkaListener注解為開發(fā)者提供了一種聲明式的方式來定義消息監(jiān)聽器,本文主要介紹了Spring Kafka中@KafkaListener注解的參數(shù)與使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06
  • java排序算法之_選擇排序(實(shí)例講解)

    java排序算法之_選擇排序(實(shí)例講解)

    下面小編就為大家?guī)硪黄猨ava排序算法之_選擇排序(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java中常用的Lambda表達(dá)式案例解析

    Java中常用的Lambda表達(dá)式案例解析

    這篇文章主要介紹了Java中常用的Lambda表達(dá)式案例解析,Lambxda?使用比較多的場景,就是集合類下的?Lambda?流操作,往往幾行代碼可以幫助我們實(shí)現(xiàn)復(fù)雜代碼,下面和我小編一起進(jìn)入文章學(xué)習(xí)該詳細(xì)內(nèi)容吧
    2022-04-04
  • 跳表的由來及Java實(shí)現(xiàn)詳解

    跳表的由來及Java實(shí)現(xiàn)詳解

    跳表(Skip List)是一種基于鏈表的數(shù)據(jù)結(jié)構(gòu),它可以支持快速的查找、插入、刪除操作,本文主要來和大家講講跳表的由來與實(shí)現(xiàn),感興趣的小伙伴可以了解一下
    2023-06-06
  • 如何基于Jenkins構(gòu)建Jmeter項(xiàng)目

    如何基于Jenkins構(gòu)建Jmeter項(xiàng)目

    這篇文章主要介紹了如何基于Jenkins構(gòu)建Jmeter項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 計(jì)算機(jī)編程語言發(fā)展史

    計(jì)算機(jī)編程語言發(fā)展史

    這篇文章主要介紹了Java計(jì)算機(jī)編程語言發(fā)展史,編程語言?可以簡單的理解為一種計(jì)算機(jī)和人都能識(shí)別的語言。一種計(jì)算機(jī)語言讓程序員能夠準(zhǔn)確地定義計(jì)算機(jī)所需要使用的數(shù)據(jù),并精確地定義在不同情況下所應(yīng)當(dāng)采取的行動(dòng),下面詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • Java并發(fā)編程之創(chuàng)建線程

    Java并發(fā)編程之創(chuàng)建線程

    這篇文章主要介紹了Java并發(fā)編程中創(chuàng)建線程的方法,Java中如何創(chuàng)建線程,讓線程去執(zhí)行一個(gè)子任務(wù),感興趣的小伙伴們可以參考一下
    2016-02-02
  • SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder問題

    SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder問

    這篇文章主要介紹了SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder?‘from‘?in?value?“${from}“問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2022-12-12
  • 詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù)

    詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù)

    這篇文章主要介紹了詳解SpringBoot開發(fā)案例之整合Dubbo分布式服務(wù),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • java查找圖中兩點(diǎn)之間所有路徑

    java查找圖中兩點(diǎn)之間所有路徑

    這篇文章主要為大家詳細(xì)介紹了java查找圖中兩點(diǎn)之間所有路徑,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論