web笔记二:Tomcat的使用

来源:互联网 发布:仁霸玻璃优化软件 编辑:程序博客网 时间:2024/06/06 00:08

大多数情况下我们都是使用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应用。

原创粉丝点击