关于Java Web结构和SSM框架的理解
Java Web常见的三层结构
表现层:也就是Web层,常见的框架有Spring MVC、Struts2 ,并包括用于展示的界面,如JSP界面;
业务层:Service层,专注于业务逻辑的实现;
持久层:也叫Dao层,常见的框架是Hibernate、MyBatis。负责与数据库的交互,封装数据库的访问细节;从数据库表中读取加载数据并实例化领域对象(Domian Object)也就是从数据库中读取数据,或者返过来将领域对象实例化到数据库中,也就是将数据写入到数据库中。
当服务器接受到来时浏览器的请求后,web层首先开始工作,根据不同的请求创建相应的servlet对请求进行处理转发,业务层在收到来自web层的信息之后,调用持久层,持久层访问数据库后得到返回结果,经过业务层将返回结果填充到显示界面中(JSP中),web层将Jsp界面作为浏览器请求的响应结果返回到浏览器。
工作流程图如下所示:(引用他处图片,侵删)
三层结构在SSM框架中的体现
在用Java开发互联网应用时,SSM框架(Spring + Spring MVC + MyBatis)成为了越来越主流的选择。
在轻量级的开发中,常对Web应用分成以下几层:
POJO层: 由一组POJO组成,是对系统各种对象的抽象表达。
DAO层: 负责数据库的访问,增、删、改、查等,在MyBatis框架中也常被定义为Mapper层。
Service层:由业务逻辑对象组成,是不同系统的业务逻辑的具体实现。
Controller层:由控制器组成,对来自浏览器的用户请求进行拦截,并调用Service层的响应的业务逻辑组件处理用户请求,并转发返回结果到View层。
View层:由JSP界面,PDF文档等组件组成,用于显示系统对用户请求的处理结果。
因此,在常见的轻量级Java Web开发中,通常会将项目建立成如下的结构:
其中SSM框架经常把dao包命名为mapper包,并将mybatis框架的xxxMapper.java和xxxMapper.xml文件放到此包中
- Java 代码源文件中几个包的作用
DAO: 里面可以是数据库操作,也可以是文件读写操作,甚至是redis缓存操作。也有人叫做数据持久层。因为Mybatis可以直接在配置文件中实现接口的每个方法,所以不需要DAOImpl。
DTO:刚学框架的人可能不明白这个有什么用,其实就是用于service层与web层之间传输,为什么不直接用entity(pojo)?
其实在实际开发中发现,很多时间一个entity并不能满足我们的业务需求,可能呈现给用户的信息十分之多;或者一个 Entity 包含的信息过多,
我们需要的信息仅仅是Entity的一部分,为了减少网络传输,这时候就有了dto。 一般我们使用DTO类来继承entity实体类,在DTO类里放一些业务字段,
并提供get、set方法。当我们在业务逻辑层或者交互层用到一些数据库中不存在的字段时,我们就需要在DTO类里放这些字段,这些字段的意义就相当于一些
经处理过的数据库字段,实质意义就是方便数据交互,提高效率。
Entity:一般与数据库的表相对应,封装dao层取出来的数据为一个对象,也就是我们常说的pojo,一般只在dao层与service层之间传输
可选的额外包:
Exception:自定义异常。 Utils,即utility,工具辅助层,一组通用的代码集合,比如处理多语言功能,网站非法信息过滤等等功能的代码集;
resource:存放后端配置文件
webapp:前端页面与配置文件:
存放jsp、css等静态文件,web.xml 配置文件主要包含:
配置 Spring 需要加载的配置文件、启用 disapatcher 转发处理所有的请求、指定编码格式
关于几个包之间的关系
controller 包是 Spring MVC 的主要文件,其中对来自浏览器的各种请求进行转发和处理。在 controller 中会内置各种 Service 包中的对象,当接收到新的请求的时候,解析 url ,根据注解调用相应的服务来完成请求。
entity 包常常与数据库中的表一一对应,dao 包中定义了数据库的基本操作,并在 mapper 包中的 xml 配置文件中完成数据操作的具体实现(也就是增、删、改、查)。Mybatis 可以实现 dao 与 .xml 的自动匹配,这时候就需要把 xxxMapper.xml 和 xxxMapper.java 放在同一个包内。
在 Service 包中定义了各种服务的接口,然后在 Service-Impl 包中对接口进行实现,在实现接口的时候会内置一个 DAO 包中的对象(因为 web 服务的实现肯定是涉及到数据访问的,而数据访问被抽象成了 DAO 包中的对象,所以服务的实现必须借助 DAO 包),然后我们借助 DAO 中的对象所实现的各种数据访问处理方法来实现具体的服务。
SSM框架中各框架的作用
MyBatis:持久层框架,负责数据库访问。
Spring MVC:表现层框架,把模型、视图、控制器分离,组合成一个灵活的系统。
Spring: 整合项目的所有框架,管理各种Java Bean(mapper、service、controller),事务控制。
关于Java Web结构和SSM框架的理解的更多相关文章
- java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化
一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...
- 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- Eclipse使用Maven创建Web项目+整合SSM框架
一.准备环境: maven:apache-maven-3.2.3 jdk:jdk1.8.0_25 tomcat:tomcat-9.0 二.配置Maven.jdk 1.Window——>Prefe ...
- Java Web学习总结(28)——Java Web项目MVC开源框架SSH和SSM比较
SSH和SSM定义 SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringMVC 做控制 ...
- MyBatis整合Spring+SpringMVC搭建一个web项目(SSM框架)
本文讲解如何搭建一个SSM架构的web站点 [工具] IDEA.SqlYog.Maven [简述] 该项目由3个模块组成:dao(数据访问层).service(业务处理层).web(表现层) dao层 ...
- 使用myeclipse为java web项目添加SSH框架
添加SSH框架时,要严格按照先Struts,再Spring,最后Hibernate.添加方法见下方: 第一步:添加Struts框架 请按照图示一步步认真执行,配置好struts才可以进行下一步 第二步 ...
- java web 自定义的权限框架
权限框架2部分 1.认证 (通常指登录) 2.授权 (指用户访问改页面是否有权限) 设计:
- JAVA WEB SpringMVC+Spring+hibernate 框架搭建【转】
http://my.oschina.net/Thinkeryjgfn/blog/158951
- [原创]java WEB学习笔记27:深入理解面向接口编程
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- 加分二叉树 vijos1991 NOIP2003第三题 区间DP/树形DP/记忆化搜索
描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一 ...
- puppet报告系统Dashboard部署及配置详解
Puppet Dasshboard是由支持Puppet开发的公司Puppetlabs创建的,是Ruby on Rails程序.可以作为一个ENC(外部节点分类器)以及一个报告工具,并且正在逐渐成为一个 ...
- Nginx访问日志.Nginx日志切割
11月27日任务 12.10 Nginx访问日志12.11 Nginx日志切割12.12 静态文件不记录日志和过期时间 1.Nginx访问日志 示例一: 日志格式 vim /usr/local/ngi ...
- 算法竞赛进阶指南--hamilton路径
// hamilton路径 int f[1 << 20][20]; int hamilton(int n, int weight[20][20]) { memset(f, 0x3f, si ...
- 数学--数论--POJ281(线性同余方程)
埃琳娜(Elina)正在阅读刘如家(Rujia Liu)写的书,其中介绍了一种表达非负整数的奇怪方法.方式描述如下: 选择k个不同的正整数a 1,a 2,-,a k.对于一些非负米,把它由每一个我(1 ...
- 深度优先搜索理论基础与实践(java)
概论 深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为 DFS 即 Depth First Search.深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓 ...
- Prometheus monitor RabbitMQ
Install docker-compose sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2 ...
- E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)
E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或 ...
- Blazor入门:ASP.NET Core Razor 组件
目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...
- 初探numpy
安装numpy 通过python pip安装numpy pip install numpy numpy ndarray对象 创建ndarray对象只需调用numpy的array函数即可 numpy.a ...