MVC的设计模式在JavaWeb中的实现

JSP开发模式

jsp开发模式的发展

1.模式1:(适合小型项目的技术的开发)

a.第一版本,纯jsp(封装数据,处理数据,显示数据)

b.第二版本,Jsp+JavaBean.

jsp:收集数据,显示数据

JavaBean:封装、处理

2.模式2:servlet+Jsp+JavaBean(是mvc在java中的具体的实现,是java技术实现的具体的内容)

a.servlet:负责协调jsp和javabean,获得数据,处理数据(业务逻辑),封装到javabean中,选择jsp去显示数据。

b.jsp:显示

c.JavaBean:封装和简单处理

思想:业务处理与显示数据相分离。

软件设计模式

1.MVC软件设计模式(和java无关)

是一种分离业务逻辑和显示界面的设计方法。

M:model模型

V:view视图

C:Controller控制器

2.对于javaweb开发的mvc模式:

servlet(controller)+jsp(view)+javabean(model)

那么经典的三册架构的体系图如下:

达到这种经典的三层架构以后,javaweb的架构已经很不错了,但是从软件工程角度分析,上述架构还是存在问题。

那么看一下上述架构的使用。

在中心的黄色部分:也就是服务端部分,层与层之间的调用关系。

举一个例子:

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.那么上述代码之间的层与层之间的关系就很紧密。

是违背了软件工程的设计思想的。

软件工程要求,模块与模块之间的耦合式越低越好。一句经典的软件工程设计的话是这样的。

“高内聚,低耦合”。

同时上述的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.

补充:在javaweb项目的基于MVC软件设计模式,一般会进行如下分包结构:

使用分包描述结构

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中的实现

时间: 2024-10-25 06:27:51

MVC的设计模式在JavaWeb中的实现的相关文章

个人对JavaWeb中MVC与三层架构的区别理解

JavaWeb中MVC是指B/S结构开发中的一种设计模式,能够将Web页面与业务逻辑以及数据库操作之间的耦合性降到最低点,易于代码的重用以及后期维护.而三层架构的概念在JavaWeb中则是指Web层,业务层,数据层.但三层架构中却是把MVC中的Model,也就是JavaBeans分成业务层和数据层,而把Controller控制器以及View视图合并成Web层.二者之间最大的区别在于MVC只限于JavaWeb,而三层架构则能够实现在非Web应用平台之上,只需替换掉Web层足以,而业务层与数据层依旧

MVC设计模式在网站中的应用

MVC设计模式在网站中的应用 以淘宝的购物车为例 一.结合六个基本质量属性 可修改性 采用MVC设计模式的时候,可以将视图.模型.控制器分析,将用户动作.数据表示.应用数据分离开来,如果用户需要以不同的视图来展示,只需要修改视图中的代码即可,对于模型和控制器的代码,则不需要做改动,即可满足要求,使得对代码的修改非常方便. 易用性 用户可以直接在商品展示界面中将商品添加进购物车,直接点开购物车就可以看到已经添加的商品:删除某一件商品时,也可以直接在商品的后面点击删除,确认之后,即可删除. 安全性

iOS中MVC等设计模式详解

iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计模式是被大家广为熟悉和使用的模式,实际上在移动开发中尤其ios开发中,这种模式被发挥到淋漓尽致 MVC设计模式包括三个部分:模型.视图和控制器. 模型包含数据.信息,逻辑,或对象被认为是部分的业务层的iOS应用. 视图包含所有的用户信息的组件,如文本区域,按钮,滑块,被认为是表示层的一个iOS应用.

JavaWeb中的MVC 下

代码较多,请先略过代码,看懂逻辑在研究代码 引入 回顾上一节中的项目,最终的层次结构: 在MVC上中,我们分析了MVC设计模式具备的优点,以及不足,并在其基础上增了Service层用于处理业务逻辑,但是这还没完,对于大型项目来说,程序结构依然是不够清晰的,Service层不仅要处理业务逻辑,还要处理数据库操作;依然存在以下问题: 耦合度高 代码复用性差 Service层的功能职责不单一 DAO 为了解决这些问题,需要将Service层进一步的解耦,如何做到呢,通过增加数据访问层DAO即可实现;

MVC框架模式和Javaweb经典三层架构

一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC.它是一种软件设计的典范,最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式. 2.MVC的详解 虽然MVC并不是Java当中独有的,但是现在几乎所有的B/S的架构都

javaWeb中的文件上传下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

javaweb中静态文件的处理方法

方案一:激活Tomcat的defaultServlet来处理静态文件 在web.xml中添加: <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-

设计模式在项目中的应用

简单工厂设计模式在项目中应用 项目使用场景:根据不同的厂家,有不同的报表打印形式,而对于报表的打印他们有公共的部分,打印报表头.打印底部.和打印中间部分. 我们可以使用简单工厂模式,抽象出打印报表的接口,不同的厂家实现不同的打印接口. 单例模式在项目中应用 场景1:在DOM读取配置文件的时候,因为经常被用到这个类,我们可以设置一个全局类,不用每次都new那么多的类,节省资源消耗. 场景2:在spring的IOC依赖注入的时候,默认的是采用单例模式,例如controller层中一个类通过注入方式使

Asp.net mvc web api 在项目中的实际应用

Asp.net mvc web api 在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而web api在数据传输方面有多种实现方式,具体可根据实际情况而定! 1:数据传输前的加密,以下用到 微软自带的 Rijndael 类(关于Rijndael 的更多信息请参见MSDN),32位密钥加16对称算法初始化向量,代码如下: //简单定义一个实体类: public class User { public int Id { get; set; } public string Name { g