• tomcat服务的原理和使用


    一、tomcat与服务器的关系

      服务器是指安装了服务器软件的计算机,而服务器软件是指接收用户请求,处理请求,返回请求结果的程序,常见的服务器软件有tomcat、iis等,也称为web容器。在服务器软件中可以部署web项目,用户可以通过浏览器来访问这些项目。

      tomcat具有跨平台功能,支持windows、linux系统,它是基于Java中提供的NIO技术开发出来的,具有很高的运行效率,目前由apche公司维护。toomcat主要作用是接收http请求,将其转发到具体的servlet处理程序,再将其处理结果返回给客户端,以下是tomcat的架构图:

       客户端向服务器请求的资源分为两类,一类是静态资源,比如img、mp3、css、html、js等,这类资源在服务器中时直接返回的,它可以被浏览器直接解析;一类是动态资源 ,比如jsp、php文件,这类资源需要被一个叫做servlet的程序处理为静态资源类型后再返回给浏览器。

    二、tomcat的安装目录说明

      运行tomcat:进入官网www.apache.org选择合适自己系统的版本,下载解压到安装目录(不同的操作系统与很多不同的安装方式)。打开安装目录会发现如下几个文件夹:

        ◉bin目录:包含所有可执行的二进制程序,其中就包含tomcat的启动文件startup和停止文件shutdown。

        ◉conf目录:保存核心配置文件。

        ◉lib目录:是类加载路径,保存了与tomcat运行相关的jar文件。

        ◉log目录:保存tomcat的日子信息。

        ◉webapps目录:是tomcat的热部署目录,可以直接实现项目的发布。初始的tomcat内部包含了五个默认文件夹docs、examples、host-manager、manager、ROOT,提供了tomcat本身的一些管理页面和示例web,当通过localhost:8080访问默认显示的就是这些目录下的内容。

        ◉work目录:是tomcat生成的临时文件目录。

    三、tomcat的运行和注意事项

        ◉首先需要在宿主机上安装jdk并配置JAVA_HOME环境变量。打开tomcat安装目录/bin,运行startup文件(windows系统为start.bat,linux为start.sh)即可启动运行窗口,访问localhost:8080即可访问tomcat管理界面。

        ◉如果运行一闪而过可能是没有正确的配置JAVA_HOME或者端口被占用或者,具体需要查看运行日志来解决问题。

        ◉如果运行窗口中出现中文乱码,请修改配置文件conf/logging.properties中java.util.logging.ConsoleHandler.encoding = GBK,重启即可。

        ◉部署vue项目时,如果刷新页面出现404,则需要在项目目录下新增WEB-INF/web.xml文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1" metadata-complete="true">
      <description>系统描述</description>
      <display-name>WEB端</display-name>
      <error-page>
          <error-code>404</error-code>
          <location>/index.html</location>
      </error-page>
    </web-app>

        ◉tomcat服务器的默认端口为8080,可在conf/server.xml文件中修改如下节点的port属性,改为自己想要的端口:

        <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" />

        ◉绑定域名:默认我们输入localhost来访问,localhost代表本机地址127.0.0.1,如果我们想要使用域名来访问,可以修改本机hosts文件来模拟,设置域名映射  127.0.0.1  www.tomcatserver.com ,即可在本机通过www.tomcatserver.com访问。也可向域名服务商申请真实域名来绑定IP访问。

        ◉Tomcat安全配置建议:正式部署应用关闭角色登录管理功能,同时移除自带的web程序;修改默认的关机命令端口8005以及命令名称;关闭资源文件的列表功能。

        ◉启用https传输协议:https的全称是超文本传输安全协议(Hypertext Transfer Protocol Secure ),是一种网络安全传输协议。在HTTP的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。tomcat支持https协议,使用该协议需要证书,证书一般需要向证书管理机构申请,然后与域名绑定,这种证书是受浏览器信任的证书,还有一种是自签证书,这种证书是免费的本地签发的。可以使用Keytool工具生成证书,配置过程如下:

          1、cmd运行命令" keytool -genkey -alias tomcat -keyalg RSA -keystore tomcatkey.keystore ",根据提示输入密钥库口令、姓氏、组织名称、城市区域、国家地区代码、Y等完成一系列步骤后就会产生一个名为tomcatkeystore.keystore的证书文件。

          2、将生成的.keystore证书文件移动到tomcat的conf文件夹下。

          3、修改配置文件conf/server.xml,增加一个连接器Connector,内容如下:

    <Connector port="8443" 
    protocol
    ="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150"
    SSLEnabled
    ="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/tomcatkeay.keystore" certificateKeystorePassword="123456" type="RSA" /> </SSLHostConfig> </Connector>

          4、访问https://localhost:8443即可通过https协议访问。

        ◉默认tomcat为了项目的部署安全,将列表显示功能直接关闭了,如果想要显示web项目虚拟路径下的资源文件列表,就在conf/web.xml文件中修改listings配置项开启列表功能。

     <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>  <!--修改此处为true即可显示虚拟目录资源列表-->
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>

        ◉默认情况下,无法通过通过http://localhost:8080/欢迎页面中的ManagerApp、HostManager、ServerStatus按钮进入到管理页面,要想访问这些页面则需要在conf/tomcat-users.xml文件中配置用户和角色:

    <tomcat-users xmlns="http://tomcat.apache.org/xml"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
                  version="1.0">
    
     <role rolename="admin-gui"/>
      <role rolename="manager-gui"/>
      <role rolename="manager-script"/>
      <role rolename="manager-jmx"/>
      <role rolename="manager-status"/>
      <user username="admin" password="admin" roles="admin-gui,manager-script,manager-jmx,manager-status,manager-gui"/>
    
    </tomcat-users>

    如果需要在非宿主机上访问,还需再修改webapps/manager/META-INF/content.xml文件和webapps/host-manager/META-INF/content.xml文件中的value节点的allow属性(代表可访问的ip):

     <!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
    -->
    
      <Valve className="org.apache.catalina.valves.RemoteAddrValve"
             allow="\d+\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

        ◉tomcat中可以运行多个web项目,其部署方式有如下几种:

          a.在webapps中直接创建web项目目录,该目录在需要包含一个WEB-INF子目录,子目录下包含一个该项目的web.xml配置文件,格式如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" version="5.0" metadata-complete="true">
    
      <display-name>web项目显示的名称</display-name>
      <description>
         Web项目描述
      </description>
    </web-app>

          b.在webapps文件夹之外创建web项目路径,该目录同样需要包含一个WEB-INF子目录,子目录下包含一个该项目的web.xml配置文件,然后在conf/server.xml中的Host节点下增加Context 节点,代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Server port="8005" shutdown="SHUTDOWN">
      <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" />
      <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 name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <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">
            <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" />
            <!-- 增加的静态资源映射配置,常用于访问mp3、img等静态资源文件,doc表示资源文件路径,path表示静态资源虚拟目录路径 -->    
           <Context path="/static" docBase="D:\static" reloadable="true" crossContext="true"></Context>
           <!-- 增加该节点,path表示访问该web的地址,docBase表示真实的web项目部署路径-->
           <Context path="/web1" docBase="H:\web\web1" /> 
          </Host>
        </Engine>
      </Service>
    </Server>

        ◉在访问web项目或者静态资源时,常需要通过localhost:8080/web/index.html格式来访问,如果我们想去掉虚拟路径,直接通过localhost:8080/index.html来访问,则可以在conf/server.xml文件对应web项目的Context节点中修改path为"/"即可,但是要保证访问的资源是唯一的,不与其他web项目资源冲突,不然可能会报错。

        ◉如果我们部署的web项目是jsp动态应用程序,则在第一次访问jsp程序时,tomcat会先将jsp文件转换为*.java程序代码(存放在work目录中),再编译为*.class字节码文件(存放在work目录中),再用*.class字节码文件执行输出,因此首次访问jsp页面加载比较慢。

        ◉Idea开发工具与tomcat整合实现项目在tomcat中运行和调试:

     

     

     四、Tomcat的WebSocket功能

      Websocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消息给浏览器。

      为什么传统的HTTP协议不能做到websocket实现的功能?

      这是因为HTTP协议是一个请求–响应协议,请求必须先由浏览器发给服务器,服务器才能响应这个请求,再把数据发送给浏览器。换句话说,浏览器不主动请求,服务器是没法主动发数据给浏览器的。
      这样一来,要在浏览器中搞一个实时聊天,或者在线多人游戏的话就没法实现了,只能借助Flash这些插件。也有人说,HTTP协议其实也能实现啊,比如用轮询或者comet。轮询是指浏览器通过JavaScript启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息。这个机制的缺点一是实时性不够,二是频繁的请求会给服务器带来极大的压力。
      Comet本质上也是轮询,但是在没有消息的情况下,服务器先拖一段时间,等到有消息了再回复。这个机制暂时地解决了实时性问题,但是它带来了新的问题︰以多线程模式运行的服务器会让大部分线程大部分时间都处于挂起状态,极大地浪费服务器资源。另外,一个HTTP连接在长时间没有数据传输的情况下,链路上的任何一个网关都可能关闭这个连接,而网关是我们不可控的,这就要求comet连接必须定期发一些ping数据表示连接正常。

       websocket的特点:

        ◉websocket的发起方必须是浏览器,请求方式为ws://开头。

        ◉请求头connection: Upgrade和请求头upgrade: websocket表示这个连接将要被转换为 websocket 连接。

        ◉sec-Websocket-Key是用于标识这个连接,是一个BASE64编码的密文,要求服务端响应一个对应加密的sec-web$ocket-Accept头信息作为应答。

        ◉sec-websocket-version指定了websocket的协议版本。

        ◉HTTP101状态码表明服务端已经识别并切换为websocket协议,sec-Websocket-Accept是服务端与客户端一致的秘钥计算出来的信息。

      tomcat7.0.5以后开始支持websocket,实现了java WebSocket的标准规范,java WebSocket应用由一系列的WebSocketEndpoint组成,Endpoint是java对象,表示Websocket连接的一端。我们可以通过编程或注解的方式实现Endpoint功能。Endpoint实例在Websocket握手时创建,并在客户端与服务端链接过程中有效,最后在连接关闭时结束。在Endpoint接口中明确定义了与其生命周期相关的方法,规范实现者确保生命周期的各个阶段调用实例的相关方法。

    五、tomcat配置文件解读

      1、\conf\server.xml配置文件主要是用于配置服务器信息,内容说明如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
     <!-- 根节点:表示关闭tomcat的时候通过监听8005端口的SHUTDOWN指令来实现; 内嵌的子元素为Listener监听器,GlobalNamingResources全局命名资源,Service服务实例(可以包含多个)-->
    <Server port="8005" shutdown="SHUTDOWN"> 
      <!--监听器:用于以日志形式输出服务器、操作系统、JVv的版本信息-->
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> 
      
      <!--监听器:用于加载(服务器启动)和销毁(服务器停止)APR,如果找不到APR库,则会输出日志,并不影响tomcat启动-->
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
    
      <!--监听器:用于遵免JRE内存泄温问题-->
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      
      <!--监听器:用户加载(服务器启动)和销股(服务器停止)全局命名服务-->
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      
      <!--监听器:用于在context停止时重建Executor池中的线程,以避免ThreadLocal相关的内存泄漏-->
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      
        <!--全局命名资源:定义了全局命名服务资源-->
      <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>
    
      
       <!--server实例:该元素用于创建 service 实例,默认使用org.apache.catalina.core.StandazdService。 默认情况下,tomcat仅指定了service的名称,值为“catalina"。
         Service可以内嵌的元素为∶ Listener、Executor、Connector、Engine,其中:Listener用于为service添加生命周期监听器,Executo用于配置service 共享线程池,connector用于配置service包含的连接器,Engine用于配置service中连接器对应的servlet容器引擎。-->
      <Service name="Catalina">
        <!--连接器:Connector用于创建连接器实例。默认情况下,server.xm1配置了两个连接器,一个支持HTTP协议,一个支持AJP协议,因此大多数情况下,我们并不需要新增连接器配置,只是根据需要对已有连接器进行优化。
           port∶端口号,connector用于创建服务端socket并进行监听,以等待客户端请求连接。如果该属性设置为0,Tomcat将会随机选择一个可用的端口号给当前connector使用。
           protocol∶当前connector支持的访问协议。默认为HITP/1.1,并采用自动切换机制选择一个基于JAvANzO的连接器或者基于本地APR的连接器(根据本地是否含有Tomcat的本地库判定)。
           connectionTimeout : Connector接收连接后的等待超时时间,单位为毫秒。-1表示不超时。
           redirectPort:当前connector不支持SSL请求,接收到了一个请求,并且也符合security-constraint约束,需要ssl传输,catalina自动将请求重定向到指定的端口。
           executor ︰指定共享线程池的名称,也可以通过maxThreads、minSpareThreads等属性配置内部线程池。
           URIEncoding :用于指定编码URI的字符编码,Tomcat8.x版本默的编码为UTF-8。
        -->
        <Connector port="8080" 
                   protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
                   
          <Connector port="8009" 
                   protocol="AJP/1.3"
                   redirectPort="8443" />
                   
        <!--Engine:用于配置service中连接器对应的servlet容器引擎。一个service只能包含一个Engine,Egine是Servlet的顶级元素,内部可以嵌套Cluster、Listener、Realm、Valve、Host标签
           其属性有:
           name:用于指定Engine的名称,默认为catalina。该名称会影响一部分Tomcat的存储路径(如临时文件)。
           defaultHost:指定默认使用的虚拟主机名称,当客户端请求指向的主机无效时,将交由默认的虚拟主机处理,默认为localhost。
        -->       
        <Engine name="Catalina" defaultHost="localhost">
        
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm"  resourceName="UserDatabase"/>
          </Realm>
          <!--Host:用于配置一个虚拟主机,它支持以下嵌入元素∶Rlias、cluster、Listener、Va1ve、Realm、 Context。如果在Engine下配置Realm,那么此配置将在当前Engine下的所有Host中共享。同样,如果在Host中配置Realm ,则在当前Host下的所有context中共享。context中的Realm优先级> Host 的Realm优先级>Engine中的Realm优先级。
        Host节点具体如下属性:
            name:当前Host通用的网络名称(域名),必须与dns服务器上的注册信息一致。Engine中包含的Host必须存在一个名称与Egine的defaultHost设置一致。
            appBase :当前Host的应用基础目录,当前:ost.上部署的web应用均在该目录下(可以是绝对目录,相对路径)。默认为webapp8,
            unpackWARs∶设置为true,Host在启动时会将appBase目录下war包解压为目录。设置为false,Host将直接从war文件启动,
            autoDeplpy :控制tomcat是否在运行时定期检测并自动部署新增或变更的web应用。
            -->
          <Host name="localhost"  
                appBase="webapps" 
                unpackWARs="true" 
                autoDeploy="true">
                
                <!--可以通过Alias元素配置多个域名,实现同一Host拥有多个网络名称(域名)-->
             <Alias>www.localhost.com</Alias>
    
              <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" />
                
                <!--Context用于配置一个web应用,它支持的内嵌元素为:cookieProcessor,Loader,Manager,Realm ,Resources , watchedResource , Jarscanner, valve。
                其属性如下:
                   docBase : Web应用目录或者war包的部署路径。可以是绝对路径,也可以是相对于Host appBase的相对路径。
                   path : web应用的context路径。如果我们Host名为localhost,则该web应用访问的根路径为︰ http://localhost:8080/myApp
                -->
               <Context docBase="D:/myweb" path="/myApp" >
               
               </Context>
          </Host>
          
        </Engine>
        
         <!--Executor:用于配置连接器的线程池。默认情况下,tomcat没有配置,多个连接器共用一个线程池。其属性有:
            name:表示线程池的名字;
            namePrefix:所创建的每个线程的名称前缀,一个单独的线程名称为namePrefix+threadiNumber;
            maxThreads:线程池中最大线程数量;
            minSpareThreads:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在;
            maxSpareThreads:
            maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
            maxQueueSize:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。
            threadPriority:线程池中线程优先级,默认值为5,值从1到10。
            className:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.standardThreadExecutor。如果想使用自定义线程池首先需要实现org.apache.catalina.Executor接口。
            prestartminSpareThreads:启动线程池时是否启动minspareThreads部分线程。默认值为false,即不启动。
         -->  
         <Executor name="tomcatThreadPool" 
                 namePrefix="catalina-exec-"
                 maxThreads = "500" 
                 minSpareThreads = "20"  
                 maxSpareThreads = "50"  
                 maxIdleTime = "60000" 
                 maxQueueSize = "Integer.MXA_VALUE"
                 threadPriority="5"
                 className="org.apache.catalina.core.standardThreadExecutor"
                 prestartminSpareThreads="false" />
                    
      </Service>
      
    </Server>

      2、web.xml文件主要是用于配置web应用的信息,该文件主要包含conf/web.xml默认配置文件和具体web项目下WEB-INF/web.xml定制配置文件,配置说明如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
    https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
    version="5.0"
    metadata-complete="true">
    
    <description>web项目描述</description>
    <display-name>显示的web项目名称,该名称将会显示在tomcat管理界面中</display-name>
    <!---指定web图标-->
    <icon>
        <small-icon>/images/small.gif</small-icon>
        <large-icon>/images/large.gir</large-icon>
    </icon>
    
    <!---初始化参数:元素含有一对参数名和参数值,用作应用的servlet上下文初始化参数。参数名在整个Web应用中必须是惟一的。包含两个子元素param-name和param-value-->
    <context-param>
        <param-name>param_name</param-name>
        <param-value>param_value</param-value>
    </context-param>
    
    <!---会话配置:配置session的有效期,cookie的信息-->
    <session-config>
        <session-timeout>30</ session-timeout>
        <cookie-config>
            <name>cookiename</name>
            <domain>wwev .itcast.cn</comain>
            <path>/</path>
            <comment>session cookie</comnent>
            <http-only>true</http-only>
            <secure>false</ secure>
            <max-age>3600</max-age>
        </cookie-config>
        <traaking-mode>COOKIE</ traaking-mode>
    </session-config>
    
    <!---配置过滤器:指定Web容器中的过滤器,请求和响应对象被servlet处理之前或之后,可以使用过滤器对这两个对象进行操作。包含子元素:
    init-param:与context-param 元素具有相同的作用
    filter-name:用来定义过滤器的名称,该名称在整个应用中都必须是惟一的
    filter-class:指定过滤器类的完全限定的名称
    -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    
    <!--映射filter:和filter一起使用,指定过滤器被映射到一个servlet或一个URL模式。和filter必须具有相同的名称。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。包含子元素:
    filter-name:定义filter名称
    url-pattern:filter所对应的url
    servlet-name:定义filter的名称
    dispatcher:定Filter对应的请求方式,有RQUEST,INCLUDE,FORWAR,ERROR四种,默认为REQUEST
    -->
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!--处理请求响应:用于处理及响应客户端的需求,动态生成web内容-->
    <servlet>
        <servlet-name>ServletName</servlet-name>
        <servlet-class>xxxpackage.xxxServlet</servlet-class> <!--Servlet的类-->
        <init-param> <!--初始化一个变量,可看成全局变量,可省略-->
            <param-name>参数名称</param-name> <!--变量名称-->
            <param-value>参数值</param-value> <!--变量值-->
        </init-param>
    </servlet>
    
    <!--映射servlet:用来定义servlet所对应URL,和servlet必须具有相同的名称-->
    <servlet-mapping>
        <servlet-name>ServletName</servlet-name>
        <url-pattern>/aaa/xxx</url-pattern> <!--映射的url路径 -->
    </servlet-mapping>
    
    <!--监听器:Listener用于监听sorvlet中的事件,例忡context、request、session对象的创建、修改、删除,并处罚响应事件。listener是观察者模式的实现,在servlet中主要用于对context、reque自t、Bessicon对象的生命周期进行监控。在servlet2.s规范中共定义了8种listener。在启动时,servletContextListener的执行顺序与web.xm1中的配置顺序一致,停止时执行顺序相反。
    -->
    <listener>
        <listener-class>org.springframework.web.context.contextLoaderListener</listener-class>
    </listener>
    
    <!--欢迎页:包含子元素welcome-file,用来定义首页,服务器会依照设定的顺序来找首页-->
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.xhtml</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
    <!--错误页:将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径-->
    <error-page>
        <error-code>404</error-code> <!-- http错误码 -->
        <location>/error404.jsp</location> <!-- 在web应用内的相关资源路径 -->
    </error-page>
    <error-page>
        <exception-type>java.lang.Exception</exception-type> <!-- 一个完整名称的Java异常类型 -->
        <location>/except.jsp</location>
    </error-page>
    
    </web-app>

      3、tomcat的管理配置,主要用于tomcat本身提供的两个管理功能host-manager、manager,host-manager用于管理虚拟主机,manager用于管理web应用。tomcat管理配置文件主要是tomcat-users.xml文件和\webapps\host-manager\WEB-INF\manager.xml。常用的权限配置已经在前一节讲过,此处不在讨论。

    五、tomcat集群

      使用nginx+tomcat可以实现tomcat集群部署,利用nginx的负载均衡功能实现,实现高可用。集群使用一台nginx反向代理服务器,2台以上tomcat服务器,其架构如下:

  • 相关阅读:
    treeview 递归
    循环递归遍历XML文档或按某要求遍历XML文档
    SQL Server、IIS和 ASP.NET安全配置
    C# USING 语句块
    C# 基础语法
    不安装oracle 客户端连接oracle DDTeck连接语法
    Java中堆和栈的区别
    C# 采用OLDB方式连接EXCEL
    EXCEL 列宽
    C# 问号用法
  • 原文地址:https://www.cnblogs.com/zqhIndex/p/16154107.html
Copyright © 2020-2023  润新知