web笔记二:Tomcat的使用

本文详细介绍了Tomcat服务器的配置方法,包括如何修改默认端口、自定义虚拟目录、解决资源重复问题以及在同一台机器上部署多个Tomcat实例的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大多数情况下我们都是使用Tomcat开发web应用,所以,我们需要对Tomcat的配置有一定的了解,如端口配置、应用根目录、多Tomcat配置时需要更改哪些端口等。
下载解压Tomcat后,打开/conf/serve.xml,我们一般都能看到一下内容:

<?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" />
    <Connector port="8009" protocol="AJP/1.3" 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 "%r" %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

问题1:修改默认端口(8080)

<!-- 将8080端口改为8888 -->
<Connector port="8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

问题2:如何自定义虚拟目录

<!-- 方法1:将虚拟目录改为D盘的projects目录下,webapps目录下的应用不再可用-->
<Host name="localhost"  appBase="D:\projects"
            unpackWARs="true" autoDeploy="true">
<!-- webapps和D盘projects目录下的应用都可用 -->
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- 不要忽略path属性 -->
        <Context path="/" docBase="D:\projects"/>
      </Host>

这里可能会涉及到一个资源重复的问题,到最后讲。。。。

问题3:同一个机器部署多个Tomcat的问题
同一台机器部署多个Tomcat可能会引起端口占用的问题,所以部署多个Tomcat需要修改三个端口,分别是两个Connector.port和一个Server.port

<!-- 将默认的8005改为8006 -->
<Server port="8006" shutdown="SHUTDOWN">
<!-- 将默认的8080改为8081-->
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<!-- 将默认的8009改为8010-->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
<!-- 省略其他部分 -->
</Server>

问题4:我希望使用指定的域名访问我的应用而不是localhost
第一步:

<!-- 将localhost改为你想要的域名,例如www.hxl.com -->
 <Host name="www.hxl.com"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

第二步:
打开C:\Windows\System32\drivers\etc\hosts文件,添加下面一行即可

127.0.0.1       www.hxl.com

说明,当我们浏览器去请求带有域名的url时,例如www.baidu.com/xxx,浏览器会依次执行下面的操作
1、查找本地hosts文件是否配置www.baidu.com映射的IP信息,找到则跳到第四步,否则执行下一步
2、查找路由器DNS配置信息,找到则跳到第四步,否则执行下一步
3、去互联网DNS服务器上查找IP,如果还找不到,则返回404找不到资源
4、根据IP和端口信息查找相应的资源信息,如果域名没有显式地标明使用哪个端口,则使用的是80端口


现在,我们回到第二点:

<!-- webapps和D盘projects目录下的应用都可用 -->
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <!-- 不要忽略path属性 -->
        <Context path="/" docBase="D:\projects"/>
      </Host>

如果webapps和D:\projects都存在名为myweb的应用,那么我访问localhost:8080/myweb/xxx的时候,会去请求哪个目录下的web应用?结论是只会请求webapps下的web应用
但是,如果webapps和D:\projects都存在一个静态资源文件,如index.jsp,当请求localhost:8080/index.jsp时,会优先请求D:\projects的静态文件

如果配置的是

<Context path="/myweb" docBase="D:\projects"/>

那么,webapps下的myweb应用将失效

以上结论都基于tomcat-8.5.15测试得到的结论,当然,一般情况下,我们都不会做一些有歧义的配置信息,而且,一个tomcat一般只会部署一个web应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值