org.eclipse.jetty.http.PathMap
/** URI path map to Object.
* This mapping implements the path specification recommended
* in the 2.2 Servlet API.
*
* Path specifications can be of the following forms:<PRE>
* /foo/bar - an exact path specification.
* /foo/* - a prefix path specification (must end '/*').
* *.ext - a suffix path specification.
* / - the default path specification.
* </PRE>
* Matching is performed in the following order <NL>
* <LI>Exact match.
* <LI>Longest prefix match.
* <LI>Longest suffix match.
* <LI>default.
* </NL>
* Multiple path specifications can be mapped by providing a list of
* specifications. By default this class uses characters ":," as path
* separators, unless configured differently by calling the static
* method @see PathMap#setPathSpecSeparators(String)
* <P>
* Special characters within paths such as '?� and ';' are not treated specially
* as it is assumed they would have been either encoded in the original URL or
* stripped from the path.
* <P>
*/
must start with '/' or '*.'
分析发现 tomcat/jetty都存在default和jsp两个servlet
tomcat/conf/web.xml
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The mapping for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
jetty/etc/webdefault.xml
<servlet id="jsp">
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspf</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xsp</url-pattern>
<url-pattern>*.JSP</url-pattern>
<url-pattern>*.JSPF</url-pattern>
<url-pattern>*.JSPX</url-pattern>
<url-pattern>*.XSP</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
循环每个mapping
对于每一个mapping按照如下顺序进行
规则1:精确匹配,使用contextVersion的exactWrappers /app
规则2:前缀匹配,使用contextVersion的wildcardWrappers /*;/app/*
规则3:扩展名匹配,使用contextVersion的extensionWrappers *.do;*.action
规则4:使用资源文件来处理servlet,使用contextVersion的welcomeResources属性,这个属性是个字符串数组 welcome-file-list
规则7:使用默认的servlet,使用contextVersion的defaultWrapper default-->/
同等级之间按照mapping声明顺序
springmvc配置
web.xml
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<!--default配置-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--方式1-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
spring.xml中
<!--方式2-->
<!--访问不到的交给defaultservlet-->
<mvc:default-servlet-handler />
<!--或者
<mvc:default-servlet-handler default-servlet-name="所使用的Web服务器默认使用的Servlet名称" />
对应org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler将请求转交给容器的defaultservlet处理
-->
<!--方式3指定静态资源位置-->
<mvc:resources location="/,classpath:/META-INF/publicResources/" mapping="/resources/**"/>
<!-- 配置自动扫描的包 -->
<context:component-scan base-package="app"></context:component-scan>
<!-- 配置视图解析器 如何把handler 方法返回值解析为实际的物理视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value="/WEB-INF/views/"></property>
<property name = "suffix" value = ".jsp"></property>
</bean>