MVC设计模式JavaWeb实现
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHlta2luZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
servlet(controller)+jsp(view)+javabean(model)
那么经典的三冊架构的体系图例如以下:
那么看一下上述架构的使用。
在中心的黄色部分:也就是服务端部分。层与层之间的调用关系。
举一个样例:
web层:UserServlet.java类
service层:UserService类
dao层:UserDao类
javaBean:user
那么层与层之间的调用关系就该是这样:
在UserServlet.java中调用UserService。
那么调用的方式仅仅能是在UserServlet类中去创建UserService的对象。
例如以下:
class UserServlet{
UserServcie userService=new UserService();
//调用userService的相关方法进行业务逻辑的操作
。
。。
。
}
同理:UserService调用UserDao的时候,也有类似上述的代码。
有上述的分析得出结论1:
1.那么上述代码之间的层与层之间的关系就非常紧密。
是违背了软件project的设计思想的。
软件project要求,模块与模块之间的耦合式越低越好。一句经典的软件project设计的话是这种。
“高内聚。低耦合”。
同一时候上述的dao层,我们看一下既有对xml的操作,也有对db的操作,甚至还有很多其它。
得出了结论2:
2.上述架构。同一时候违背了“高内聚。低耦合”中的高内聚的思想。
于是上面的架构体系又有了例如以下的增进:
对于上述的架构图进行分析:
看service层。dao层
1.解决dao层的内聚问题,把xmlDao和dbDao进行分离。
2.对dao层抽取一个共性的接口出来。Dao接口
分析:之前的架构中,service层调用dao层是这种。
UserService中须要写这种代码:XmlDao xmlDao=new XmlDao()//此时没有接口
加上接口以后,Dao dao=new XmlDao();
3.加入工厂
上面的写法变成:Dao dao=Factory.getXmlDao();
那么工厂怎样调用dao层的相关方法呢?假设直接调用,出现的结果是尽管攻克了service层和dao层之间的耦合关系,可是事实上仅仅只是演变
成了工厂和dao层之间的高耦合。
那么增加了xml技术,工厂通过读取xml文件。然后利用java的反射,去创建所需创建的对象就ok了。
而在xml中仅仅要提供了类的全路径。然后做相关配置,目的是方便工厂去读取xml文件去创建对象。
4.加入配置文件。
配置文件不过字符串。和dao层之间没有耦合关系。
总结:对于第三种架构(高内聚。低耦合),便于维护,便于扩展。
为什么便于扩展,举个样例:比方。dao层中。又有了新的持久化技术,service层实际上无所知道不知道。仅仅要改动配置文件。
工厂就会去有
对应的操作。这样一来,是不是便于维护和扩展。
上面了。我们看了service层。dao层,通过接口,工厂类,配置文件的方式实现了解耦。
同理,web层,service层也能够通过同样的方式的进行解耦。
在上图中没有全然体现。
随着技术的发展。出现了非常多mvc的框架比方struts+spring+hibernate/springMvc.
在刚出现这些框架的时候,基本上都是通过上述方式进行解耦。
用过框架的人都知道,框架多基于配置文件,反射原理,内省等。
再发展了现在,搞架构的那些人,认为。写配置文件也非常费劲。就有了现在的基于注解模式的框架设计。
可是。上述的架构思想,和演变过程,是后期框架技术的源头哦。
后期,我也会对JavaWeb项目开发过程的框架技术结合MVC设计模式做更深入的分析。
通常javaweb+框架技术的开发,被人们称
作java企业级开发。
也就比較的流行的J2EE/JAVAEE.
使用分包描写叙述结构
com.ghsy ,公司域名倒写(安徽安庆高恒塑业有限责任公司)
com.ghsy.项目名称
com.ghsy.项目名称.dao
dao接口
com.ghsy.项目名称.dao.impl
dao实现类
com.ghsy.项目名称.service
service接口
com.ghsy.项目名称.service.impl
service实现类
com.ghsy.项目名称.web.servlet
servlet处理类
com.ghsy.项目名称.web.filter
过滤器处理类
com.ghsy.项目名称.web.listener
监听器处理类
com.ghsy.项目名称.domain
javabean 封装数据(bean)
com.ghsy.项目名称.utils
工具类
com.ghsy.项目名称.exception
自己定义异常
com.ghsy.项目名称.constant
java常量 Xxx.NAME
/WEB-INF/ jsp页面,安全
* 使以请求转发显示器jsp页
版权声明:本文博主原创文章。博客,未经同意不得转载。
MVC设计模式JavaWeb实现的更多相关文章
- 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...
- javaweb三大框架和MVC设计模式
javaweb三大框架和MVC设计模式 转载,原文请见https://blog.csdn.net/sunpeng19960715/article/details/50890705 一.MVC设计模式 ...
- JavaWeb笔记——MVC设计模式和JavaWeb经典三层架
1 MVC设计模式 MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(C ...
- 转载 javaweb三大框架和MVC设计模式 (自己加拉些内容)
javaweb三大框架和MVC设计模式 一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基 ...
- IT兄弟连 JavaWeb教程 MVC设计模式
MVC是Model-View-Controller的简称,即模型-视图-控制器.MVC是一种设计模式,它强制性地把应用程序的数据展示.数据处理和流程控制分开.MVC把应用程序分成3个核心模块:模型.视 ...
- MVC设计模式与JavaWEB三层架构
一.MVC设计模式 MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controlle ...
- Javaweb MVC设计模式
Javaweb MVC设计模式 一.Java EE开发流程 二.MVC设计模式 什么是MVC? MVC是Model-View-Controller的简称,即模型-视图-控制器. MVC是一种设计模式, ...
- 浅谈javaweb三大框架和MVC设计模式
一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...
- MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)
设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...
随机推荐
- 用C++写一个简单的订阅者
打开一个终端,进入到beginner_tutorials包下面: cd ~/catkin_ws/src/beginner_tutorials 建立文件src/listener.cpp: vim src ...
- Hadoop基础概念介绍
基于YARN的配置信息, 参见: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ hadoop入门 - 基础概念 ...
- linux杂记(六)档案权限
[KANO@kelvin ~]$ ls -al 总用量 drwx------. KANO KANO 10月 : . drwxr-xr-x. root root 9月 : .. drwxrwxr-x. ...
- bzoj 1303: [CQOI2009]中位数图
题目链接 给n个数,一个值b, 统计所有以b为中位数的序列的个数.序列长度为奇数.数字在1-n之间, 每个数只出现一次. 如果一个数大于b, 那么将他赋值为1, 小于b赋值为-1, 记录数组中b出现的 ...
- 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法
未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中加载类型“ ...
- Android倒计时Button
最近做用户绑定,需要用到倒计时的一个Button,就花点时间封装了一个,非常简单,效果图如下: 1.TimeButton 自定义倒计时Button package com.example.timebu ...
- Spring jdbctemplate学习笔记
/*List<?> config = getDB(" select t.datavalue from sys_config t where t.configid = '15' & ...
- HBase ElasticSearch
http://www.open-open.com/doc/view/c2af706064f84e128d0f74826523a1ea http://www.open-open.com/doc/view ...
- thrift之初体验
hrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, ...
- [置顶] 【GBT28181开发:SIP协议实践】之设备远程启动
下面学习的是设备远程控制的流程,和设备信息.设备目录.设备状态的流程差不多,主要是描述的协议字段不同,模拟SPVMN系统向源设备发送远程启动控制指令,记录下交互的消息,详细研究了下: 转载请注明出处: ...