news 2026/4/23 12:16:38

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/4/23 12:34:19

AI 生成 3D 资产爆发:直接赋能游戏与工业设计,成本降低多少?

一、行业困局&#xff1a;3D 资产生产的成本枷锁与效率瓶颈 3D 资产作为游戏开发、工业设计、AR/VR 等领域的核心生产资料&#xff0c;其传统制作模式正面临需求井喷与供给不足的尖锐矛盾。根据 QYR 数据&#xff0c;2024 年全球 3D 生成 AI 市场规模已达 15.1 亿美元&#xf…

作者头像 李华
网站建设 2026/4/23 12:34:20

使用Git 要注意的

Check 切换分支 切换分支合并完代码&#xff0c;切回自己的分支 !! check切换到测试分支&#xff0c;记得切换回自己的分支&#xff0c;不然有时会在测试分支写代码&#xff0c;容易出现冲突或者错误提交。 Stash 隐藏分支代码 切到其他分支处理问题&#xff0c;记得 Stash 如果…

作者头像 李华
网站建设 2026/4/23 9:57:59

2025年北京展厅设计企业TOP10权威测评:壹码视界在数字展厅行业地位

2025年北京展厅设计企业TOP10权威测评引言在当今数字化快速发展的时代&#xff0c;展厅设计行业也迎来了新的变革与发展机遇。北京作为文化和商业的重要中心&#xff0c;拥有众多优秀的展厅设计企业。本文将对2025年北京展厅设计企业进行TOP10权威测评&#xff0c;深入探讨各企…

作者头像 李华
网站建设 2026/4/23 12:52:30

Lenovo Legion Toolkit完全指南:简单三步释放联想笔记本隐藏性能

你是否曾经为联想官方软件的臃肿和资源占用感到烦恼&#xff1f;是否想要更轻量、更高效的方式来控制你的拯救者笔记本&#xff1f;今天介绍的这款开源神器——Lenovo Legion Toolkit&#xff0c;将彻底改变你对笔记本控制工具的认知。这款轻量级的Lenovo Vantage和热键替代工具…

作者头像 李华