javaee mapping request to servlets/servlet url-pattern 配置问题

来源:互联网 发布:赚佣金的软件 编辑:程序博客网 时间:2024/05/17 08:47

一:request url 映射到servlet的查找顺序:

1)获取匹配servelet的path,当一个请求(request)被服务器收到以后,匹配的path=request URL-context- parameters。

2)path按下面的规则顺序匹配一个servlet,匹配成功的会被用来处理对应request,不会继续后面的匹配。

1. 容器(container)会先去匹配一个精确的servlet path ,成功找到即匹配。

2.容器(container)去匹配最长的path-prefix,成功找到即匹配。

3.如果path 有拓展名(extendson(e.g. .jsp)),servlet容器 会去匹配一个servlet处理该request for the extendsion ,拓展名是path最后一个片段,在“.”符号之后。

4.上面三条没找到,container 会尝试把请求当做内容资源处理,此时如果container配置了默认的servlet,会用到它。大部分container 提供了默认的servlet serving content。


二:mappings 规范(servlet可以配置的url-pattern):

a. 一个字符串 以 ‘/’开始,以‘/*’结束

b.一个字符串 ,以'*.'开始,用来匹配有extendsion的request。

c.空字符串“”是一个特殊的url pattern ,映射到application's context root。如,"http://host:port/<context-root>/",这个例子中 path是‘/’,对应的servlet path 是“”,(这一点很特别)

d.servlet path为 ‘/’也是一个特别的url pattern ,表明该servlet是容器默认的servlet。

e.精确url,如/user/123 ,即不是表达式形式

注意:如果一个url-pattern 映射到多个servlet,容器启动会失败。


三:隐式的mappings

如果容器有一个internal jsp容器,那么*.jsp拓展映射到里面,该映射,在需要的时候会被优先处理。

下面是一些例子:


1 0