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的架构已经非常不错了,可是从软件project角度分析。上述架构还是存在问题。

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

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

举一个样例:

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.

补充:在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中的实现的更多相关文章

  1. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

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

    MVC设计模式在网站中的应用 以淘宝的购物车为例 一.结合六个基本质量属性 可修改性 采用MVC设计模式的时候,可以将视图.模型.控制器分析,将用户动作.数据表示.应用数据分离开来,如果用户需要以不同 ...

  3. JavaWeb中的MVC 下

    代码较多,请先略过代码,看懂逻辑在研究代码 引入 回顾上一节中的项目,最终的层次结构: 在MVC上中,我们分析了MVC设计模式具备的优点,以及不足,并在其基础上增了Service层用于处理业务逻辑,但 ...

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

    一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...

  5. [Head First设计模式]山西面馆中的设计模式——观察者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 引言 不知不自觉又将设计模式融入生活了,吃个饭也不得安生,也发现生活中的很多场景,都可以用设计模式来模拟.原来设计模式就在 ...

  6. 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施

    初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...

  7. 三层架构与MVC & 设计模式的较量

    刚刚学习了三层架构,并且正在实际应用中,但随着学习的深入,又了解到了一个叫MVC的东西,(早在设计模式中就听到过MVC,仅仅是简单查了一下什么意思.)如今正好把这三个东西放在一起聊聊. 三层 是一个分 ...

  8. MVC架构在Asp.net中的应用和实现

    转载自:http://www.cnblogs.com/baiye7223725/archive/2007/06/07/775390.aspx 摘要:本文主要论述了MVC架构的原理.优缺点以及MVC所能 ...

  9. JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

    JavaWeb中监听器+过滤器+拦截器区别.配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->fil ...

随机推荐

  1. 20、Flask实战第20天:Flask上下文

    Local线程隔离对象 我们知道通过request可以获取表单中的数据.如果是多个用户同时在用网站,而全局request就只有一个,那么Flask是如何分辨哪用户对应哪个请求呢? 这种情况下,就会用到 ...

  2. POJ 3532 Resistance(高斯消元+基尔霍夫定理)

    [题目链接] http://poj.org/problem?id=3532 [题目大意] 给出n个点,一些点之间有电阻相连,求1~n的等效电阻 [题解] 有基尔霍夫定理:任何一个点(除起点和终点)发出 ...

  3. 【点分治】【map】【哈希表】hdu4670 Cube number on a tree

    求树上点权积为立方数的路径数. 显然,分解质因数后,若所有的质因子出现的次数都%3==0,则该数是立方数. 于是在模意义下暴力统计即可. 当然,为了不MLE/TLE,我们不能存一个30长度的数组,而要 ...

  4. 【set】bzoj3715 [PA2014]Lustra

    对每种属性开一个set,只要某个厂家符合该属性的最值,就加进set,最后判断是否有某个厂家在4个set里都存在即可. #include<cstdio> #include<set> ...

  5. 【费马小定理+矩阵快速幂】HDU4549——M斐波那契数列

    [题目大意] M斐波那契数列F[n]是一种整数数列,它的定义如下:F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 )现在给出a, b, n,求出F[ ...

  6. 反序显示一个整数 Exercise06_04

    import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:反序显示一个整数 * */ public class Exercise06 ...

  7. iOS开发中几种常见的存储方式

    1.archive 归档 数据的保存 1: let result = NSKeyedArchiver.archiveRootObject(contacts, toFile: path as Strin ...

  8. iOS 自定义相机带拍摄区域边框及半透明遮罩层(含源码)

    开始时准备封装成ViewController的相机,但是在不改我相机控件源码的情况下,使用者很难自定义UI.于是想到将相机核心功能封装到View里,暴露出功能方法给外面调用,调用者只需将LFCamer ...

  9. Android 架构 2.界面

    其中,最上层的界面,是变化最频繁的一个层面,也是最复杂最容易出问题的一个层面,如果规划不好,很容易做着做着,又乱成一团了.要规划好界面层,至少应该遵循几条基本的原则: 保持规范性:定义好开发规范,包括 ...

  10. delphi设计浮动窗口

    delphi设计浮动窗口 用过Photoshop的朋友一定对它的那些方便的浮动面板记忆犹新,其实这些面板就是一个个的小窗体,但这些小窗体都放在Photoshop的主窗体上 (不是存在主窗体中),有自己 ...