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框架的理解的更多相关文章

  1. java web后台开发SSM框架(Spring+SpringMVC+MyBaitis)搭建与优化

    一.ssm框架搭建 1.1创建项目 新建项目后规划好各层的包. 1.2导入包 搭建SSM框架所需包百度云链接:http://pan.baidu.com/s/1cvKjL0 1.3整合spring与my ...

  2. 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架

    自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...

  3. Eclipse使用Maven创建Web项目+整合SSM框架

    一.准备环境: maven:apache-maven-3.2.3 jdk:jdk1.8.0_25 tomcat:tomcat-9.0 二.配置Maven.jdk 1.Window——>Prefe ...

  4. Java Web学习总结(28)——Java Web项目MVC开源框架SSH和SSM比较

    SSH和SSM定义 SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层. SSM 则指的是 SpringMVC 做控制 ...

  5. MyBatis整合Spring+SpringMVC搭建一个web项目(SSM框架)

    本文讲解如何搭建一个SSM架构的web站点 [工具] IDEA.SqlYog.Maven [简述] 该项目由3个模块组成:dao(数据访问层).service(业务处理层).web(表现层) dao层 ...

  6. 使用myeclipse为java web项目添加SSH框架

    添加SSH框架时,要严格按照先Struts,再Spring,最后Hibernate.添加方法见下方: 第一步:添加Struts框架 请按照图示一步步认真执行,配置好struts才可以进行下一步 第二步 ...

  7. java web 自定义的权限框架

    权限框架2部分 1.认证  (通常指登录) 2.授权   (指用户访问改页面是否有权限) 设计:

  8. JAVA WEB SpringMVC+Spring+hibernate 框架搭建【转】

    http://my.oschina.net/Thinkeryjgfn/blog/158951

  9. [原创]java WEB学习笔记27:深入理解面向接口编程

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. 使用PHP-Beast加密你的PHP源代码

    PHP-Beast是一个PHP源码加密的模块,其使用DES算法加密,用户可以自定义加密的key来加密源代码. 1. PHP-Beast的安装 $ wget https://github.com/lie ...

  2. Codeforce-CodeCraft-20 (Div. 2)-A. Grade Allocation

    n students are taking an exam. The highest possible score at this exam is m. Let ai be the score of ...

  3. 数学--数论--HDU 1299 +POJ 2917 Diophantus of Alexandria (因子个数函数+公式推导)

    Diophantus of Alexandria was an egypt mathematician living in Alexandria. He was one of the first ma ...

  4. 图论--2-SAT--Tarjan连通分量+拓扑排序O(N+M)模板

    #include <cstdio> #include <cstring> #include <queue> #include <vector> #inc ...

  5. bzoj 4152[AMPPZ2014]The Captain

    bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. ...

  6. 两个命令把 Vim 打造成 Python IDE

    运行下面两个命令,即可把 Vim(含插件)配置成 Python IDE.目前支持 MAC 和 Ubuntu. Shell   curl -O https://raw.githubusercontent ...

  7. python的with

    with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源. 比如文件使用后自动关闭.线程中锁的自动获取和释放等. with open('test.t ...

  8. html之表单元素form

    表单元素form \(都是嵌套input标签来实现,其中type属性选择不同则不同\) \(text:文本内容(输入内容可见)\) \(password:密码(输入内容不可见)\) \(submit: ...

  9. 201771010113 李婷华 《面向对象程序设计(Java)》第十一周总结

    一.理论知识部分 第九章  集合 1.数据结构介绍: 线性结构:线性表,栈,队列,串,数组,文件.非线性结构:树,图. 散列表:又称为哈希表. 散列表算法的基本思想是:以结点的关键字为自变量,通过一定 ...

  10. leetcode240——搜索二维矩阵(medium)

    一.题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ...