SSM框架组建之业务逻辑与总体架构规划

2023-10-30


       初学 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层建设优势:

  1. 实现 java 代码和 sql 的分离
  2. DAO拼接等逻辑在Service层完成

第三步:构建Service层

       Service 层叫服务层,主要实现业务逻辑上的接口和对应的实现类。该层的功能设计,要求设计者同时站在“使用者”和“开发者”的角度考虑问题,并进行业务逻辑方法的编写。允许有冗余的存在。可以说,service 层是整个 SSM框架下 java_web 项目的核心层。
       service层使用 Spring 进行托管。→ 即通过 Spring IOC 的方式进行依赖的注入。
       使用 Spring IOC 优势

  1. 对象创建的统一管理:对象的创建是由Spring 统一进行管理,而不是通过 new 的方式进行对象的创建。
  2. 规范的生命周期管理:
  3. 灵活的依赖注入:通过注解、编程、第三方依赖
  4. 一致的获取对象:都是从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 服务器。

  1. 找到 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. 局域网端口开放

       设置局域网端口开放时,有参考教程原文:https://www.cnblogs.com/arxive/p/12252076.html

  1. 打开作为服务器的电脑的网络共享
    打开 控制面板 → 网络和 Internet → 网络和共享中心 → 更改高级共享设置
    在网络发现中选择“启用网络发现”,保存设置,此时,在局域网下,别人就能通过网络访问你的电脑了。
    在这里插入图片描述
  2. 配置防火墙
    1)打开 控制面板 → 系统和安全 → Windows Defender 防火墙 → 高级设置
    在这里插入图片描述
    2)点击 “入站规则”,在“操作”栏,点击“新建规则”
    在这里插入图片描述
    3)在弹出框中选择 “端口”,点击下一步
    在这里插入图片描述
    4)选择特定端口,在输入框中输入“8080”(8080端口是默认Tomcat默认端口,如果Tomcat的默认端口被修改,则改为Tomcat对应的端口)
    在这里插入图片描述
    5)之后一路“下一步”,在最后一步时,在名称中输入“Tomcat 连接端口”。点击完成,此时可以看到,在入站规则中,多出了刚配置好的“Tomcat连接端口”。端口配置完毕,此时打开Tomcat服务器,在同一个局域网下,通过 “服务器ip:8080” 的方式即可对项目进行访问。
    在这里插入图片描述
    使用小贴士:获取本机在局域网中的 ip 可以通过命令行输入 ipconfig进行 ip 地址查询。
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSM框架组建之业务逻辑与总体架构规划 的相关文章

随机推荐

  • 关于antd的treeselect使用

    在表单中 我们可能会碰到这样的需求 比如我想将某一个物品或者资产 分配到某一个部门的员工下 那么我们需要在表单中做这样的配置 这样就会用到antd的treeselect组件 组件很好用 自带搜索框 可以大大的提高用户的可操作性 我们来看一下
  • 【CentOS安装配置Jupyter 】

    CentOS安装配置Jupyter 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 SmartyPants 创建一个自
  • 攻防世界之misc1

    攻防世界之misc1 首先这题非常的考研脚本实力 他题目没有下载文件 只有一个值 d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b
  • Nginx Upstream负责均衡的实现方案

    nginx中upstream实现负责均衡的几种方式 1 轮询 weight 1 默认选项 当weight不指定时 各服务器weight相同 每个请求按时间顺序逐一分配到不同的后端服务器 如果后端服务器down掉 能自动剔除 upstream
  • commons math用户手册翻译(一)

    翻译源址 http commons apache org proper commons math userguide index html 1 math包版本3 6 2 commons math包解决哪些问题 math包由一组数据和统计的包
  • jmavsim使用说明

    一 启动 在px4源码目录下输入 make px4 sitl jmavsim 二 基础操作 在操作界面上按F1键 会弹出操作说明 操作说明如下 按照说明可以控制飞机移动 视角控制 F 第一人称视角 S 地面固定视角 G 稳定云台视角 Z 切
  • jsp 页面选项卡

  • 使用阿里巴巴的EasyExcel操作Excel

    引入依赖
  • 使用TortoiseGit执行merge/rebase操作

    如果使用git 相信大家比较多的使用merge 对于rebase则少有陌生 相信刚使用git不久的同学会有一个困惑 经常使用merge会造成破窗效应 查阅log时会掺杂了大量无用的小提交 起初也对此习以为常 毕竟svn就是这样 使用reba
  • js中background-position 无效

    css中正确书写background position x y 坐标之间有空格 然而在写js的时候如果粗心会忘记第一个 px 后面加个空格 正确js书写应该是backgroundposi x px y px
  • Docker基本概念、linux

    Docker的基本概念 一 认识容器 1 1 容器是什么 1 2 对比容器和虚拟机 1 2 1 虚拟化的差异 1 2 2 资源利用总结 二 Docker基本概念 2 1 Docker是什么 2 2 Docker 的思想与核心 2 3 Doc
  • Qt-常用数据类型

    常用基本数据类型 类型名称 注释 备注 qint8 signed char 有符号8位数据类型 qint16 signed short 有符号16位数据类型 qint32 signed int 有符号32位数据类型 qint64 long
  • php7 发送邮件,使用PHP发送邮件的两种方法

    使用PHP发送邮件的两种方法 如何使用使用PHP发送邮件呢 想要知道的朋友 以下是为大家分享的使用PHP发送邮件的两种方法 供大家参考借鉴 欢迎浏览 一 使用PHP内置的mail 函数 看了一下手册 就直接开始写代码了 如下 to test
  • 超人气思维导图XMind新年新版本,这6个新功能你一定要看

    2018 年初 XMind公司推出了这款花了三年时间重写了每一行代码的新旗舰产品XMind ZEN 经过不断的优化和完善 终于成为了一款全平台 功能丰富的优秀思维导图软件 如今已然成为国内人气思维导图软件 噔噔噔 今年XMind ZEN正式
  • Java面向对象编程

    关于抽象类与最终类 下列说法错误的是 A 抽象类能被继承 最终类只能被实例化 B 抽象类和最终类都可以被声明使用 C 抽象类中可以没有抽象方法 最终类中可以没有最终方法 D 抽象类和最终类被继承时 方法可以被子类覆盖 答案 D 已知表达式i
  • 【wpf,C#】wpf访问连接Oracle数据库的详细过程及代码(第2种方法)

    注 之前写了一篇很详细的wpf连接Oracle的过程及代码 这一篇是另外一种方法 文件是我们自己写的 小伙伴们 亦可以完成此功能 1 添加引用文件 System Data OracleClient 如图 2 新建一个类 我这里命名为 MyO
  • 【JavaScript】(四)创建对象的7种模式

    面向对象的语言有一个标志 那就是他们都有类的概念 而通过类可以创建多个具有相同属性和方法的对象 ECMAScript的对象没有类的概念 因此它的对象也与基于类的语言对象有所不同 早期JavaScript开发人员创建类的方法是创建一个Obje
  • 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。

    题目信息 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍 你可以按任意顺序返回答案
  • 2021-2022学年度第二学期21级Java程序设计理论模拟考试

    说明 由于看pdf太难受了 重新编辑好放到博客上 方便自己复习 正确答案加粗标红 考试试卷 页码 1 4 试卷名称 2021 2022学年度第二学期21级Java程序设计理论模拟考试 3 4 6班 期末考试考试课程 Java语言程序设计 考
  • SSM框架组建之业务逻辑与总体架构规划

    SSM框架组建之总体架构规划与项目发布 第一步 项目整体逻辑设计 第二步 DAO层框架构建 第三步 构建Service层 第四步 web 层设计 第五步 SSM 项目的打包与发布 win10 从 Tomcat 服务器到局域网 1 Tomca