news 2026/3/28 15:55:21

SSM聚合工程部署介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SSM聚合工程部署介绍

我们以哈米音乐为例介绍SSM聚合工程的部署

父工程 (ham-parent):

不写任何业务代码,主要用于统一管理所有子模块的版本、依赖和插件,打包方式是pom包

子模块:

ham-portal:前台模块,负责控制层和表现层,打包方式是war包

ham-core:底层公用的模块,负责dao和service的访问,打包方式是jar包

ham-console:后台模块,负责控制层和表现层,打包方式是war包

ham-file:文件服务器模块,打包方式是war包

子模块要继承父模块,父模块要聚合子模块

找到 ham-parent 的右侧 maven 视图,打包父工程执行 install

父工程打包成功后,所有子模块的打包也会自动全部打包好,将这三个war包复制到 tomcat 的webapps目录下,公共模块的jar包不用复制过来

这是因为在 ham-portal 的 pom.xml 文件中,声明了对 ham-core 的依赖

<dependency> <groupId>com.qcby</groupId> <version>1.0-SNAPSHOT</version> <artifactId>ham-core</artifactId> </dependency>

当使用 Maven 对 ham-portal 进行package打包时,Maven 会去本地 Maven 仓库里找到 ham-core-1.0-SNAPSHOT.jar 这个文件,自动把 ham-core-1.0-SNAPSHOT.jar 文件复制到 ham-portal.war 包内部的 WEB-INF/lib/ 目录下。Tomcat 启动后,会加载 ham-portal.war,并自动识别 WEB-INF/lib 目录下的所有 Jar 包,这样 ham-portal 中的代码就可以顺利调用 ham-core 中的内容了。

下面需要修改 tomcat 目录/conf/server.xml 文件,在同一台物理服务器上,用一个 Tomcat 进程运行多个独立的 Web 服务,它们互不干扰,拥有自己的端口和应用。

<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- Note: A "Server" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/server.html --> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!-- Prevent memory leaks due to use of particular java/javax APIs--> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <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> <!-- A "Service" is a collection of one or more "Connectors" that share a single "Container" Note: A "Service" is not itself a "Container", so you may not define subcomponents such as "Valves" at this level. Documentation at /docs/config/service.html --> <Service name="Catalina"> <!--The connectors can use a shared executor, you can define one or more named thread pools--> <!-- <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- A "Connector" using the shared thread pool--> <!-- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> --> <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 This connector uses the NIO implementation. The default SSLImplementation will depend on the presence of the APR/native library and the useOpenSSL attribute of the AprLifecycleListener. Either JSSE or OpenSSL style configuration may be used regardless of the SSLImplementation selected. JSSE style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/localhost-rsa.jks" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2 This connector uses the APR/native implementation which always uses OpenSSL for TLS. Either JSSE or OpenSSL style configuration may be used. OpenSSL style configuration is used below. --> <!-- <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" /> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector> --> <!-- Define an AJP 1.3 Connector on port 8009 --> <!-- <Connector protocol="AJP/1.3" address="::1" port="8009" redirectPort="8443" /> --> <!-- An Engine represents the entry point (within Catalina) that processes every request. The Engine implementation for Tomcat stand alone analyzes the HTTP headers included with the request, and passes them on to the appropriate Host (virtual host). Documentation at /docs/config/engine.html --> <!-- You should set jvmRoute to support load-balancing via AJP ie : <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"> --> <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- 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="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <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="Catalina1"> <Connector port="8086" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina1" 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" /> <Context docBase="ham-console-1.0-SNAPSHOT" path="/" reloadable="true"/> </Host> </Engine> </Service> <!-- 前台项目服务 --> <Service name="Catalina2"> <Connector port="8087" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8011" protocol="AJP/1.3" redirectPort="8443" /> <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="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" /> <Context docBase="ham-portal-1.0-SNAPSHOT" path="/" reloadable="true"/> </Host> </Engine> </Service> <!-- 图片服务器 --> <Service name="Catalina3"> <Connector port="8085" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8012" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina3" 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" /> <Context docBase="ham-file-1.0-SNAPSHOT" path="/" reloadable="true"/> </Host> </Engine> </Service> </Server>

Connector 标签用于连接器,负责监听来自客户端的网络请求,并将响应返回给客户端;

HTTP 连接器的port配置监听对应端口,AJP 连接器的port配置监听对应端口;

Context 是Web 应用的具体配置,它将一个 Web 应用映射到一个 URL 路径上,

docBase用于指定 Web 应用的物理路径,path用于指定浏览器访问时的路径名,reloadable用于指定是否自动重载。

进入 Tomcat 的 bin 目录点击 Windows: startup.bat 或 Linux/macOS: ./startup.sh 运行启动脚本,当 Tomcat 启动时,它会自动检测到 webapps 目录下的新 .war 文件,并将其解压成一个同名的文件夹,web.war 会被解压成 web 文件夹,如下

conf 目录下也会生成名为Catalina1、Catalina2、Catalina3 的服务创建专属的工作目录和日志文件,这是因为 Tomcat 需要为每个独立的服务提供一个隔离的运行环境,以防止它们之间相互干扰

tomcat 启动成功后就可以访问该项目了,该项目的后台路径为:http://localhost:8086/index,前台路径为:http://localhost:8087/index,图片服务器路径为:http://localhost:8085/。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 17:08:50

如何在管家婆网店ERP中创建物流单模板?

登录进入管家婆网店ERP系统&#xff0c;点击左侧导航栏资料-物流公司进入新增或维护物流公司信息&#xff08;如名称、编号等&#xff09;。物流公司添加好后从左侧资料-物流服务模板管理进入模板设置界面&#xff0c;点击新增物流服务模板。根据实际情况选择面单类型&#xff…

作者头像 李华
网站建设 2026/3/19 5:52:18

MarchingCases marchingcubes算法15种情况的展示

一&#xff1a;主要的知识点 1、说明 本文只是教程内容的一小段&#xff0c;因博客字数限制&#xff0c;故进行拆分。主教程链接&#xff1a;vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①MarchingCubes等值面重建的原理展示 二&a…

作者头像 李华
网站建设 2026/3/28 7:02:40

Java IO 实战学习指南:从基础到进阶(附代码实操)

Java IO 实战学习指南&#xff1a;从基础到进阶&#xff08;附代码实操&#xff09; Java IO&#xff08;输入/输出&#xff09;是Java开发的核心基础&#xff0c;负责程序与外部设备&#xff08;文件、网络、键盘等&#xff09;的数据交互。很多初学者觉得IO类繁多、流概念抽象…

作者头像 李华
网站建设 2026/3/27 23:09:49

Docker命令合集详解

总结的相对全面且详细的 Docker 和 Docker Compose 命令合集。为了方便查阅&#xff0c;我将其分为 基础/镜像管理、容器操作、Docker Compose 编排 以及 常用参数详解 四个部分。第一部分&#xff1a;Docker 基础与镜像命令 (Images) 镜像&#xff08;Image&#xff09;是容器…

作者头像 李华
网站建设 2026/3/15 5:21:58

3分钟极速部署OpenMetadata元数据平台的完整指南

3分钟极速部署OpenMetadata元数据平台的完整指南 【免费下载链接】OpenMetadata 开放标准的元数据。一个发现、协作并确保数据正确的单一地点。 项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata 一键启动配置&#xff0c;快速搭建企业级数据治理平台。本…

作者头像 李华
网站建设 2026/3/25 1:44:09

11、深入探索Bash脚本:自动完成与环境定制

深入探索Bash脚本:自动完成与环境定制 1. 为自定义应用编写Bash自动完成功能 当使用 complete -r 命令时,如果没有指定 command_name 作为参数,所有的自动完成规范都会被移除: $ complete -r $ completeBash-completion包并不为外部工具提供自动完成功能。若要为有…

作者头像 李华