Tomcat项目部署(单体、聚合项目)

发布于:2025-07-24 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

Tomcat目录结构

1、本地部署项目

单体项目

聚合项目

2、远程部署项目

注意事项


        项目主要分为单体项目和聚合项目(多模块项目,它会把应用拆分成多个独立的模块,每个模块都有其特定的职责。这些模块通过依赖管理进行协作,最终组合成一个完整的应用)

部署的方式有本地和远程部署(云服务器)


Tomcat目录结构

Tomcat目录结构:

bin目录:存放tomcat的命令,主要两大类,.sh结尾(Linux命令),.bat结尾(windows命令)

conf目录:主要存放tomcat的配置文件,主要有:

1、server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码格式

2、web.xml可以设置tomcat支持的文件类型

3、context.xml可以用来配置数据源之类的

lib目录:主要用来存放tomcat运行需要加载的jar包

logs目录:用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志

在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中
在linux环境中,控制台的输出日志在catalina.out文件中

webapps目录:用来存放应用程序,当Tomcat启动时会加载webapps目录下的应用程序,可以以文件夹、war包、jar包的形式发布应用。

当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。

work目录:是tomcat运行时的工作区,主要用于存放 Servlet 容器 处理 JSP和编译其后的 Servlet 类文件,还有其他一些临时生成的文件。清空work目录,然后重启tomcat,可以达到清除缓存的作用

ROOT目录:ROOT 目录属于 Web 应用目录,它是 Tomcat 默认的 Web 应用上下文。当访问 Tomcat 服务器的根路径(http://localhost:8080/)时,实际上访问的就是这个目录下的资源。(我图片中把它删除了,其实是有的)


1、本地部署项目

单体项目

先打包项目为war包,对于单体项目,在项目中导入依赖

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.2</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml> <!-- 适用于 Servlet 3.0+ -->
            </configuration>
        </plugin>
    </plugins>
</build>
<packaging>war</packaging>

        打包好后,在target目录下找到.war包,然后将其部署到tomcat目录下的webapps下,这样启动tomcat后,便可以访问到了

        如果要同时部署多个项目,这样就不能使用一个端口号,会冲突。因此需要在conf/server.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>
<!-- 修改位置1:这里配置第一个服务 -->
<Service name="Catalina">
    <!-- 修改位置2:需要在这里修改端口号-->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    
    <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 &quot;%r&quot; %s %b" />
        <!-- 修改位置3:path资源目录上下文,docBase:在webapps下导入的war包的位置-->
  		<Context path="/" docBase="/root/tomcat/apache-tomcat-8.5.85/webapps/web-1.0-SNAPSHOT" reloadable="true"></Context>
      </Host>
    </Engine>
  </Service>

  <!-- 这里配置第二个服务,name不能重复 -->
   <Service name="Catalina2">
    <!-- 确保端口号不和其他服务端口号重复 -->
    <Connector port="8082" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />
    
    <Engine name="Catalina2" defaultHost="localhost">
      
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        
        <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 &quot;%r&quot; %s %b" />
        <!-- 这里修改docBase的路径  -->
  		<Context path="/" docBase="/root/tomcat/apache-tomcat-8.5.85/webapps/testDemo2-1.0-SNAPSHOT" reloadable="true"></Context>
      </Host>
    </Engine>
  </Service>
</Server>

聚合项目

对于聚合项目

        模块之间会有依赖,比如这个项目SimpleDemo有两个模块:service模块和web模块,web模块依赖于service模块 ,因此需要在web的pom.xml文件中,导入service的依赖。因此需要对service进行打包(package)。任何模块只要package后,都会在本地仓库中存储。因此可以直接坐标导入service依赖:

整体项目架构:

        然后将web项目(根据实际情况)打包,打包成war包后,再将war包放到webapps目录下,然后访问对应的资源即可。

2、远程部署项目

      在官网下载tomcat.tar.gz包,并将该包上传到云服务器上,解压好后,进入里面的webapp目录

        将本地打包好的war包导入,通过在终端输入rz进行选择并导入(无论单体项目还是聚合项目,只要把war包导入即可)

        导入好后,修改tomcat目录下的conf/server.xml文件,修改方式和上面的本地部署一样,注意docBase的路径(在云服务器上的绝对路径),在server.xml文件中修改了端口号,也要注意在云服务器控制台中开放端口号(关了防火墙也得开放)!

              同时也要注意 tomcat版本和代码中servlet版本的兼容性 (重要!),以下是所注意的一些事项:

注意事项

一、将Tomcat项目部署到云服务器上后,可以正常显示首页,但是访问一些接口时出错;但本地是正常的

        原因:Tomcat版本和servlet版本不兼容,云服务器上是Tomcat10+版本,不再支持javax-servlet,将 Servlet API 的包名从 javax.servlet 改为了 jakarta.servlet

所以解决方法方案有两种:1.降级Tomcat版本 2.升级项目依赖包需将项目中的 javax.servlet 依赖迁移至 jakarta.servlet

Tomcat 版本

支持的 Servlet 规范

包名前缀

兼容的 Jakarta/Java EE 版本

Tomcat 10.x+

Servlet 5.0+

jakarta.*

Jakarta EE 9+

Tomcat 9.x

Servlet 4.0

javax.*

Java EE 8

Tomcat 8.5.x

Servlet 3.1

javax.*

Java EE 7

Tomcat 7.x

Servlet 3.0

javax.*

Java EE 6

总结就是:Tomcat9.0以下的版本无法使用Jakarta包,如果是Tomcat10版本以上必须使用Jakarta包


网站公告

今日签到

点亮在社区的每一天
去签到