Tomcat 部署多个web项目

时间:2022-09-17 08:31:03

环境

Centos 7
Tomcat-8
Web项目1:java web 入门学习项目
Web项目2:spring boot /maven 构建


提纲

在一个tomcat中部署多个web项目,一般只需要简单的將web程序放到tomcat安装目录/webapps中即可,但是我安装的时候遇见了一些问题,在此记录便于以后查询,若有问题欢迎道友指正,不胜感激^.^


tomcat配置,三种方法

Tomcat安装略过

1. 基础做法

直接將项目放到webapps中即可,重启tomcat浏览器访问即可;

特别说明:在安装tomcat的时候,没有更改这个默认的存放项目的位置。Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用。所以可以将程序打包成一个 war包放在目录下,服务器会自动解开这个war包,并在这个目录下生成一个同名的文件夹。一个war包就是有特性格式的jar包,它是将一个web程序的所有内容进行压缩得到。
修改默认的项目存放位置:修改tomcat安装目录/conf/server.xml

<Host name="localhost" 
appBase="webapps"
unpackWARs="true"
autoDeploy="true"
xmlNamespaceAware="false">

host节点中appBase更改为自己存放项目的目录即可,unpackWARs表明是否在启动时是否自动解压war包

2. 升级做法

tomcat安装目录/conf/server.xml指定项目位置。

在Tomcat的配置文件中,一个Web应用就是一个特定的Context,可以通过在server.xml中新建Context里部署一个JSP应用程序。打开server.xml文件,在Host标签内建一个Context,内容如下

<Context path="/web1" docBase="D:\我存放第一个web项目的目录" debug="0" privileged="true"></Context>
<Context path="/web2" reloadable="true" docBase="D:\我存放第二个web项目的目录"/>

Path是浏览器访问时输入的request路径,我写得和项目.war包名相同;docBase 是存放应用程序的物理路径

3.推荐做法

不用修改conf/server.xml文件,直接在tomcat安装目录/conf/Catalina/localhost目录下创建配置文件,文件名和request路径名相同,和war包名相同,后缀为.xml,如web1.xml,web2.xml
然后在web1.xml文件中写的类容为:

<Context path="/hello" docBase="D:\程序web1的目录" debug="0" privileged="true"></Context>

Path值和文件名相同,即等于request路劲。
然后web2中的类容一样,只是path和docBase做相应更改即可,如果以后有更多项目,直接增加相应的文件即可。
服务器端运行的项目名称为path,外部访问的URL则使用XML的文件名。这个方法很方便的隐藏了项目的名称,对一些项目名称被固定不能更换,但外部访问时又想换个路径,非常有效

网址无法打开,查看日志,显示
Unable to add the resource at [/WEB-INF/lib/twilio-java-sdk-6.3.0.jar] to the cache because there was insufficient free space available after evicting expired cache entries - consider increasing the maximum size of the cache
的问题,是因为从tomcat8中开始就增加了静态资源缓存的配置 ,是需要设置相应的参数的。
tomcat的安装目录/conf/context.xml中的Context中添加:

<Resources  cachingAllowed="true" cacheMaxSize="100000"/>

web程序代码设置

因为spring-boot默认提供内嵌的tomcat,所以需要在一个tomcat中运行多个web程序的时候,需要將项目打包成war以及取消boot自带的tomcat。

1.修改程序入口

将项目的启动类Application.java继承SpringBootServletInitializer并重写configure方法

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}

2.修改pom

在pom.xml文件中,project下面增加package标签,若原有可能的是jar,所以將jar改成war

<packaging>war</packaging>

3.取消内嵌的tomcat

pom.xml文件中,dependencies下面添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

备注:
请注意修改防火墙访问端口。以上办法都没有设置项目访问域名以及设置单独的访问端口,均使用相同的IP和端口访问。

参考

tomcat服务器部署多项目方法
tomcat配置文件中属性值的说明
spring-boot项目在外部tomcat环境下部署遇到的问题