• tomcat对请求路径的匹配过程(原创)


    1.匹配服务

    如果有两个应用,一个应用只能通过80端口访问,另一个应用只能通过8080端口访问,这种情况下,可以分开两个服务,然后分别创建80端口和8080端口的连接器。

    2.匹配主机

    一个服务下配置一个引擎,一个引擎下可以配置多个主机,通过请求路径的域名匹配主机名称,如果未匹到,则使用默认的主机,默认主机由引擎的属性defaultHost配置。

    3.匹配上下文(应用)

    一个主机下可以配置多个上下文,通过URI匹配上下文的路径,如果未匹配到,则匹配失败。

    4.选用版本

    其实一个主机下可以配置相同路径的上下文,但需要版本不同。匹配到上下文后,会优先选用最新版本的,版本是按字典排序后,以最后一个为最新版。

    所以旧版一般是不会被用到的,当需要在不停止运行tomcat的情况下,进行新版替换旧版。 这时候,新版通过自动部署方式,加入tomcat,旧版仍然处理请求,不影响客户端继续操作。

    如果请求所保持的Session仍存活于旧版本,则继续使用旧版。如果请求未在旧版注册过Session,则使用新版处理。

    5.匹配Servlet

    一个Servlet可以配置多个映射模式,通过上下文URI匹配映射模式,映射模式有四类,分别是完全路径匹配,路径匹配,扩展名匹配和默认模式。如果前三类未匹配到,则直接使用默认模式的Servlet。

    在全局web配置中,就可以发现有默认配置的Servlet:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    另外,配置里面还有JSP servlet:

        <servlet>
            <servlet-name>jsp</servlet-name>
            <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
            <init-param>
                <param-name>fork</param-name>
                <param-value>false</param-value>
            </init-param>
            <init-param>
                <param-name>xpoweredBy</param-name>
                <param-value>false</param-value>
            </init-param>
            <load-on-startup>3</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>jsp</servlet-name>
            <url-pattern>*.jsp</url-pattern>
            <url-pattern>*.jspx</url-pattern>
        </servlet-mapping>

    6.匹配资源

    所以,不管需要获取什么资源,必须先匹配到Servlet,然后再由Servlet返回资源。

    tomcat是采用虚拟资源映射,可以由多个物理资源映射到同一个虚拟资源,由多个虚拟资源映射到同一个物理资源。

  • 相关阅读:
    CSS3实战手册(第3版)(影印版)
    21世纪C语言(影印版)
    Spring Data:企业级Java的现代数据访问技术(影印版)
    Hive编程(影印版)
    iOS 6编程Cookbook(影印版)
    做自己——鬼脚七自媒体第一季
    放飞App:移动产品经理实战指南
    《推荐系统》+《推荐系统实践》
    步步惊“芯”——软核处理器内部设计分析
    ip的划分,超详细
  • 原文地址:https://www.cnblogs.com/hvicen/p/5998943.html
Copyright © 2020-2023  润新知