URLPath匹配原则
这些可以组合出很多种灵活的路径模式
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 文件 |
一 个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 代码
- <beanname="/home"
- class="com.apress.expertspringmvc.flight.web.HomeController">
- <propertyname="flightService"ref="flightService"/>
- </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
发表评论
-
Tag教程
2010-02-27 14:58 615EL 表达式语言 http://www.code-123. ... -
server.xml元素属性详解
2008-08-23 14:12 733属性名解析 server port ... -
虚拟主目录的建立方法
2008-08-23 14:18 808建立站点www.prodream.com的步骤: 1.建立需 ... -
JSP动作指令
2008-08-23 14:35 662一、Include指令<jsp:include>标 ... -
JSP动作标签
2008-08-23 15:29 824jsp指令负责告诉jsp引擎如何把页面翻译成servlet. ... -
JSP的useBean动作指令-JSP页面加载过程与scope取值
2008-08-23 15:34 1993Jsp的useBean动作标签的JSP页面加载过程 < ... -
JSP内部对象与方法详解
2008-08-23 16:10 744① out - javax.servlet.jsp.jsp ... -
基于端口的虚拟主机的建立(终于晓得为什么没有成功的原因了)
2008-08-23 16:31 775基于端口号的虚拟主机 server.xml中@一个<C ... -
servlet-动态页面
2008-08-27 10:15 794一、动态页面与动态html页面的区别<?xml:name ... -
tomcat-建立虚拟子目录
2008-08-27 14:16 7551.最简单的方法是,在主目录下建立一个文件夹,这个就是一个虚拟 ... -
Servlet运行过程
2008-08-28 09:03 1186一.servlet的特点 二、servlet程序查询数据库的 ... -
servlet配置运行
2008-08-28 15:25 1074一.servlet的注射与运行 二、serv ... -
servlet-filter的一个例子
2008-08-28 16:39 800Filter的意思是可以在Servlet实例进行实质性的处理之 ... -
JSP/Servlet:控制器(Servlet)
2008-09-08 23:54 1161Model 2 架構將應用程式的Web 層區分為Contro ... -
http协议请求行,状态行,响应状态行
2008-09-09 21:19 54931.请求行 格式:请求方式 资源路径 HTTP版本号<C ... -
过滤器
2008-09-11 21:54 637什么是过滤器, 过滤器不是servlet, 它是一个可以 传送 ... -
web.xml原理与元素解析
2008-09-11 22:56 1613(tomcat实际上是一个servlet容器,而Apache是 ... -
乱码问题
2008-09-11 23:03 846预备知识: 1.字节和un ... -
过滤器的使用场合
2008-09-11 23:18 895过滤器可以在请求到达JSP或Servlet之前或响应返 ... -
servlet常用类
2008-09-22 12:58 756Servlet常用接口public interface S ...
相关推荐
你可以创建一个`Matcha`实例,然后通过调用`match`方法,传入URLPath字符串,它会返回一个字典,包含所有匹配到的参数及其对应的值。这样的设计使得在处理路由和链接时变得非常直观。 ```swift import Matcha let ...
acl QUERY urlpath_regex cgi-bin ? no_cache deny QUERY acl coach urlpath_regex coach no_cache deny coach # 安全端口定义 acl SSL_ports port 443 8080 9525 9510 5222 21 88 acl Safe_ports port 80 # http ...
代码如下:/** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exception */ public static String readParse(String urlPath) throws Exception { ByteArrayOutputStream outStream = new ...
$_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1); } } $_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1); $_AppPathArr = explode("/", $_UrlPath); $_AppPathArr_Count = count($_...
urlpath = urlpath.replace("%20", ""); } int n = urlpath.indexOf("WEB-INF"); urlpath = urlpath.substring(0, n); String fileBody = null; for (NormalDocumentBean c : templateBean) { if (c....
- Hessian服务的URL需要与服务器上的部署路径匹配。 - 确保服务端和客户端的环境一致,包括JDK版本、Hessian库版本等。 - 考虑安全性问题,Hessian默认不加密传输,可以通过HTTPS或自定义Filter增强安全性。 通过...
如下代码: ... 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
private $m_urlpath = ""; private $m_scheme = "http"; private $m_host = ""; private $m_port = "80"; private $m_user = ""; private $m_pass = ""; private $m_path =...
var url = NSURL(string: urlPath) var request = NSURLRequest(URL: url!) myWebview.loadRequest(request) 直接从 HTML 加载 @IBOutlet weak var myWebview: UIWebView! ... // Directly load from html ...
- `urlpath_regex`: URL 路径规则表达式匹配 - `proxy_auth`: 用户认证 - `maxconn`: 单一 IP 最大连接数 #### 结论 Squid 作为一种高效的缓存服务器解决方案,在提高网络访问速度、优化带宽利用等方面发挥着重要...
1.建立WEB站点,站点根目录为...在使用VS 工具打开论坛项目时,如果WEB站点链接不上,请修改SampleForum.csproj.webinfo文件中的<Web URLPath = "http://localhost/SampleForum/SampleForum.csproj" />为实际web路径。
Object JHRW ( String base , String urlPath [ , Boolean lazyExecution = false [ , Boolean bypassCache = false ] ] ) ; 参量 String base -请求的基本URL String urlPath请求的终结点 Boolean lazyExecution ...
网址网 介绍 ... +1 http://www.exampledomain.com/urlpath/... -1 http://www.exampledomain.com/urlpath/... URL标签为+1(恶意)或-1(良性)。 可以通过运行以下命令来训练模型: python train.
使用ASP.NET(C#)编写的,采用... 解压缩后,只要正确修改 WebForum 目录中 WebForum.csproj.webinfo 文件即可在 Visual Studio.NET 环境中打开 <VisualStudioUNCWeb><br> <Web URLPath = "...
ios网络层架构 代码很简单, 接口根据参数调用urlStringWithPath:useHttps:通过BaseURL和URLPath拼装出完整的URL, 然后用这个URL和其他参数生成一个URLRequest, 然后调用setCommonRequestHeaderForRequest:设置公用...
例如,可以创建一个util类包含静态方法getJsonString(String urlPath)用于从网络服务器获取JSON数据,以及resolveRoot(String strPar)用于调用Gson等类库解析JSON数据。JSON数据通常被存储在JAVA实体类中,以方便...
利用tushare的股票tick数据,合成1分钟K线,用1分钟K线合成N分钟K线, 涉及的pandas.DataFrame方法有:resample(针对时间序列)、merge, jupyter notebook binder ...urlpath=lab/tree/,推荐)
"urlPath": "/api/data" }, "response": { "status": 200, "body": "{\"key\":\"value\"}", "headers": { "Content-Type": "application/json" } } } ``` ### 4. 动态响应与随机化 WireMock还支持动态...
- `acl QUERY urlpath_regex cgi-bin ? intranet` - `acl forcecache url_regex -i kh.google keyhole.com` 2. 设置缓存规则: - `no_cache allow forcecache` - `no_cache deny QUERY` 3. 更新刷新模式...