`
liyixing1
  • 浏览: 953150 次
  • 性别: Icon_minigender_1
  • 来自: 江西上饶
社区版块
存档分类
最新评论

ant path匹配

阅读更多
spring和ant path实现相关的主要类有两个
org.springframework.util.PathMatcher
org.springframework.util.AntPathMatcher.AntPatternComparator.AntPatternComparator

可以看下springmvc的通过url查找action的方法

Object org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.getHandlerInternal(HttpServletRequest request) throws Exception

,这个方法的前面两行代码:
String lookupPath = this.urlPathHelper.getLookupPathForRequest(request);
Object handler = lookupHandler(lookupPath, request);

再看lookupHandler
Object org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.lookupHandler(String urlPath, HttpServletRequest request) throws Exception



// 这里是绝对匹配,如我们的RequestMapping("/getView"),那么请求/test/getView,这种资源是可以绝对匹配上的,那么直接get就可以了。

Object handler = this.handlerMap.get(urlPath);
if (handler != null) {
// Bean name or resolved handler?
if (handler instanceof String) {
String handlerName = (String) handler;
handler = getApplicationContext().getBean(handlerName);
}
validateHandler(handler, request);
return buildPathExposingHandler(handler, urlPath, urlPath, null);
}

// 这里就是通过ant的方式,查找符合ant的匹配资源列表
List<String> matchingPatterns = new ArrayList<String>();
for (String registeredPattern : this.handlerMap.keySet()) {
if (getPathMatcher().match(registeredPattern, urlPath)) {
matchingPatterns.add(registeredPattern);
}
}

//当列表不为空,表示查找到符合的列表,然后按照ant规则,排序,越精确的越靠前
String bestPatternMatch = null;
Comparator<String> patternComparator = getPathMatcher().getPatternComparator(urlPath);
if (!matchingPatterns.isEmpty()) {
Collections.sort(matchingPatterns, patternComparator);
if (logger.isDebugEnabled()) {
logger.debug("Matching patterns for request [" + urlPath + "] are " + matchingPatterns);
}
bestPatternMatch = matchingPatterns.get(0);
}
if (bestPatternMatch != null) {
handler = this.handlerMap.get(bestPatternMatch);
// Bean name or resolved handler?
if (handler instanceof String) {
String handlerName = (String) handler;
handler = getApplicationContext().getBean(handlerName);
}
validateHandler(handler, request);
String pathWithinMapping = getPathMatcher().extractPathWithinPattern(bestPatternMatch, urlPath);

// There might be multiple 'best patterns', let's make sure we have the correct URI template variables
// for all of them
Map<String, String> uriTemplateVariables = new LinkedHashMap<String, String>();
for (String matchingPattern : matchingPatterns) {
if (patternComparator.compare(bestPatternMatch, matchingPattern) == 0) {
uriTemplateVariables
.putAll(getPathMatcher().extractUriTemplateVariables(matchingPattern, urlPath));
}
}
if (logger.isDebugEnabled()) {
logger.debug("URI Template variables for request [" + urlPath + "] are " + uriTemplateVariables);
}
return buildPathExposingHandler(handler, bestPatternMatch, pathWithinMapping, uriTemplateVariables);
}
// No handler found...
return null;
}

分享到:
评论

相关推荐

    详解Spring mvc ant path的使用方法

    总之,理解并熟练运用Spring MVC中的Ant Path匹配规则,可以帮助开发者构建高效且可扩展的MVC应用程序,提高URL路由的灵活性和可维护性。在开发过程中,可以根据业务需求,灵活设计URL模式,确保请求能够准确地被...

    AntPathMatcher路径匹配器,Ant风格的URL.md

    AntPathMatcher是Spring框架中用于路径匹配的一个工具类,其核心功能是提供了对Ant风格路径模式的匹配。所谓Ant风格的路径模式,是借鉴自Apache Ant构建工具的一种路径表达方式,它允许使用特定的通配符来进行模式...

    ant 构建AXIS2

    你需要将它们的路径添加到系统的PATH环境变量中,以便在命令行中可以直接调用。 2. **获取AXIS2源码**:你可以从Apache官方网站下载AXIS2的源码,或者通过Git克隆其仓库。这通常包括了AXIS2的核心模块和可选模块。 ...

    ant ftp需要的jar

    &lt;taskdef resource="net/sf/antcontrib/antlib.xml" classpath="path/to/ant-contrib.jar"/&gt; &lt;!-- 如果使用了ant-contrib库 --&gt; &lt;path id="ant.classpath"&gt; &lt;pathelement location="path/to/commons-...

    Apache Ant Tutorial.pdf

    文件集是 Ant 中用于匹配文件模式并指定要处理的文件集合的一种机制。通过使用 `&lt;fileset&gt;` 元素,可以方便地指定哪些文件应该被包含或排除在构建过程中。这为处理大量文件提供了极大的灵活性。 #### 六、高级主题 ...

    myeclipse中的ant部署

    - 将`%ANT_HOME%\bin`添加到系统PATH中。 3. **统一MyEclipse使用的JDK**: - 打开MyEclipse,依次点击“Window” &gt; “Preferences” &gt; “Java” &gt; “Compiler” &gt; “Installed JREs”。 - 点击“Add”,然后...

    Ant与Junit结合

    标题“Ant与JUnit结合”指的是在Java开发中如何利用Apache Ant构建工具与JUnit测试框架进行集成,以便自动化地运行单元测试。Apache Ant是一种基于XML的构建工具,它替代了传统的Makefile,为Java项目提供了构建、...

    如何在Ant中引入第三方Jar包

    总结,引入第三方Jar包到Ant项目中主要涉及`&lt;classpath&gt;`、`&lt;pathelement&gt;`、`&lt;fileset&gt;`、`&lt;path&gt;`以及可能的远程仓库管理。正确配置这些元素,确保JVM在编译和运行时能找到所需的所有依赖,从而保证项目的顺利执行...

    ant design pro动态菜单

    Ant Design Pro通常配合`@umijs/router`等路由库使用,通过设置菜单项的`path`属性与路由匹配,实现点击菜单项时页面的跳转。 6. **菜单的懒加载**:对于大型应用,为了提高首屏加载速度,可以采用菜单懒加载策略,...

    Ant培训全套学习教程

    设置ANT_HOME环境变量,将其指向Ant的安装路径,并将%ANT_HOME%\bin添加到系统的PATH环境变量中。完成这些步骤后,可以通过在命令行输入`ant -version`来验证Ant是否成功安装。 二、Ant文件编写 Ant的核心在于其...

    ant 中文教程 1.1版本

    Ant提供了`pathelement`来创建路径元素。 7. **宏定义(MacroDef)**:宏定义允许创建自定义的任务,可以封装常用的任务组合,提高代码复用性。 8. **依赖性管理**:Ant可以检测文件的修改时间,只重新构建已更改...

    9_ant_通过ftp发布文件

    &lt;pathelement location="path/to/ant-contrib.jar"/&gt; ``` 请注意,这里需要确保`ant-contrib.jar`库在你的类路径中,因为`ftp`任务是作为Ant Contrib库的一部分提供的。 接下来,定义`ftp`任务。在`target`...

    ant打包时编码 GBK 的不可映射字符.txt

    1. **编码不一致**:项目中的源代码文件与构建过程所使用的编码不匹配。即源代码文件可能使用了其他编码(如UTF-8),而在Ant的构建配置文件`build.xml`中却设置了GBK作为编译时的字符集。 2. **特殊字符**:某些...

    apache-ant-1.9.4的源码

    6. **路径(Paths)**:在Ant中,`Path`类用于表示类路径或者文件路径,这对于运行Java应用和编译时很重要。 7. **条件(Conditions)**:Ant提供了多种条件,如文件是否存在、属性是否为空等,这些条件可以在任务...

    spring中用到的ant包

    - **依赖管理**:尽管不如Maven或Gradle强大,Ant也可以通过`path`元素来管理依赖项。 - **构建部署**:使用`ftp`或`sftp`任务将构建结果发布到远程服务器。 在实际应用中,Spring项目可能会结合Ant与Ivy或Gradle等...

    ant使用手册ANT使用指南

    - `PATH`:添加`%ANT_HOME%\bin`到系统路径中。 ##### 3.2 配置Eclipse 如果你选择在Eclipse IDE中使用Ant,你不需要单独安装Ant,因为Eclipse已经包含了Ant。如果你还没有安装Eclipse,可以从Eclipse官网下载并...

    Ant使用指南

    - **环境变量**: 设置`ANT_HOME`环境变量指向Ant的安装目录,并将`bin`目录添加到`PATH`环境变量中。 ##### **4.2 配置Ant** - **配置文件**: Ant读取`build.xml`文件作为构建脚本。 - **自定义任务**: 可以通过...

Global site tag (gtag.js) - Google Analytics