Tomcat # Tomcat基础知识

Posted LRcoding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat # Tomcat基础知识相关的知识,希望对你有一定的参考价值。

1. Tomcat

⼀个运⾏JAVA的⽹络服务器,底层是Socket的⼀个程序,它也是JSP和Serlvet的⼀个容器。

TIM截图20200430131308

2. URL和URI

TIM截图20200430131446

3. Tomcat目录结构

TIM截图20200430131507

进入conf 文件夹,查看具体的配置文件:

  • server.xml:Tomcat 的主配置文件,包含 Service, Connector, Engine, Realm, Valve, Hosts 主组件的相关配置信息;
  • web.xml:遵循 Servlet 规范标准的配置文件,用于配置 servlet,并为所有的 Web 应用程序提供包括MIME 映射等默认配置信息;
  • context.xml:所有 host 的默认配置信息;
  • logging.properties:日志相关配置;
  • tomcat-users.xml:Realm 认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
  • catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力,以安全模式启动Tomcat会使用这个配置
  • catalina.properties:Tomcat 内部 package 的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制,Tomcat 在启动时会事先读取此文件的相关设置;
  • jaspic-providers.xml:用户认证配置文件

4. server.xml 配置

Tomcat 的主配置文件,包含 Service, Connector, Engine, Realm, Valve, Hosts 主组件的相关配置信息;

<!-- port:      接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
     shutdown: 发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
     使用方式:  telnet localhost 8005, 输入SHUTDOWN即可关闭tomcat   
  
     如果你不配置这两个属性,Tomcat的这种关闭机制还是会运行的。你不想暴露这种关闭机制的
     话,可以将端口设置成poer=-1,shutdown设置成一个复杂的字符串,比如shutdown="xscdeww#12"
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <!-- 默认配置的Listener -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- 应用于整个服务器的JNDI映射,此可以避免每个Web应用程序都需要在各自的web.xml创建,这在web应用程序以WAR的形式存在时尤为有用。-->
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- Service是多个Connector和单个Container的组合。Container是一个抽象的概念,由Engine, Realm,Valve和Hosts主组组成。
       在server.xml配置文件中可以同时配置【【多个Service标签】】
   -->
  <Service name="Catalina">
    <!-- 默认情况下,每个连接器connector会使用自己创建的线程池,我们也可以配置多个线程池让连接器共享-->
    <!-- 如果想让连接器connector组件使用这个线程池,需要在连接器组件中配置executor属性.
         另外,Executor元素的配置应该放在Connector配置的前面,这样才会先加载Executor的配置。
        
         Executor的主要属性包括:
          - name:该线程池的名称id
          - maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)
          - minSpareThreads:线程池中保持的最小线程数,最小值是25
          - maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于
                         minSpareThreads),单位是ms,默认值60000(1分钟)
          - daemon:是否后台线程,默认值true
          - threadPriority:线程优先级,默认值5
          - namePrefix:线程名字的前缀,线程池中线程名字为:namePrefix+线程编号
     -->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
              maxThreads="150" minSpareThreads="4"/>
    
    <!-- Connector是Tomcat中请求接收和响应返回的端点,Tomcat中支持HTTP、AJP和APR等协议。
         下面的配置定义了一个支持Http协议的连接器,监听8080端口

         Connector组件支持以下组件的配置:
          - address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;
          - port:监听的端口,默认为0;
          - protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
          - connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
          - maxThreads:支持的最大并发连接数,默认为200;
          - redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,
                          则转发至此属性定义的端口;
          - enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;
                           默认为true;
          - acceptCount:设置等待队列的最大长度;
          - executor:指定共享的线程池组件;
     -->
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443"
               executor="tomcatThreadPool" />
    
    <!-- 下面是进行支持Https的配置 -->
    <!--
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
			maxThreads="150" SSLEnabled="true">
            <SSLHostConfig>
                <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" 
					type="RSA" />
            </SSLHostConfig>
        </Connector>

        <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
                   maxThreads="150" SSLEnabled="true" >
            <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
            <SSLHostConfig>
                <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                             certificateFile="conf/localhost-rsa-cert.pem"
                             certificateChainFile="conf/localhost-rsa-chain.pem"
                             type="RSA" />
            </SSLHostConfig>
        </Connector>
    -->
      
    <!-- AJP 1.3 的配置 -->
    <!--
        <Connector protocol="AJP/1.3"
                   address="::1"
                   port="8009"
                   redirectPort="8443" />
    -->
      
      
    <!-- Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper。
		Engine代表全局Servlet引擎,每个Service组件只能包含一个Engine容器组件,
		但Engine组件可以包含若干Host容器组件 
     -->
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!-- 配置虚拟主机,可以配置多个-->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

          <!-- 一个Host下面可以有多个Context,也就是可以部署多个Webapp应用,
               一个webapp对应一个Context,用不同的ContextPath区分 
          -->
        <Context path="/web1" docBase="E:\\blog"/>
          
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

5. 虚拟目录

  1. 在其他盘符下创建⼀个web站点⽬录,并创建WEB-INF⽬录和⼀个html⽂件。

  2. 找到Tomcat⽬录下/conf/server.xml⽂件

  3. 在server.xml中的 <Host> 节点下添加如下代码。

    path表示的是访问时输⼊的web项⽬名docBase表示的是站点⽬录的绝对路径

    <Context path="/web1" docBase="D:\\web1"/>
    

    在浏览器输入 localhost:8080/web1/a.txt 就可以直接 查看 D:\\web1 下的 a.txt 文件的内容

6. 虚拟主机

  1. 在tomcat的server.xml⽂件中添加主机名

    • name:访问的主机名
    • appBase:本地的映射地址
    • unpackWARs:是否解压 war 文件
    • autoDeploy:是否自动部署
    <Host name="lwclick" appBase="D:\\web1" unpackWARs="true" autoDeploy="true">
    	
    </Host>
    
  2. 访问:lwclick:8080/web1/test.html

7. 浏览器访问WEB资源的流程图

TIM截图20200430175929

以上是关于Tomcat # Tomcat基础知识的主要内容,如果未能解决你的问题,请参考以下文章

jsp页面被tomcat引擎运行的时候组装成java片段,但是这些java片段怎么没有main方法作为程序的入口啊?

Tomcat根据JSP生成Servlet机制解析

tomcat相关知识点

Tomcat部署文档

tomcat的session会话保持方案

Tomcat基础详解