Welcome 微信登录

首页 / 软件开发 / JAVA / Servlet容器Tomcat中web.xml中url-pattern配置详解

Servlet容器Tomcat中web.xml中url-pattern配置详解2014-11-22前言

今天研究了一下tomcat上web.xml配置文件中url-pattern的问题。

这个问题其实毕业前就困扰着我,当时忙于找工作。 找到工作之后一直忙,也就没时间顾虑这个问题了。 说到底还是自己懒了,没花时间来研究。

今天看了tomcat的部分源码 了解了这个url-pattern的机制。  下面让我一一道来。

tomcat的大致结构就不说了, 毕竟自己也不是特别熟悉。 有兴趣的同学请自行查看相关资料。 等有时间了我会来补充这部分的知识的。

想要了解url-pattern的大致配置必须了解org.apache.tomcat.util.http.mapper.Mapper这个类

这个类的源码注释:Mapper, which implements the servlet API mapping rules (which are derived from the HTTP rules).  意思也就是说  “Mapper是一个衍生自HTTP规则并实现了servlet API映射规则的类”。

现象

首先先看我们定义的几个Servlet:

<servlet><servlet-name>ExactServlet</servlet-name><servlet-class>org.format.urlpattern.ExactServlet</servlet-class></servlet><servlet-mapping><servlet-name>ExactServlet</servlet-name><url-pattern>/exact.do</url-pattern></servlet-mapping><servlet><servlet-name>ExactServlet2</servlet-name><servlet-class>org.format.urlpattern.ExactServlet2</servlet-class></servlet><servlet-mapping><servlet-name>ExactServlet2</servlet-name><url-pattern>/exact2.do</url-pattern></servlet-mapping><servlet><servlet-name>TestAllServlet</servlet-name><servlet-class>org.format.urlpattern.TestAllServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestAllServlet</servlet-name><url-pattern>/*</url-pattern></servlet-mapping><servlet><servlet-name>TestServlet</servlet-name><servlet-class>org.format.urlpattern.TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
有4个Servlet。 分别是2个精确地址的Servlet:ExactServlet和ExactServlet2。 1个urlPattern为 “/*” 的TestAllServlet,1个urlPattern为 "/" 的TestServlet。

我们先来看现象:

两个精确地址的Servlet都没问题。 找到并匹配了。