`
prodream
  • 浏览: 102144 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

URLPath匹配原则

    博客分类:
  • J2EE
阅读更多

URLPath匹配原则

路 径匹配原则(Path Matching) 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. <beanname="/home"
  2. class="com.apress.expertspringmvc.flight.web.HomeController">
  3. <propertyname="flightService"ref="flightService"/>
  4. </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实例更多的信息请参照<<Pro Spring>>.


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接口.

Listing SimpleUrlHandlerMapping Example

分享到:
评论

相关推荐

    swift-Matcha是一个可以从URLPath获取参数的框架

    Matcha是一个可以从URL Path获取参数的框架

    android客户端从服务器端获取json数据并解析的实现代码

    代码如下:/** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exception */ public static String readParse(String urlPath) throws Exception { ByteArrayOutputStream outStream = new ...

    站长必须要知道的javascript广告代码 原创

    var urlpath; function testdate() { urlpath=’http://www.scripthome.net/bbs’;showit=true if(today.getHours()&gt;=’10’ && today.getHours()&lt;’12’) { urlpath=’//www.jb51.net’;showit=true } } ...

    Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用

    如下代码: ... var options = { host: '192.168.2.101', port: 8064, path: encodeURI(urlPath)} var req = http.request(options, function(r) { cb && cb(r.statusCode == 200); }) req.e

    支持断点续传的下载文件的php类.zip

     private $m_urlpath = "";  private $m_scheme = "http";  private $m_host = "";  private $m_port = "80";  private $m_user = "";  private $m_pass = "";  private $m_path =...

    Webview:网页视图使用

    var url = NSURL(string: urlPath) var request = NSURLRequest(URL: url!) myWebview.loadRequest(request) 直接从 HTML 加载 @IBOutlet weak var myWebview: UIWebView! ... // Directly load from html ...

    论坛管理系统

    1.建立WEB站点,站点根目录为...在使用VS 工具打开论坛项目时,如果WEB站点链接不上,请修改SampleForum.csproj.webinfo文件中的&lt;Web URLPath = "http://localhost/SampleForum/SampleForum.csproj" /&gt;为实际web路径。

    JHRW:所谓的“ AJAX”请求的包装

    Object JHRW ( String base , String urlPath [ , Boolean lazyExecution = false [ , Boolean bypassCache = false ] ] ) ; 参量 String base -请求的基本URL String urlPath请求的终结点 Boolean lazyExecution ...

    URLNet:论文URLNet的代码-使用深度学习学习URL表示以进行恶意URL检测

    网址网 介绍 ... +1 http://www.exampledomain.com/urlpath/... -1 http://www.exampledomain.com/urlpath/... URL标签为+1(恶意)或-1(良性)。 可以通过运行以下命令来训练模型: python train.

    彬月论坛 v1.0.0(Beta1)

    使用ASP.NET(C#)编写的,采用... 解压缩后,只要正确修改 WebForum 目录中 WebForum.csproj.webinfo 文件即可在 Visual Studio.NET 环境中打开 &lt;VisualStudioUNCWeb&gt;&lt;br&gt; &lt;Web URLPath = &quot;...

    ios 网络架构

    ios网络层架构 代码很简单, 接口根据参数调用urlStringWithPath:useHttps:通过BaseURL和URLPath拼装出完整的URL, 然后用这个URL和其他参数生成一个URLRequest, 然后调用setCommonRequestHeaderForRequest:设置公用...

    利用tushare的股票tick数据,合成1分钟K线,用1分钟K线合成N分钟K线.zip

    利用tushare的股票tick数据,合成1分钟K线,用1分钟K线合成N分钟K线, 涉及的pandas.DataFrame方法有:resample(针对时间序列)、merge, jupyter notebook binder ...urlpath=lab/tree/,推荐)

    stubr:Wiremock的Rust实现

    用法 Docker映像(传入) 舵图(传入)特征 请求匹配(json) 身体 equalToJson matchesJsonPath binaryEqualTo 方法(GET,POST等...) 网址 url urlPath urlPathPattern urlPattern 标头 equalTo contains matches...

    asp.net-MYBOLG-YOUKNOW.zip_False Security_myblog_sln系统

    一个基于asp.net开发的的个人网络日志及文章系统类型的web...Web URLPath = http://11.111.46.164:806/MyBlog.csproj /&gt;为实际web路径。 请修改MyBlog.sln文件中的 http://11.111.46.164:806/MyBlog.csproj 路径。

    asp.net版个人博客系统

    请修改MyBlog.csproj.webinfo文件中的&lt;Web URLPath = "http://11.111.46.164:806/MyBlog.csproj" /&gt;为实际web路径。 请修改MyBlog.sln文件中的"http://11.111.46.164:806/MyBlog.csproj"路径。

    PHP实现的下载远程文件类定义与用法示例

    分享给大家供大家参考,具体... private $m_urlpath = ""; private $m_scheme = "http"; private $m_host = ""; private $m_port = "80"; private $m_user = ""; private $m_pass = ""; private $m_path = "/";

    详解微信小程序网络请求接口封装实例

    网络请求封装实例 实现定制要求和方便调用,对微信小程序的网络请求接口进行了封装 ... * @param {Object} urlPath 访问路径 * @param {Object} params 访问参数(json格式) * @param {Object} requestCo

    php远程下载类分享

    private $m_urlpath = ""; private $m_scheme = "http"; private $m_host = ""; private $m_port = "80"; private $m_user = ""; private $m_pass = ""; private $m_path = "/"; private $m_query = ""; private $m_...

    eleventy-plugin-sharp:将 Sharp 的图像处理能力发挥到极致的 110 个插件

    urlPath : '/images' , outputDir : 'public/images' } ) ) ; } ; 过滤器 过滤器用于构建 Sharp 实例。 提供的几乎所有方法都可以被调用。 、 、 、 等。 简码 此外,短代码用于执行 Sharp 的异步功能,这是过滤...

    urlUtils:Javascript URL实用程序

    界面GETFiler(@urlPath, @{options}) import { GETFiler } from urlUtils ; const path = "https://example.com/api/" const opts = { listToken : "__in" , // default joinChar : "," , // default ...

Global site tag (gtag.js) - Google Analytics