- 浏览: 957095 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
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;
}
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 定时任务,cron表达式,@Scheduled cron表达式
2016-04-25 15:48 5296一个cron表达式有至少6 ... -
spring mvc list
2015-12-14 10:28 1284我使用这样无法传入 @requestMapping(" ... -
Unable to locate Spring NamespaceHandler for XML schema namespace
2015-09-23 14:00 2322org.springframework.beans.facto ... -
关于使用s.url jstl的上下文
2015-08-16 13:28 914比如 [@s.url '/'/]index.html?cote ... -
Spring 属性占位符配置器 PropertyPlaceholderConfigurer
2015-08-02 12:43 2079<!-- 属性配置文件读 ... -
FactoryBean接口
2014-09-30 14:05 905实现了FactoryBean接口的bean不是简单的一个bea ... -
运行swing等可视化程序
2014-03-26 14:55 870Ant中调用的时候,总是一闪而过。 需要添加 <java ... -
国际化之MessageSourceAware和MessageSourceAccessor
2014-01-06 23:13 2850先看接口MessageSourceAware 该接口的注释中 ... -
spring 惯例优先原则
2013-07-22 09:46 1208惯例优先原则(convention over configur ... -
springmvc action方法中参数具有@ModelAttribute与不具有的区别
2012-12-14 09:36 4113在springmvc的参数解析中,发现具有@ModelAttr ... -
util包
2012-12-05 13:50 1106spring的util基本上都在springframework ... -
url,请求相关帮助类UrlPathHelper
2012-11-29 11:18 2518org.springframework.web.util.Ur ... -
整站国际化方案
2012-11-28 17:46 1106当前常见的实现方式,主要由两种方案实现 1.通过locale ... -
自定义任务
2012-11-21 22:33 1160<!-- 代码覆盖率任务定义,classpathref直 ... -
copy的时候,保持原有的目录结构
2012-11-21 17:31 1816flatten:用于指定是否需要复制目录,如果为true代表把 ... -
spring的三种注入方式
2012-11-20 17:30 18631.通过bean的property子元 ... -
给ant指定内存
2012-02-14 12:40 1224Windows操作系统,在运行ant的bat脚本文件: set ... -
spring AnnotationUtils 注解工具
2011-12-08 11:27 1301spring AnnotationUtils 注解工具 -
GenericCollectionTypeResolver,用于获取list或者map等元素的类型
2011-12-07 16:17 1311GenericCollectionTypeResolver,用 ... -
属性编辑器
2011-12-05 18:19 1076我自定义了一个类型,然后设置了一个属性编辑器,注册的class ...
相关推荐
总之,理解并熟练运用Spring MVC中的Ant Path匹配规则,可以帮助开发者构建高效且可扩展的MVC应用程序,提高URL路由的灵活性和可维护性。在开发过程中,可以根据业务需求,灵活设计URL模式,确保请求能够准确地被...
AntPathMatcher是Spring框架中用于路径匹配的一个工具类,其核心功能是提供了对Ant风格路径模式的匹配。所谓Ant风格的路径模式,是借鉴自Apache Ant构建工具的一种路径表达方式,它允许使用特定的通配符来进行模式...
你需要将它们的路径添加到系统的PATH环境变量中,以便在命令行中可以直接调用。 2. **获取AXIS2源码**:你可以从Apache官方网站下载AXIS2的源码,或者通过Git克隆其仓库。这通常包括了AXIS2的核心模块和可选模块。 ...
<taskdef resource="net/sf/antcontrib/antlib.xml" classpath="path/to/ant-contrib.jar"/> <!-- 如果使用了ant-contrib库 --> <path id="ant.classpath"> <pathelement location="path/to/commons-...
文件集是 Ant 中用于匹配文件模式并指定要处理的文件集合的一种机制。通过使用 `<fileset>` 元素,可以方便地指定哪些文件应该被包含或排除在构建过程中。这为处理大量文件提供了极大的灵活性。 #### 六、高级主题 ...
- 将`%ANT_HOME%\bin`添加到系统PATH中。 3. **统一MyEclipse使用的JDK**: - 打开MyEclipse,依次点击“Window” > “Preferences” > “Java” > “Compiler” > “Installed JREs”。 - 点击“Add”,然后...
标题“Ant与JUnit结合”指的是在Java开发中如何利用Apache Ant构建工具与JUnit测试框架进行集成,以便自动化地运行单元测试。Apache Ant是一种基于XML的构建工具,它替代了传统的Makefile,为Java项目提供了构建、...
总结,引入第三方Jar包到Ant项目中主要涉及`<classpath>`、`<pathelement>`、`<fileset>`、`<path>`以及可能的远程仓库管理。正确配置这些元素,确保JVM在编译和运行时能找到所需的所有依赖,从而保证项目的顺利执行...
Ant Design Pro通常配合`@umijs/router`等路由库使用,通过设置菜单项的`path`属性与路由匹配,实现点击菜单项时页面的跳转。 6. **菜单的懒加载**:对于大型应用,为了提高首屏加载速度,可以采用菜单懒加载策略,...
设置ANT_HOME环境变量,将其指向Ant的安装路径,并将%ANT_HOME%\bin添加到系统的PATH环境变量中。完成这些步骤后,可以通过在命令行输入`ant -version`来验证Ant是否成功安装。 二、Ant文件编写 Ant的核心在于其...
Ant提供了`pathelement`来创建路径元素。 7. **宏定义(MacroDef)**:宏定义允许创建自定义的任务,可以封装常用的任务组合,提高代码复用性。 8. **依赖性管理**:Ant可以检测文件的修改时间,只重新构建已更改...
<pathelement location="path/to/ant-contrib.jar"/> ``` 请注意,这里需要确保`ant-contrib.jar`库在你的类路径中,因为`ftp`任务是作为Ant Contrib库的一部分提供的。 接下来,定义`ftp`任务。在`target`...
1. **编码不一致**:项目中的源代码文件与构建过程所使用的编码不匹配。即源代码文件可能使用了其他编码(如UTF-8),而在Ant的构建配置文件`build.xml`中却设置了GBK作为编译时的字符集。 2. **特殊字符**:某些...
6. **路径(Paths)**:在Ant中,`Path`类用于表示类路径或者文件路径,这对于运行Java应用和编译时很重要。 7. **条件(Conditions)**:Ant提供了多种条件,如文件是否存在、属性是否为空等,这些条件可以在任务...
- **依赖管理**:尽管不如Maven或Gradle强大,Ant也可以通过`path`元素来管理依赖项。 - **构建部署**:使用`ftp`或`sftp`任务将构建结果发布到远程服务器。 在实际应用中,Spring项目可能会结合Ant与Ivy或Gradle等...
- `PATH`:添加`%ANT_HOME%\bin`到系统路径中。 ##### 3.2 配置Eclipse 如果你选择在Eclipse IDE中使用Ant,你不需要单独安装Ant,因为Eclipse已经包含了Ant。如果你还没有安装Eclipse,可以从Eclipse官网下载并...
- **环境变量**: 设置`ANT_HOME`环境变量指向Ant的安装目录,并将`bin`目录添加到`PATH`环境变量中。 ##### **4.2 配置Ant** - **配置文件**: Ant读取`build.xml`文件作为构建脚本。 - **自定义任务**: 可以通过...