Tomca配置

配置多个端口

一个Service可以有多个Connector这里配置一个简单的规则,给HTTP/1.1协议配置多个端口。Connector的详细解释可以参考另一位大神写的博客 

详解tomcat的连接数与线程池 - 编程迷思 - 博客园 (cnblogs.com)

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

Host选择域名

一个Service里只能配置一个Engine但是可以在Engine节点下配置多个Host。name配置域名,appBase配置应用的位置。

#C:\Windows\System32\drivers\etc\hosts
127.0.0.1 localhost
127.0.0.1 localserver
<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" />
</Host>
<Host name="localserver"  appBase="webapps2"
            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" />
</Host>

 

Host默认域名

如果域名对于的是本机但没有对应的Host存在,则寻找默认的Host。Engine.defaultHost配置默认的Host

<Engine name="Catalina" defaultHost="localserver">
      <!--
      <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" />
      </Host>
      -->
       <Host name="localserver"  appBase="webapps2"
            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" />
      </Host>
    </Engine>

Host自动部署

Host.autoDeploy为true则触发自动部署,项目启动后再webapps下放入app2应用,不用重启tomcat也可以访问到app2的服务。

Context应用

一个Host下可以有多个应用,默认的我们没有做任何的配置,将应用放到appBase指定的目录里,tomcat可以自动加载多个应用,应用名为war包名称或解压后的根目录名。除此之外我们还可以单独配置Context.将应用放到指定的目录,并指定应用名。

<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" />
        <Context docBase="D:/tomcat9/app1" path="/outapp"></Context>
</Host>

Context热部署

reloadable开启热部署。reloadable属性指示tomcat是否在运行时监控在WEB-INF/classes和WEB-INF/lib目录下class文件的改动。如果值为true,那么当class文件改动时,会触发Web应用的重新加载。

<Context docBase="D:/tomcat9/app1" path="/outapp" reloadable="true"></Context>

多个Service

一个Server可以对应多个Service可以理解为隔离服务。每一个Service下多个Connector连接器和一个Engine引擎,一个Engine引擎对应多个Host,一个Host对应多个Context,一个Context对应多个Wrapper.

<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" />
      </Host>
    </Engine>
  </Service>
<Service name="Catalina">
    <Connector port="9080" 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="webapps2"
            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" />
      </Host>
    </Engine>
  </Service>

Value责任链

tomcat分为4个等级的容器从上到下分别是Engine,Host,Context,Wrapper。容器与容器直接串联,高层次容器的末尾是下一层容器的frist。在每一层都加入Value标签该标签就是向责任链中添加节点。这里使用的是log功能的value。

 <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="1" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />     
      <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" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="2" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />     
        <Context docBase="D:/tomcat9/app1" path="/outapp">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="3" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />     
        </Context>
      </Host>
    </Engine>
  </Service>

优化启动速度

1.删除掉 webapps 文件夹下不需要的工程。

2.JVM 的类加载器在加载类时,需要查找每一个 JAR 文件,去找到所需要的类。如果删除了不需要的 JAR 文件,查找的速度就会快一些。这里请注意:Web 应用中的 lib 目录下不应该出现 Servlet API 或者 Tomcat 自身的 JAR,这些 JAR 由 Tomcat 负责提供。如果你是使用 Maven 来构建你的应用,对 Servlet API 的依赖应该指定为provided。

3.及时清理日志,删除 logs 文件夹下不需要的日志文件。同样还有 work 文件夹下的 catalina 文件夹,它其实是 Tomcat 把 JSP 转换为 Class 文件的工作目录。有时候我们也许会遇到修改了代码,重启了 Tomcat,但是仍没效果,这时候便可以删除掉这个文件夹,Tomcat 下次启动的时候会重新生成。

4.如果你的项目没有使用 JSP 作为 Web 页面模板,你完全可以把 TLD 扫描禁止掉。方法是,找到 Tomcat 的conf/目录下的context.xml文件,在这个文件里 Context 标签下,加上 JarScanner 和 JarScanFilter 子标签,像下面这样。

<Context>
    <JarScanner>
        <JarScanFilter defaultTLDScan="false"/>
    </JarScanner>
</Context>

5.关闭 WebSocket 支持找到 Tomcat 的conf/目录下的context.xml文件。更进一步,如果你不需要 WebSocket 这个功能,你可以把 Tomcat lib 目录下的websocket-api.jar和tomcat-websocket.jar这两个 JAR 文件删除掉,进一步提高性能。

<Context containerSciFilter="org.apache.tomcat.websocket.server.WsSci">
    <JarScanner>
        <JarScanFilter defaultTLDScan="false"/>
    </JarScanner>
</Context>

6.关闭 JSP 支持我们发现关闭 JSP 用的也是 containerSciFilter 属性,如果你想把 WebSocket 和 JSP 都关闭,那就这样配置。

<Context containerSciFilter="org.apache.tomcat.websocket.server.WsSci |
org.apache.jasper.servlet.JasperInitializer">
    <JarScanner>
        <JarScanFilter defaultTLDScan="false"/>
    </JarScanner>
</Context>

7.禁止 Servlet 注解扫描,Servlet 3.0 引入了注解 Servlet,Tomcat 为了支持这个特性,会在 Web 应用启动时扫描你的类文件,因此如果你没有使用 Servlet 注解这个功能,可以告诉 Tomcat 不要去扫描 Servlet 注解。具体配置方法是,在你的 Web 应用的web.xml文件中这么配置。

<web-app metadata-complete="true"></web-app>

8.并行启动多个 Web 应用Tomcat 启动的时候,默认情况下 Web 应用都是一个一个启动的,等所有 Web 应用全部启动完成,Tomcat 才算启动完毕。如果在一个 Tomcat 下你有多个 Web 应用,为了优化启动速度,你可以配置多个应用程序并行启动,可以通过修改server.xml中的配置。Engine中的startStopThreads表示多个Host并行启动,Host中的startStopThreads表示多个应用并行启动。

 

<Engine name="Catalina" defaultHost="localhost" startStopThreads="0">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" startStopThreads="0">
      </Host>
</Engine>

 

posted @ 2022-03-19 10:14  顶风少年  阅读(79)  评论(0编辑  收藏  举报
返回顶部