`
fanjava
  • 浏览: 240236 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论
阅读更多
MVC模式

MVC是三个单词的缩写,这三个单词分别为:模型(Model)、视图(View)和控制(Controller)。MVC模式的目的就是实现Web系统的职能分工。下面以J2EE开发进行介绍。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
现在来看一个例子,看MVC模式是怎样工作的。
1.1.1 一个实例
例1-a:
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>nepalon.simplestruts.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/simplestruts/servlet/control/Controller</url-pattern>
</servlet-mapping>
上面是web.xml文件的片段,在这里定义了一个servlet用于处理请求。
例1-b(Test.jsp文件):
<html>
<%@pagecontentType="text/html;charset=gb2312"%>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>实例首页</title>
</head>
<body>
<tableborder="0"width="100%">
<tr>
<td><divalign="center">
<ahref="/simplestruts/servlet/control/Controller?command=showarticle">显示文章</a>
</div></td>
</tr>
</table>
</body>
</html>
在这个JSP中,我们并没有直接去调用JSP或JavaBean,而是把请求分送到Servlet中。下面,我们来看看Servlet的代码。
例1-c:
packagenepalon.simplestruts;
/**
*<p>Title:MVCframework</p>
*<p>Description:Controller<p>
*<p>Copyright:R2003</p>
*@authorNepalon
*@version1.0
*/

importjavax.servlet.*;
importjavax.servlet.http.*;
importjava.io.*;
importjava.util.*;


publicclassControllerextendsHttpServlet
{

publicvoidinit(ServletConfigconfig)throwsServletException
{
super.init(config);
}

publicvoiddestroy(){}

/**用于处理HTTP的GET和POST请求的函数
*@paramrequestservletrequest
*@paramresponseservletresponse
*/
protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,java.io.IOException
{
//代码(1)通过if来实现对不同请求的分发
if(request.getParameter("command").equals("showarticle"))
{
ArticleCommandcommand=newArticleCommand();
next=command.getAllArticle(request,response);
}
//代码(2)
dispatch(request,response,next);
}

protectedvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,java.io.IOException
{
processRequest(request,response);
}

protectedvoiddoPost(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,java.io.IOException
{
processRequest(request,response);
}

/**一个实现了分发者模式的函数
*@paramrequestservletrequest
*@paramresponseservletresponse
*/
protectedvoiddispatch(HttpServletRequestrequest,
HttpServletResponseresponse,
Stringpage)
throwsjavax.servlet.ServletException,java.io.IOException
{
RequestDispatcherdispatcher=
getServletContext().getRequestDispatcher(page);
dispatcher.forward(request,response);
}
}
在Servlet中并没有直接处理所提交的请求,而是把请求的处理推后到ArticleCommand类中,通过ArticleCommand对象来执行,如代码(1)。在处理完请求后,转到相应的页面中,如代码(2)。下面,我们看一下ArticleCommand类的代码。
例1-d:
packagenepalon.simplestruts;

/**
*<p>Title:MVCframework</p>
*<p>Description:文章业务类<p>
*<p>Copyright:R2003</p>
*@authorNepalon
*@version1.0
*/

importjava.util.*;
importjavax.servlet.*;
importjava.io.*;
importjava.lang.*;
importjava.sql.*;
importjavax.sql.*;

publicclassContribute
{
publicContribute(){}
publicStringgetAllArticle(HttpServletRequestrequest,HttpServletResponseresponse)
throwsjavax.servlet.ServletException,java.io.IOException
{
Connectionconn=null;
Stringcon_user="example1";
Stringcon_password="example1";
Stringcon_dburl="jdbc:oracle:thin:@localhost:iasdb";
Stringcon_driver="oracle.jdbc.driver.OracleDriver";
PreparedStatementpstmt=null;
ResultSetrsComment=null;
VectorvectorComment=newVector();
StringselectSQL="SELECTcontent,timeFROMarticleORDERBYtimeDESC";
try
{
DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
Class.forName(con_driver);
conn=DriverManager.getConnection(con_dburl,con_user,con_password);
pstmt=conn.prepareStatement(selectSQL);
rsComment=pstmt.executeQuery();
while(rsComment.next())
{
CommentItemcommentItem=newCommentItem();
commentItem.setContent(rsComment.getString(1));
commentItem.setTime(rsComment.getDate(2));
vectorComment.add(commentItem);
}
vectorComment.trimToSize();
}
catch(Exceptione){//做相应的处理}
//代码(1)保存处理结果并返回跳转页面
request.setAttribute("vectorComment",vectorComment);
return"/simplestruts/showallarticle.jsp";
}
……
publicStringgetNewArticle(HttpServletRequestrequest,HttpServletResponseresponse)
throwsjavax.servlet.ServletException,java.io.IOException
{…}
}
在这个类中进行的是取得所有文章的业务,最后返回如果成功执行操作后要跳转到的页面。当然,这个类中可能还有别的业务的相应函数,读者可自己实现。下面看一下要跳转到的页面的代码。
例1-e(showallarticle.jsp文件):
<html>
<%@pagecontentType="text/html;charset=gb2312"%>
<%@pageimport="java.util.*,java.lang.*"%>
<jsp:useBeanid="vectorComment"type="java.util.Vector"scope="request"/>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>显示文章</title>
</head>
<body>
<tableborder="0"width="100%">

<tr>
<td>发表时间</td>
<td>文章内容</td>
</tr>
<%
if(vectorComment!=null&&vectorComment.size()>0)
{
intcounter=vectorComment.size();
CommentItemcommentlist=null;
for(inti=0;i<counter;i++)
{
commentlist=null;
commentlist=(CommentItem)(vectorComment.get(i));
%>
<tr>
<td><%=commentlist.getCmTime()%></td>
<td><%=commentlist.getCmContent()%></td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
在这个JSP中我们要做的只是取得结果并显示,没有涉及到相应的业务逻辑。

1.1.2 实例分析
首先,我们看一下这个例子的序列图

图1.1.2-1
1)首先在Veiw层的test.jsp中提交一个请求/simplestruts/servlet/control/Controller?command=showarticle;
2)在Controller层的Controller对象中,根据请求的类型来调用相应的业务处理类,在这里,command值为showarticle的请求的业务处理类为ArticleCommand类,所以调用该类的对象的相应函数;
3)在Model层的ArticleCommand类主要实现请求的取得所有文章的业务功能,把结果保存在request中,并返回跳转页面作为返回值;
4)回到Controller层的Controller对象,根据上一步骤的返回值进行页面转发。
5)转发到View层的showallarticle.jsp页面,这个页面从request中取得结果并进行显示。在这个JSP中虽然也有Java代码,但这些代码只是用于显示结果,并没有涉及到任何业务逻辑。

1.1.3 MVC模式的好处
本来这样一个简单的功能我们只需要2个JSP文件就能实现了,为什么要这么麻烦把它分到几个类中去实现呢?现在就来看一下MVC模式带来的好处。
1)各施其职,互不干涉
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。假如业务发生了变化,如在取文章时可能webmaster把一些文章作了无效标志,不能直接把所有文章取出来,只能取出有效的文章,这时业务就发生了改变。再设想一下,如果这个业务逻辑在100个页面中都要用到,那么MVC模式就体现了它的灵活性。我们可以不更改任何JSP,只要更改model层中的相应类中的SQL语句即可。
2)有利于开发中的分工
在MVC模式中,由于按层把系统开,那么就能更好的实现开发中的分工。网页设计人员可以进行开发视图层中的JSP,对业务熟悉的开发人员可开发业务层,而其它开发人员可开发控制层。
3)有利于组件的重用
分层后更有利于组件的重用。如控制层可独立成一个能用的组件,视力层也可做成通用的操作界面。
分享到:
评论

相关推荐

    网上购买图书案例MVC模式

    【网上购买图书案例MVC模式】是一个典型的软件开发实践,主要使用了Model-View-Controller(MVC)架构模式来构建一个在线图书销售系统。在这样的系统中,MVC模式帮助我们有效地分离业务逻辑、数据处理和用户界面,...

    MVC模式实现书城购物车系统

    本项目是一个基于JavaEE技术栈的MVC模式实现的网上书城购物车系统。这个系统的设计目的是为了帮助初学者深入理解MVC(Model-View-Controller)设计模式,以及如何在实际开发中应用这一模式来构建一个功能完善的电子...

    MVC模式(求三角形面积、计算).pptx

    MVC 模式详解 MVC 模式是软件设计中一种非常重要的模式,它将软件或组件分为三个部分:模型(Model)、视图(View)和控制器(Controller)。这种模式已经 menjadi 必备的开发模式之一,广泛应用于 Web 开发、移动...

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    mvc模式jsp计算器

    **MVC模式与JSP计算器应用** 在Web开发领域,MVC(Model-View-Controller)模式是一种常用的设计模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的主要目标是...

    基于jspMVC模式的成绩管理系统

    **基于jspMVC模式的成绩管理系统详解** 在信息技术领域,开发Web应用程序时,Model-View-Controller(MVC)模式是一种广泛采用的设计模式。本项目"基于jspMVC模式的成绩管理系统"是一个采用JavaServer Pages(JSP)...

    经典mvc模式开发好

    **经典MVC模式详解** **一、MVC模式概述** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于Web应用开发中,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。...

    基于 MVC 模式的博客(BLOG)系统的设计与实现

    ### 基于MVC模式的博客(BLOG)系统的设计与实现 #### 一、引言 随着互联网技术的快速发展,博客(BLOG)已成为一种流行的在线信息分享平台。为了提高博客系统的性能、稳定性和易维护性,本研究采用MVC(Model-View-...

    C++的MVC模式简单示例

    **C++中的MVC模式详解** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于构建用户界面,特别是在Web开发和图形用户界面(GUI)应用中。C++作为一个强大的面向对象编程语言,同样可以利用MVC模式来...

    mvc模式(软件架构思想)

    ### MVC模式解析与实践 #### 一、MVC模式概览 MVC,即Model-View-Controller(模型-视图-控制器),是一种被广泛应用于软件工程,特别是Web应用程序开发中的设计模式。其核心思想是将应用程序的业务逻辑、用户界面...

    基于mvc模式下的登录注册

    总的来说,"基于MVC模式下的登录注册"项目展示了如何在Web开发中利用MVC模式来分离关注点,提高代码的可维护性和可扩展性。通过合理划分模型、视图和控制器的职责,我们可以更有效地组织和管理代码,同时提供更直观...

    MVC模式网上书店系统

    **MVC模式网上书店系统详解** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于构建Web应用程序,特别是在Java EE、.NET等框架中。它将应用程序的业务逻辑、用户界面和数据访问层分离,使得各部分...

    MVC模式jsp网上书店系统

    **MVC模式** MVC(Model-View-Controller)模式是一种广泛应用在Web开发中的软件设计模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种分离使得代码结构清晰,易于...

    MVC模式下多层分布式软件系统架构设计.pdf

    MVC模式下多层分布式软件系统架构设计是软件工程领域中的一种经典架构方式,尤其适用于复杂系统的构建。MVC即Model-View-Controller(模型-视图-控制器),是一种用于设计用户界面的设计模式,通过将业务逻辑、用户...

    MVC模式概述

    ### MVC模式概述 MVC(Model-View-Controller)是一种广泛应用于软件工程,特别是Web应用程序开发中的设计模式。它的核心思想在于将应用分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。...

    MVC模式的Java编写学生管理系统源码

    **MVC模式详解** MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于构建Web应用程序,尤其是在Java开发中。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以...

    MVC模式图

    根据提供的信息,“MVC模式图”,我们来详细探讨一下MVC(Model-View-Controller)设计模式的概念、工作原理以及应用场景等内容。 ### MVC设计模式概述 MVC是一种软件架构模式,广泛应用于用户界面的设计与开发之...

    基于MVC模式图书管理系统论文

    "基于MVC模式图书管理系统论文" 本文主要介绍了基于MVC模式的图书管理系统的设计与实现。该系统使用了MVC设计模式和Struts框架,旨在提高图书管理的效率和准确性。 知识点1:MVC模式的优点 MVC模式是一种软件设计...

    PHP__单入口MVC模式实例

    单入口MVC模式则是这种模式的一个变体,它强制所有请求都通过一个单一的入口点进入,从而更好地控制和管理应用程序流程。 首先,让我们详细了解一下“单入口”概念。在单入口MVC模式下,所有的HTTP请求都会通过一个...

Global site tag (gtag.js) - Google Analytics