Tomcat8配置多个端口访问各端口对应的JavaWeb项目
背景:最近遇到个项目部署的小要求:一个tomcat下配置多个端口去访问端口对应的JavaWeb项目
原理:tomcat中conf下server.xml文件中的service节点即可配置tomcat的端口号及对应的项目
配置步骤:
1.打开tomcat下conf文件夹中的serve.xml文件,找到service节点对应的代码
<Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> <Engine defaultHost="localhost" name="Catalina"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/> </Engine> </Service>
2.粘贴1步骤中找到的service节点代码,复制到service结尾处,使两个service节点成为兄弟节点,即:
<Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/> <Engine defaultHost="localhost" name="Catalina"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/> </Engine> </Service> <Service name="Catalina_second"> <!--保证service的name属性值不同--> <Connector connectionTimeout="20000" port="8500" protocol="HTTP/1.1" redirectPort="8443"/> <!--修改port为你想要使用的端口,注意不能被占用--> <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>--> //注释掉这句话 <Engine defaultHost="localhost" name="Catalina_second"> <!--保证service中Engine节点的name值不同--> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host appBase="webapps_second" autoDeploy="true" name="localhost" unpackWARs="true"> <!--在Tomcat的根目录下新建一个webapps_second文件夹存放war包--> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log" suffix=".txt"/> <Context path="" docBase="test" debug="0" reloadable="true"/> <!--这句话可以使该端口下项目中的某个页面为访问域名的首个页面,docBase为项目名--> </Engine> </Service>
至此已经实现tomcat多个端口部署多个项目,下面介绍的是将域名与某个项目的页面绑定。
3.在service下的host节点中加上
<Contextpath=""docBase="test"debug="0"reloadable="true"/>(test为项目名),然后打开conf下的web.xml文件,在welcom-file-list中配置对应项目的首页面
tip:<Contextpath=""docBase="test"debug="0"reloadable="true"/>和3步骤主要用于户域名和页面的绑定,即输入域名访问项目的哪个页面
4.,保存文件,重启tomcat,即可通过不同端口访问对应项目了
tip:
1.<Context path="" docBase="test" debug="0"reloadable="true"/>
path留空的话表示配置的域名直接访问该项目,path填写项目名的话表示域名后面带上项目名才能访问该项目。docBase项目访问路径。(一般webapp下面的root配置的path就为空)
2.
2.1. 域名。现在的域名不是很贵,有很多人都有,而我们注册域名的网站也会有一个DNS助解析,就是把服务器的IP绑定到这些域名上。
2.2.我们域名有了,现在就来说说我们的项目;比如说我现在有两个项目都在我的这个tomcat下面。那我们输入http://localhost:8080/abc就可以访问到我们abc这个项目了,但是端口号8080如何去掉呢?
在tomcat的conf文件夹下有一个server.xml。我们打开这个文件,找到8080,只需要把8080改成80即可。当我们再次输入http://localhost/abc即可。
2.3. 可是我们的域名如何跟项目绑定到一起呢?我们再次找到tomcat下面的conf文件夹里面的server.xml。
修改<Host name="我们所要绑定的域名" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"></Host>
2.4.当启动tomcat的时候,输入我们绑定的域名,是不是看到了我们的tomcat。可是我们想访问我们的项目还得再域名后面加上项目名称才能访问到,也就是说到现在我们的域名还没跟项目绑定到一起。
我们在看一下第三部,想让我们的项目和域名绑定到一起,我们只需要在</Host>前面加上<Context docBase="项目名" path="" reloadable="true" >即可。
例如:<Host name="www.abc.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="baidu" path="" reloadable="true" ></Host>
2.5. 当我们的有两个项目都放在同一个tomcat下的时候,我们只需要把<Host></ Host>加上两个既可以完成我们的2个项目的绑定,但是项目名称别忘了改哦。
2.6. 当我们的服务器自己维护(没有放在机房),我们需要对我们的路由做一下映射。就拿我的路由来举例。我的路由是TP-LINK WR340G型号,进入路由后,我们能找到一个转发规则,那里面有一个虚拟服务器的这项,点击新增条目以后会有:服务端口号、IP地址、协议、状态、常用服务端口号。我们只需在这里IP地址(服务器的局域网IP),协议选择ALL(有的路由好像没有这项,那就不需要填写了),状态选择生效,常用服务端口号选择HTTP或者WEB即可。这时默认的端口号为80。当常用服务端口号没有HTTP或者WEB这项时,可以选择DNS,然后手动把端口号改成80。点击生效。保存即可。如果说本人说的路由映射对您不适用或者没有看明白,可以上网找各种路由的映射方法。
--------------------------------------------------
tomcat配置虚拟目录映射
--------------------------------------------------
一、在Server.xml中进行配置
在<Host>元素中添加子元素<Context path=" ... " docBase=" ... "/> 并重启服务器即可;
path表示虚拟目录,docBase表示真实的web应用所在目录;
比如在C盘中存在a这个web应用,则 <Context path="/test" docBase="C:\a"/>
则输入 http://localhost:8888/test/1.html 就能访问到a文件夹下的 1.html
注意:这种方法需要重启服务器才能够生效,所以不适用,因为每次添加一个web应用都需要重启服务器。
二、最佳配置方法
$CATALINA_BASE/conf/catalina/localhost/ 文件夹下创建一个xml文件,任意文件名都可以,但是此文件名是web应用发布后的虚拟目录;
比如创建一个test.xml ,在文件中添加 <Context docBase="C:\a"/>
不需要重启服务器,只需要在浏览器中输入 http://localhost:8888/test/1.html 即可访问C:\a\1.html ;
三、配置默认web应用
一般,输入 http://localhost:8080 后都会跳出 tomcat的主页,因为这个tomcat的web应用就是默认的web应用,如果想将自己的web应用配置成默认的web应用,只需要在Server.xml中的<Context>元素中为 <Context path="" docBase="C:\a"/>
或者将test.xml改成 ROOT.xml 即可;
输入 http://localhost:8080/1.html 就能访问C:\a\1.html ;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)