前言

本文将解决以下问题:

  • 如何将Linux下任意位置的项目(虚拟目录)部署到tomcat?
  • 如何将项目部署到服务器特定端口?
  • 如何在一个服务器上部署多个web应用?

本例中 系统:Linux version 3.10.0-514.el7.x86_64、tomcat版本:8.0.30.0、jdk 版本:jdk1.8.0

场景实例

将任意目录部署到tomcat

实现方法: 修改/增加server.xml文件中以下配置

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="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>

解释

  • ntext元素:每个Context元素代表了运行在虚拟主机上的单个Web应用
  • docBase 属性:自己web应用的路径,可以是相对路径也可以是绝对路径,相对路径是相对于host的webapps,绝对路径如上例。
  • path 属性:即要建立的虚拟目录,是tomcat访问这个应用的URL路径,如果为空则代表访问路径为web应用的根目录,访问路径:http://ip:port、如果非空则访问路径:http://ip:port/path
  • reloadable:如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classesWeb-INF/lib目录CLASS文件的改变,如果监视到有class文件被更新,服务器自动重新加载Web应用,这样我们可以在不重启tomcat的情况下改变应用程序

将项目部署到tomcat任意端口

实现方法: 修改server.sml文件中Connector 的 port 属性,访问方式同上

<Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />

解释:

  • port 属性:指定web应用端口(暴露一个socket端口来accept客户端的链接)
  • protocol 属性:使用的网络协议,表示tomcat使用何种方式来接受和处理client端请求,HTTP/1.1是默认值,等效于org.apache.coyote.http11.Http11Protocol
  • connectionTimeout 属性:当client与tomcat建立连接之后,在”connectionTimeout”时间之内,仍然没有得到client的请求数据,此时连接将会被断开.此值的设定需要考虑到网络稳定型,同时也有性能的考虑.它和tcp的配置选项中的”socket_timeout”仍有区别,connectionTimeout只会在链接建立之后,得到client发送http-request信息前有效.

一个tomcat部署多个项目

实现方法: server.sml文件中增加service元素

<Service name="Catalina2">
<Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8445" />
<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="fantasy" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="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 代表一个web应用实例 ;同一个 server.xml 文件中每个 service 的 name 值不能相同;同一个 server.xml 文件中每个 service 的 redirectPort 、port 值不能相同

完整配置

<?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="80" 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">
<Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/webapps/ROOT" debug="0" privileged="true" reloadable="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="Catalina2">
<Connector port="2727" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8445" />
<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="fantasy" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/root/tomcat/apache-tomcat-8.0.30/fantasy" debug="0" privileged="true" reloadable="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>
</Server>

最新文章

  1. 使用Spire组件抛出异常The type initializer for &#39;spr857&#39; threw an exception
  2. 【bzoj1010】 HNOI2008—玩具装箱toy
  3. hdu 3254 (状压DP) Corn Fields
  4. docker镜像、容器
  5. svn 提交错误 400 Bad Reqest MKACTIVITY 请求于XX失败 Conflict Unable to connect to a repository at URL
  6. asp.net后台获取路径的各种方法归纳
  7. UVA 624 - CD (01背包 + 打印物品)
  8. IOS, xib和storyboard的混用--参考
  9. zoj 2404 最小费用流
  10. web前端技术
  11. 前端上传组件 - Plupload
  12. hdu4513(manacher)
  13. linux 添加定时任务脚本
  14. vagrant扩容
  15. AnyDesk远程连接及异常处理
  16. 做数据挖掘,就算发 20 几分的 CNS 子刊,也是垃圾!?--转载
  17. CentOS7+mysql(yum)
  18. 吴裕雄 31-MySQL 导出数据
  19. c++四舍五入的新方法
  20. 【咸鱼教程】JsZip压缩与解压教程

热门文章

  1. 区区牛马蹉跎 ,不要向生活低下头 Linux的账号和管理
  2. 帆软报表(finereport)JS实现长页面锚点定位
  3. Solution -「Gym 102759C」Economic One-way Roads
  4. Solution -「CF 232E」Quick Tortoise
  5. Solution -「ARC 104E」Random LIS
  6. python对文件夹内文件去重
  7. IDEA2019.2.2激活码,亲测可用
  8. 【Java分享客栈】我为什么极力推荐XXL-JOB作为中小厂的分布式任务调度平台
  9. 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计
  10. 面向对象的基本特征:封装(接口 、struct、枚举、委托、匿名函数) 继承,多态。