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中读出数
分享到:
相关推荐
精品文章 - 解析MVC模式,更好的帮助你了解MVC编程的学习。
#### MVC模式解析 MVC模式是一种软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种分离有助于代码的模块化,提高代码的可读性和可维护性。 - **模型(Model)*...
随着Web应用的不断发展和需求的日益复杂,MVC模式因其清晰的分层架构和高灵活性,逐渐成为Web开发的标准设计之一。 #### MVC的三大组件解析 MVC模式的核心在于将应用的业务逻辑、用户界面和数据处理分离,通过三个...
### MVC模式的网上购物系统实现的关键技术和分析 #### 引言 随着互联网技术的迅猛发展,网上购物系统已经成为人们生活中不可或缺的一部分,极大地丰富了消费者的购物体验。MVC(Model-View-Controller)模式因其...
本文旨在深入解析MVC模式的完整结构,探讨其实现方法,并针对其存在的不足提出改进策略。 #### 1. MVC模式的核心概念 **模型(Model):** 模型是应用程序中用于存储数据的对象,它负责数据的逻辑处理以及与数据库...
二、MVC模式解析 MVC模式由模型(Model)、视图(View)和控制器(Controller)三部分组成: 1. 模型:负责处理业务逻辑和数据处理,例如在图书馆管理系统中,模型可能包括图书的增删改查、用户管理等功能。 2. 视图...
**经典MVC模式详解** **一、MVC模式概述** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于Web应用开发中,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。...
根据提供的信息,“MVC模式图”,...希望以上的解析能够帮助您更好地理解MVC模式及其在实际项目中的应用方式。如果所提供的“MVC模式图”存在疑问,建议结合以上介绍的内容进行对比分析,以便进一步确认图示的准确性。
【网上购买图书案例MVC模式】是一个典型的软件开发实践,主要使用了Model-View-Controller(MVC)架构模式来构建一个在线图书销售系统。在这样的系统中,MVC模式帮助我们有效地分离业务逻辑、数据处理和用户界面,...
### MVC模式详解 #### 一、MVC模式概述 MVC模式,全称为“Model-View-Controller”(模型-视图-控制器),是一种广泛应用于软件工程中的设计模式,尤其适用于构建用户交互式应用程序,如Web应用。MVC模式通过将...
**MVC模式与JSP计算器应用** 在Web开发领域,MVC(Model-View-Controller)模式是一种常用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的主要目标是...
### MVC模式解析与实践 #### 一、MVC模式概览 MVC,即Model-View-Controller(模型-视图-控制器),是一种被广泛应用于软件工程,特别是Web应用程序开发中的设计模式。其核心思想是将应用程序的业务逻辑、用户界面...
**基于jspMVC模式的成绩管理系统详解** 在信息技术领域,开发Web应用程序时,Model-View-Controller(MVC)模式是一种广泛采用的设计模式。本项目"基于jspMVC模式的成绩管理系统"是一个采用JavaServer Pages(JSP)...
**MVC模式实现的计算器详解** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于Web应用开发中,以分离业务逻辑、数据处理和用户界面。在这个模式下,计算器应用的实现分为三个主要组件:模型...
1. MVC模式解析 MVC模式是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑,视图负责显示数据,控制器则作为模型和视图之间的桥梁...
本实例主要探讨如何在JSP中应用MVC模式进行开发,特别适合初学者学习。 **一、MVC模式介绍** MVC模式是一种软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种...
**MVC模式详解** MVC(Model-View-Controller)是一种经典的软件设计模式,尤其在Web应用程序开发中广泛应用。此模式将应用逻辑分为三个主要组件,以实现良好的代码组织和职责分离。 1. **模型(Model)**:模型是...
### J2EE中的MVC模式解析 #### 一、MVC模式概述 MVC(Model-View-Controller)模式是一种广泛应用于软件工程的设计模式,尤其在Web应用开发中被广泛应用。这种模式的主要目的是将应用程序的不同关注点进行分离,...
随着技术的发展,MVC模式也出现了许多变种和扩展,如MVVM(Model-View-ViewModel)、 MVP(Model-View-Presenter)等,它们在保持基本原理的同时,针对不同的应用场景进行了优化。 **六、总结** MVC设计模式是软件...