Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > MVC模式的概念及设计应用的详细解析
【标  题】:MVC模式的概念及设计应用的详细解析
【关键字】:C,VC,模式,设计,应用,MVC,设计,MVC
【来  源】:BLOG.YESKY.NET

MVC模式的概念及设计应用的详细解析

Your Ad Here


MVC模式概述

MVC是三个单词的缩写,分别为:模型(Model),视图(View)和控制Controller)。MVC模式的目的就是实现Web系统的职能分工。

Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。

View层用于与用户的交互,通常用JSP来实现。

Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

MVC模式的好处

各施其职,互不干涉

在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。

有利于开发中的分工

在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。

有利于组件的重用

分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视图层也可做成通用的操作界面。

不同JSP构造的应用

为什么要组合使用servlet & JSP?

典型的做法:使用JSP来简化HTML内容的开发与维护,对于简单的动态代码,使用由脚本元素调用JAVA代码来完成。对于稍微复杂一些的应用,则可使用脚本元素调用定制的类来完成(即所谓的help类)。对于比较复杂的应用,则使用JAVA BEAN和定制标签。

但是,这些是不够的,对于复杂的处理过程,从JSP开始做起会难以处理。JSP除了能够带来将实际的代码隔离成单独的类、bean、和定制标签的便利以外,它所隐含的假定是单个页面给出单个基本视图。

对MVC的误解

必须采用复杂的框架;框架有时很有用;Struts JavaServer Faces (JSF);但并非必需!

对于大多简单或者适度复杂的应用来说,使用内建的RequestDispatcher就能够很好地实现MVC

MVC影响整个系统的设计;我们可以用MVC来处理单个请求;可以将它认为是MVC方案,而非MVC框架。也被称为是模型2方案。

用RequestDispatcher实现MVC

1. 定义用以表示数据的java bean

2. 使用一个servlet处理请求

servlet读取请求参数,检查数据的缺失或异常等。

3. 填充bean

该servlet调用业务逻辑或数据访问代码得到最终的结果。得出的结果被放在第一步中定义的bean中。

4. 将bean存储在请求,会话或servlet的上下文中

该servlet调用请求、会话或servlet上下文对象的setAttribute存储表达请求结果的bean的引用。

5. 将请求转发到JSP页面

该servlet确定哪个JSP页面适合于处理当前的情形,并使用RequestDispatcher的forward方法将控制转移到那个页面。

6. 从bean中提取数据

JSP页面使用jsp:useBean和与第4步匹配的位置访问之前存储的bean,然后使用jsp:getProperty输出bean的属性。

JSP页面并不创建或修改bean;它只是提取并显示由servlet创建的数据。

jsp:useBean在MVC中的使用与在独立JSP页面中有什么不同

JSP页面不应该创建对象

应该由servlet创建所有的数据对象。因此,为了保证JSP页面不会创建对象,我们应该使用


<jsp:useBean ... type=“package.Class” />
 

 

而不是


<jsp:useBean ... class="package.Class" />
 

 

JSP页面也不应该修改已有的对象

因此,我们应该只使用jsp:getProperty,不使用jsp:setProperty。提示:jsp:useBean的scope选项:


request
<jsp:useBean
id="..." type="..." scope="request" />
session
<jsp:useBean
id="..." type="..." scope="session" />
application
<jsp:useBean
id=".." type=".." scope="application" />
page
<jsp:useBean
id=“...” type=“...” scope=“page” />
或者仅仅使用
<jsp:useBean id="..." type="..." />
 

 

MVC (Model 2)构架不使用这个scope。

不同数据共享方式

向用户显示一个随机的数字。

由于每次请求应该产生新的数字,因而基于请求的共享是恰当的。

显示用户的姓和名

数据要为每个客户存储,因而基于会话的共享比较适用。

显示一个指定长度的质数。

数据在多个客户间共享,因此,基于应用的共享比较恰当。

基于请求的数据共享


Servlet
ValueObject value =
new ValueObject(...);
request.setAttribute("key", value);
RequestDispatcher dispatcher =
request.getRequestDispatcher
("/WEB-INF/SomePage.jsp");
    dispatcher.forward
 (request, response);
JSP

<jsp:useBean id="key"
type="somePackage.ValueObject"
scope="request" />
<jsp:getProperty name="key"
property="someProperty" />
 

 

基于会话的数据共享


Servlet
ValueObject value = new ValueObject(...);
HttpSession session = request.getSession();
session.setAttribute("key", value);
RequestDispatcher dispatcher =
request.getRequestDispatcher
("/WEB-INF/SomePage.jsp");
dispatcher.forward(request, response);
JSP
<jsp:useBean id="key"
type="somePackage.ValueObject"
scope="session" />
<jsp:getProperty name="key"
property="someProperty" />
 

 

基于ServletContext的数据共享


Servlet
    synchronized(this)
    {
        ValueObject value =
  new ValueObject(...);
        getServletContext().
  setAttribute("key", value);
        RequestDispatcher dispatcher =
        request.getRequestDispatcher
  ("/WEB-INF/SomePage.jsp");
        dispatcher.forward(request, response);
    }

JSP
<jsp:useBean id="key"
type="somePackage.ValueObject“
scope="application" />
<jsp:getProperty name="key"
property="someProperty" />
 

 

JSP页面中的相对URL

问题:

使用请求分配器进行的转发对客户来说是透明的。初始的URL是浏览器惟一知道的URL。

为什么这会比较重要?

浏览器会如何处理类似下面的这些标签:


<IMG SRC="foo.gif" …>
        <LINK REL=STYLESHEET
        HREF="JSP-Styles.css" TYPE="text/css">
        <A HREF="bar.jsp">…</A>
 

 

答案:浏览器将会把它们看作是相对于servlet的URL

最简单的解决方案:

使用以斜杠开始的URL

Summary

MVC (Model 2) 方式适用于:

单次提交会产生多个基本外观。

几个页面拥有大量公共的处理过程。

需要为同样的数据提供多个视图的应用程序,它很好地实现了数据层与表示层的分离,特别适用于开发与用户图形界面有关的应用程序

构架

由一个servlet应答初始的请求

Servlet完成实际的数据处理并将结果存储在bean中

Bean存储在HttpServletRequest, HttpSession, 或ServletContext中

Servlet使用RequestDispatcher的forward方法将请求转发到JSP页面

JSP页面通过使用jsp:useBean和相应的作用域(request, session,

application)从bean中读出数
 

J2EE应用服务器与JBuilder集成的实现:【上一篇】
如何保护笔记本电脑的屏幕?:【下一篇】
【相关文章】
  • J2EE应用服务器与JBuilder集成的实现
  • JBuilder2005+JBOSS+Oracle9i环境配置
  • Process Tamer[进程优先级自动切换器]
  • 放电还分时间长短?为主板CMOS彻底放电
  • CPU温度过高引起死机
  • 看环码识别CD-R/RW制造厂商
  • ORACLE实例的进程结构和内存
  • oraclepl/sql语言基础
  • C#写的一个拨号类
  • 让我的C++程序直接阅读网页(6) 小结
  • 【随机文章】
  • 会议电视技术的发展及应用
  • 蠕虫网络天空变种F分析报告(1)
  • Oracle 9i如何定制集成的管理环境
  • 系统管理员工具包: 时间和事件管理
  • 安啦,中国龙
  • vc++快捷键
  • C#写“监视器”
  • Win32-GUI Generics,全新的GUI框架
  • 一种节省整型数存储空间的方法
  • 以数据为中心??
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.