共计 3953 个字符,预计需要花费 10 分钟才能阅读完成。
此文源自一次多年前面试的面试题,民工哥将它总结出来分享给大家,希望对大家有所帮助,或者今后的面试中说不定会用的上。
首先,我们了解一下常见的 Java Web 服务器。
- Tomcat:由 Apache 组织提供的一种 Web 服务器,提供对 jsp 和 Servlet 的支持。它是一种轻量级的 javaWeb 容器(服务器),也是当前应用最广的 JavaWeb 服务器(免费)。
- Jboss:是一个遵从 JavaEE 规范的、开放源代码的、纯 Java 的 EJB 服务器,它支持所有的 JavaEE 规范(免费)。
- GlassFish:由 Oracle 公司开发的一款 JavaWeb 服务器,是一款强健的商业服务器,达到产品级质量(应用很少,收费)。
- Resin:是 CAUCHO 公司的产品,是一个非常流行的应用服务器,对 servlet 和 JSP 提供了良好的支持,性能也比较优良,resin 自身采用 JAVA 语言开发(收费,应用比较多)。
- WebLogic:是 Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 JavaEE 规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。
Tomcat 就是实际环境中最常见的,很多时候,特别是像在平时的测试环境,经常会遇到多个项目同时测试的情况,所以,今天民工哥与大家来聊一聊如何在一个 Tomcat 服务下,同时部署多个应用项目。
1、不修改端口
大家都知道,应用项目是直接放在 Tomcat webapps 目录下面
[root@CentOS7-1 tomcat]# cd webapps/
[root@CentOS7-1 webapps]# ll
total 4
drwxr-x--- 16 root root 4096 Jun 4 03:07 docs
drwxr-x--- 6 root root 83 Jun 4 03:07 examples
drwxr-x--- 5 root root 87 Jun 4 03:07 host-manager
drwxr-x--- 5 root root 103 Jun 4 03:07 manager
drwxr-x--- 3 root root 283 Jun 4 03:07 ROOT
所以,我们在不修改端口的情况下,可以直接在此目录下新增多个项目目录,也可以直接将 war 包放在此目录下,由于测试环境,我们直接模拟 war 解压后的目录,用添加目录来替代。
[root@CentOS7-1 webapps]# mkdir test java
[root@CentOS7-1 webapps]# ls
docs examples host-manager java manager ROOT test
准备测试的首页文件
[root@CentOS7-1 webapps]# echo "this is a test" >test/test.html
[root@CentOS7-1 webapps]# echo "this is a java" >java/java.html
[root@CentOS7-1 webapps]# cat test/test.html
this is a test
[root@CentOS7-1 webapps]# cat java/java.html
this is a java
修改配置文件
<!-- test -->
<Context path="test/" docBase="test" reloadable="true" />
<Context path="java/" docBase="java" reloadable="true" />
#增加上两行配置即可
</Host>
</Engine>
</Service>
</Server>"../conf/server.xml" 173L, 7744C
docBase 属性: 指定 Web 应用的文件路径,可以是绝对路径,也可以给定相对路径
path 属性: 指定访问该 Web 应用的 URL 入口。
reloadable 属性: 若这个属性为 true,tomcat 服务器在运行状态下会监视 WEB-INF/classes 和 WEB-INF/lib 目录下 class 文件的改动,如果监测到 class 文件被更新,服务器会自动重新加载 Web 应用。
重启 Tomcat 服务,测试访问,结果如下:
部署成功。
注:配置文件中增加的配置步骤可以不做,直接跳过,不是必须要做的步骤。
2、修改端口
第二种修改端口的方法,其实是基于第一种方法做出的改良,在 tomcat 目录下创建多个 webapps 目录。
删除 webapps 目录下的 java 项目,并删除 webapps1 目录下 test 项目即可。
修改配置文件
server.xml 已有第一个项目的配置信息,现在需要新增第二个项目的配置,在 Server 节点下,新增一个 Service 节点,第 2 个 Service 节点直接复制第 1 个 Service 内容修改即可。
<Service name="Catalina1">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<Engine name="Catalina1" defaultHost="localhost">
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps1"
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>
只需要注意修改几个配置即可,不太熟悉的读者,可以利用代码工具比较一下,就会发现两段配置的不同,这里就不多解释了。
- Service 的 name 属性修改为 Catelina1;
- http 协议访问的 Connector port 属性修改为 8081;
- Engine 的 name 属性修改为 Catelina1;
- Host 的 appBase 属性修改为 webapps1;
重启服务并测试访问
[root@CentOS7-1 conf]# ../bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@CentOS7-1 conf]# lsof -i :8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2486 root 52u IPv6 25075 0t0 TCP *:webcache (LISTEN)
[root@CentOS7-1 conf]# lsof -i :8081
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2486 root 57u IPv6 25079 0t0 TCP *:tproxy (LISTEN)
[root@CentOS7-1 conf]# curl http://127.0.0.1:8080/test/test.html
this is a test
[root@CentOS7-1 conf]# curl http://127.0.0.1:8081/java/java.html
this is a java