Java EE中web.xml常见url pattern="/**",两个星号什么意思?

Java EE中web.xml常见url pattern="/**",两个星号什么意思?

Ant path 匹配原则

在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的。例如:

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

</mvc:interceptor>

根据以上配置,此拦截器会拦截所有的请求。

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 代码

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

    <property name="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实例.

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

简单来说就是:匹配0或者更多的目录

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-05-18
等同于/*
<url-pattern>/*</url-pattern>
则所有的url都可以被匹配上。其中/*是路径匹配,只是路径就是/。
第2个回答  2014-12-27
功能和/*一样,都匹配所有请求.
举个例子:
<url-pattern>/page </url-pattern>
<url-pattern>/page* </url-pattern>

当输入请求路径: http://lotus/page 会匹配第一种,而不会去匹配第四种.所以匹配完第一个 * 后,第二个 * 就不会再匹配了.
第3个回答  2015-09-25
两个星星的是与/**组合的意思,意思是解释说明。
URL是的意思,pattern是标记。
第4个回答  2018-05-30
/* 指文件夹下的所有文件(不包括子文件夹)
/** 指文件夹下的所有文件(包括子文件夹)

Java EE中web.xml常见url pattern="\/**",两个星号什么意思?
所以这个模式依然是映射URL到请求处理器的(request handler) ,你简单的在ApplicationContext中声明一下,就可以使用SimpleUrlHandlerMapping了. DispatcherServlet会根据类型找到的,并且不会创建默认的映射器了(BeanNameUrlHandlerMapping).意思就是, 如果你想两个都用,那么就要全部声明一下在ApplicationContext...

web.xml重复servlet-mapping的url-pattern会不会有问题?
不会有问题,两个URL都指向spring那个servlet了,我们经常有时这么用,对外一个url,对内一个url,都是调的同一个servlet

Javaweb题目,求大神解答指点
在你的 Web 应用的部署描述符 (web.xml) 中,使用 <filter> 和 <filter-mapping> 元素配置过滤器。这样,你就可以在所有请求到达指定的资源之前,先将其过滤一遍。下面是一个示例过滤器的完整代码,它实现了上述步骤:import java.io.IOException;import javax.servlet.Filter;import javax.servlet.Filt...

关于Struts2的web.xml问题!设置了三个 <url-pattern>\/*<\/url-pattern>...
不会,在检测<url-pattern>\/*<\/url-pattern>之前,会检测<filter-name>struts2<\/filter-name>,因为三个filter-name都不相同。<filter-name>和<url-pattern>是对应存在的

我用Myeclipse开发web项目,服务器用的是tomcat时,域名访问老是访问不...
<url-pattern>*.map<\/url-pattern> <\/servlet-mapping> <!--使用Spring MVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet,,所以可以配置多个DispatcherServlet--> <!--DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依...

dozer中的mapping注解两个list直接怎么转换
<url-pattern>*.do<\/url-pattern> <\/servlet-mapping> <\/web-app> web.xml 中定义了一个名为 annomvc 的 Spring MVC 模块,按照 Spring MVC 的契约,需要在 WEB-INF\/annomvc-servlet.xml 配置文件中定义 Spring MVC 模块的具体配置。annomvc-servlet.xml 的配置内容如下所示: 清单3. annomvc-servlet.xml...

怎么用eclipse修改web工程的访问路径
工具:eclipse 步骤1、启动eclipse,找到需要修改的项目,点击右键,在弹出的框中选择properties,如下图;步骤2、在如下的界面中,找到web project setting(红线标注的地方),并点击;步骤3、在content root 中填入需要修改成的路径,如下图;步骤4、最后就可以去浏览器访问新的路径。

有了filter,还需要在界面上设置编码吗
<url-pattern>\/*<\/url-pattern> <\/filter-mapping> filter标签部分定义使用的过滤器,filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的\/*表示所有请求,\/表示根路径,*(星号)代表所有请求,加在一起就变成了根路径下的所有请求。这样,所有的请求都会先被EncodingFilter拦截,并在请求里...

我想用java做一个web services.请问该怎么做
<url-pattern>\/services\/*<\/url-pattern> <\/servlet-mapping> <\/web-app> 把工程部署到中间件,如tomcat,就可以访问该webservice了。3.JDK开发webservice1)编写一个Java类,如下:Jdkwebservice.java代码 package demo; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.ws.Endpoint; ...

正则表达式“或“的使用
正则表达式,又称规则表达式。是计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则...

相似回答