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. 一维滑动窗口(SlidingWindow)

    滑动窗口(Sliding Window)问题经常使用快慢指针(slow, fast pointer)[0, slow) 的区域为滑动窗口已经探索过的区域[slow, fast]的区域为滑动窗口正在探索 ...

  2. Centos7网络配置( 网关、dns、ip地址配置)

    0.前提:设置VMware的虚拟网络编辑器 子网和网关设置   虚拟网络编辑器 1.配置DNS(可忽略) $vim /etc/resolv.conf nameserver 192.168.0.1 2. ...

  3. C++条件分支结构

    一.对于近期学习知识点的摘要: 1. 从第一个.cpp文件谈起, #include<iostream> //头文件 using namespace std; //使用命名空间,namesp ...

  4. Eclipse 全部快捷一览表(具TM全)

    1. 编辑快捷键 编辑快捷键 介绍 psvm + Tab 生成main方法 sout + tab 生成输出语句 Ctrl+X / Ctrl + Y 删除一行 Ctrl+D 复制一行 Ctrl+/ 或 ...

  5. 图论--2-SAT--poj 3678-Katu Puzzle(模板题)

    Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...

  6. 疯子的算法总结10--最小生成树Kruscal

    按照权值排序可得,就有如下顺序: 1. 1-2 1 2. 1-4 2 3. 1-5 2 4. 2-5 3 5. 2-3 4 6. 4-5 4 每次选取最小边泉,判断是否同属一个集合,如果不属于同一集合 ...

  7. P3807【模板】卢卡斯定理

    题解大部分都是递归实现的,给出一种非递归的形式 话说上课老师讲的时候没给代码,然后自己些就写成了这样 对于质数\(p\)给出卢卡斯定理: \[\tbinom{n}{m}=\tbinom{n \bmod ...

  8. python的with

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

  9. B. Math Show 暴力 C - Four Segments

    B. Math Show 这个题目直接暴力,还是有点难想,我没有想出来,有点思维. #include <cstdio> #include <cstdlib> #include ...

  10. ssm整合后打印日志查看执行sql语句

    mybatis.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configura ...