SSM框架组建之总体架构规划与项目发布
- 第一步:项目整体逻辑设计
- 第二步:DAO层框架构建
- 第三步:构建Service层
- 第四步:web 层设计
- 第五步:SSM 项目的打包与发布(win10 从 Tomcat 服务器到局域网)
- 1. Tomcat 项目部署
- 2. 局域网端口开放
初学 SSM 框架,自己总结了点框架构建的流程以及相关要点。不足之处还请大佬批评指正。
第一步:项目整体逻辑设计
项目开始的第一步,是要明白自己的项目都要干些什么事,需要实现哪些功能,以及如何实现这些功能。同时,要对项目进行严格的分层管理。分层管理即对同一类功能模块的代码进行整合,能够在一定程度上加速代码的编写效率。
话不多说,先放上一张我建立的项目总体框架:
project
│ pom.xml —— maven配置文件,第一个写,包含项目所需的各种依赖
│ 具体配置参考E:\Java\java-workspace\project\pom.xml
│ 一般网页出现500就是配置文件出问题
│
├─src
│ ├─main
│ │ ├─java —— .java文件存放
│ │ │ ├─dao —— DAO接口存放 --用于对接数据库的业务功能接口
│ │ │ │ *.java —— DAO接口,命名习惯:实体类名+Dao.java
│ │ │ │
│ │ │ ├─dto —— DTO类存放 --用于设计模式之间传输数据格式等
│ │ │ │ *.java —— DTO类
│ │ │ │
│ │ │ │
│ │ │ ├─entity —— 实体类对象存放 --执行对业务的封装
│ │ │ │ *.java —— DAO接口对应的实体类
│ │ │ │
│ │ │ ├─enums —— 枚举字典存放 --存放一系列规定好的状态,方便后期维护、提高代码的可读性
│ │ │ │ *.java —— 枚举类 ,定义固定且数据量小的状态
│ │ │ │
│ │ │ ├─exception —— 异常抛出类文件存放
│ │ │ │ *.java —— 定义可能出现的运行异常
│ │ │ │
│ │ │ ├─service —— spring的service层业务功能文件存放
│ │ │ │ │ *.java —— service层业务功能接口定义
│ │ │ │ │
│ │ │ │ └─impl —— service层接口实现类文件存放
│ │ │ │ *.java —— service层接口实现类,命名习惯:接口名+Impl.java
│ │ │ │
│ │ │ └─web —— SpringMVC控制层文件存放,用以控制表现层(web)端动作
│ │ │ *.java —— SpringMVC控制层文件
│ │ │
│ │ ├─resources —— 存放 .xml文件,即MyBatis和spring的路径依赖
│ │ │ │ jdbc.properties —— 数据库相关配置,在spring-dao.xml文件中作为导入
│ │ │ │ logback.xml —— 定义控制台日志文件输出格式
│ │ │ │ mybatis-config.xml —— MyBatis的全局属性配置
│ │ │ │
│ │ │ ├─mapper —— 基于 MyBatis 的 DAO 接口映射实现,存放mapper依赖
│ │ │ │ *.xml 命名规范 mapper 对应的 DAO 映射是什么,命名就是对应接口名 + .xml
│ │ │ │
│ │ │ └─spring —— 存放 spring 相关配置
│ │ │ spring-dao.xml —— 配置 spring,整合 MyBatis
│ │ │ spring-service.xml —— 配置 spring-IOC , 服务层
│ │ │ spring-web.xml —— 配置 SpringMVC
│ │ │
│ │ ├─sql —— sql 文件存放
│ │ │ *.sql
│ │ │
│ │ └─webapp —— java_web 配置
│ │ │ index.jsp —— 默认首页
│ │ │ *.jsp —— 分支网页
│ │ │
│ │ ├─resources —— 插件路径存放 js/css/json/image...
│ │ │
│ │ ├─META-INF
│ │ │ MANIFEST.MF
│ │ │
│ │ └─WEB-INF
│ │ │ web.xml —— web项目配置文件,注意,在创建maven项目时,
│ │ │ 默认的web.xml无法使用,想要简单调用需
│ │ │ 将其修改为 Tomcat 中的样例 web.xml
│ │ │
│ │ ├─jsp —— 分支网页存放,包含业务功能网页不被直接访问
│ │ │ │ *.jsp —— 业务分支网页
│ │ │ │
│ │ │ └─common —— 公共包含索引,减少代码的重写量
│ │ │ *.jsp —— 页面模板等设计存放,以 jsp 引入的方式进行导入
│ │ │
│ │ └─lib —— 存放 web 端的 jar 包导入
│ │
│ └─test —— 单元和集成测试代码
│ ├─java ——对应 main/java 的测试代码存放
│ └─resources —— 对应 main/resources 的路径映射
└─target
*(projectName).war —— 用于发布到本地部署的Tomcat服务器
附上该树状结构图绘制方法 :打开命令行,利用cd
命令找到想要生成树状图的文件夹,在对应的目录下输入命令: tree /f >tree.txt
即可在对应的文件夹下找到生成的 tree.txt
第二步:DAO层框架构建
DAO(data access object)层叫数据访问层。负责实现 java 项目工程和数据库之间的连接。所有对数据库进行的操作,都是在该层中进行功能实现。在 SSM 框架中,使用 MyBatis 和 Spring 进行管理。该层主要的工作是进行DAO接口的设计与实现, entity(实体)类的编写与 sql 语句的编写。
DAO层建设优势:
- 实现 java 代码和 sql 的分离
- DAO拼接等逻辑在Service层完成
第三步:构建Service层
Service 层叫服务层,主要实现业务逻辑上的接口和对应的实现类。该层的功能设计,要求设计者同时站在“使用者”和“开发者”的角度考虑问题,并进行业务逻辑方法的编写。允许有冗余的存在。可以说,service 层是整个 SSM框架下 java_web 项目的核心层。
service层使用 Spring 进行托管。→ 即通过 Spring IOC 的方式进行依赖的注入。
使用 Spring IOC 优势:
- 对象创建的统一管理:对象的创建是由Spring 统一进行管理,而不是通过 new 的方式进行对象的创建。
- 规范的生命周期管理:
- 灵活的依赖注入:通过注解、编程、第三方依赖
- 一致的获取对象:都是从IOC容器中获取实例对象
Spring-IOC 注入方式中,最常用的是XML和注解,其中XML主要针对第三方库的调用,注解主要针对自身项目开发中的使用类。
Service 声明式事务:目的,解脱事务代码,实际开发时不关心事务什么时候开启、关闭、回滚等事务操作。
事务方法嵌套:声明式事务的独有概念:传播行为 →(默认)propagation_required:当有新的事务加入时,如果有就加入到原有的事务行列中,如果没有,就创建一个新的事务。
使用注解控制事务方法的优点:
- 有利于开发团队达成一致的约定,明确标注事务方法的编程风格
- 保证事务方法的执行时间尽可能短,不要穿插其他网络操作。如果必要,则将请求剥离到方法外部,事务方法中只有数据库相关操作。RPC / HTTP请求 → 对高并发、流程很不友好
- 不是所有的方法都需要事务,如只有一条修改操作,只读操作不需要事务控制
service 层 组件注解含义:
注解名 | 用途解释 |
@Component | 通用组件代表所有组件,当不知道该java类具体属于dao, service,conroller等时使用。统称spring组件实例 |
@Controller | web 页面控制组件,作用于表现层(spring-mvc的注解) |
@Service | 服务层控制,作用于业务逻辑层 |
@Autowired | 对类成员变量、方法及构造函数进行标注,完成自动装配工作 |
注意:编译期异常与运行期异常区别:
- 运行期异常抛出时,系统会自动进行回滚(rowback),系统不会停止运行;
- 编译期异常抛出时,系统不会进行回滚操作,直接报错并停止运行。
注意事项:在代码编写阶段,当 DAO 层的接口设计完毕,service层的逻辑代码实现完毕后,必须对其进行功能测试,防止出现功能错误。
第四步:web 层设计
web 层的设计主要考虑 controller(控制功能)的实现。该层的主要功能在于连接系统后端与web。因此,该层主要面向 SpringMVC 控制类的编写。
需要考虑的要点在于:
1、前端交互设计(页面如何交互及交互细节)
2、Restful :URL设计规范(互联网公司常用规范)—— Restful的本质是URL表达方式,是一种资源的状态和状态的转移
3、SpringMVC:MVC框架核心,如何配置,实现 restful 接口
4、web端页面设计 —— bootstrap + jquery:页面布局 + 样式 + 交互
5、URL设计: /模块 / 资源 / {标示} / 集合/ ...
Restful规范:
Restful 方法 | 具体解释 |
GET | 查询操作,可以不断执行 |
POST | 添加/修改操作 |
PUT | 修改操作 (与POST没有太明显的区别) |
DELETE | 删除操作 |
@RequestMapping注解(SpringMVC使用):
1、支持标准的URL
2、支持Ant风格URL[ 匹配一个字符(?),匹配任意字符(*),匹配任意url路径(**) ]
3、{xxx}占位符URL
4、参数含义:
value/path : 指定请求的实际地址,指定的地址可以是 URI Template 模式
method : 指定接受请求的类型,GET、POST、PUT、DELETE 等
consumes : 指定处理请求的提交内容类型(Content-Type),如 application/json,text/html;
produces : 指定返回的内容类型 —— 在传递 json 数据时建议使用。ex: produces = {"application/json;charset=UTF-8"}) // 告诉浏览器 content type:指明json,指定charset,防止乱码
其中,当返回值为 json 时,需要在方法函数前使用 @ResponseBody
注解,用来告诉服务器,将该方法返回的数据类型封装为 json 类型。
web页面存放路径:在webapp/WEB-INF下创建 package 用以存放 jsp / HTML—— 优势:将功能界面进行隐藏,能够不被浏览器通过url地址直接访问到,从而达到保护网页信息的效果。
第五步:SSM 项目的打包与发布(win10 从 Tomcat 服务器到局域网)
1. Tomcat 项目部署
查找过挺多项目搭建的教程,教程通常都是以项目能在开发环境中完整运行为结束。并没有讲怎么进行项目的打包与发布,这里我总结了下自己的项目发布经验。我是用的是 Tomcat 服务器。
- 找到 target 文件夹下生成的 *.war 文件,将其复制到 Tomcat 的 webapps 文件夹下
如果没找到 *.war 文件,可以利用 maven 工具中的 war 进行项目打包,双击
2. 清空work文件夹,执行 bin 文件夹中的 startup.bat(window操作系统) / startup.sh(Linus操作系统)进行服务器启动。shotdowm.bat / shotdown.sh 关闭服务器。打开 webapps 文件夹,Tomcat 中自动将 war 文件解压完毕。
此时,打开浏览器,输入127.0.0.1:8080/[projectName]
就可打开项目。如果想通过127.0.0.1:8080
打开项目,则需将对应文件夹中的文件复制到 ROOT 文件夹中。解压后如下图所示。
此时,项目部署到 Tomcat 完毕。
注意事项:将项目由开发环境转为Tomcat服务器部署环境时,需要考虑 url 的链接控制地址应与开发环境中保持一致,不然会报 500 资源映射不存在,找不到对应的后端服务器地址的错误。
2. 局域网端口开放
设置局域网端口开放时,有参考教程原文:
- 打开作为服务器的电脑的网络共享
打开 控制面板 → 网络和 Internet → 网络和共享中心 → 更改高级共享设置
在网络发现中选择“启用网络发现”,保存设置,此时,在局域网下,别人就能通过网络访问你的电脑了。 - 配置防火墙
1)打开 控制面板 → 系统和安全 → Windows Defender 防火墙 → 高级设置
2)点击 “入站规则”,在“操作”栏,点击“新建规则”
3)在弹出框中选择 “端口”,点击下一步
4)选择特定端口,在输入框中输入“8080”(8080端口是默认Tomcat默认端口,如果Tomcat的默认端口被修改,则改为Tomcat对应的端口)
5)之后一路“下一步”,在最后一步时,在名称中输入“Tomcat 连接端口”。点击完成,此时可以看到,在入站规则中,多出了刚配置好的“Tomcat连接端口”。端口配置完毕,此时打开Tomcat服务器,在同一个局域网下,通过 “服务器ip:8080” 的方式即可对项目进行访问。
使用小贴士:获取本机在局域网中的 ip 可以通过命令行输入ipconfig
进行 ip 地址查询。