MVC是一种目前广为流传的经典设计模式,具体是模型(Model)—视图(View)—控制(Control)三方面结合起来的设计模式。这样设计的目的是:实现Web系统的职能分工。在实际的开发过程中,一个团队可以进行模块分工,分工开发完毕之后,再将模块组合起来合成一个项目。
这里先介绍介绍下每个模块:
1.View模块,就是用户可以看到的界面,如网页。用jsp,html编写,可以向控制(Control)模块发送请求。
2.Control模块,是一个ControlServlet类,作为服务器处理请求,每个请求都要经过该模块。是连接View模块和Model模块之间沟通的桥梁。
3.Model模块,实现服务器中的业务逻辑,通常可以用JavaBean(dao,pojo等)实现。如 LoginAction中验证用户名密码是否正确 之类。并将处理后的结果(url)返回给Control模块。
下面再从代码实现方面介绍MVC设计模式:
1.用jsp,html代码实现视图功能。
代码示例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
</head>
<body>
<form action="LoginAction.ldy" method="post">
用户名:<input type="text" name="userName"><br>
密 码:<input type="text" name="pwd"><br>
<input type="submit" name="login" value="登陆" >
</form>
</body>
</html>
这里必须先说明web.xml中的配置:
代码示例如下:
<servlet>
<servlet-name>ControlServlet</servlet-name>
<servlet-class>cn.java.controlservlet.ControlServlet</servlet-class>
<!-- 处理登陆请求的Action实现 -->
<init-param>
<param-name>LoginAction</param-name>
<param-value>cn.java.action.ActionLogin</param-value>
</init-param>
<!-- 处理注册请求的Action实现 -->
<init-param>
<param-name>RegUserAction</param-name>
<param-value>cn.netjava.action.RegUserAction</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>*.ldy</url-pattern>
</servlet-mapping>
在 <init-param>标签中用模糊匹配 * 来配置请求路径。这样的结果是,所有以.ldy结尾的请求路径都经过控制模块,即cn.java.controlservlet.ControlServlet类。然后是<init-param>标签,对应的是Action的实现类,如cn.java.action.ActionLogin类。
2.ControlServlet类,即接受所有请求的控制模块,就是配置文件web.xml中的 cn.java.controlservlet.ControlServlet类。
实现的功能:
首先取得请求的路径(*.ldy),再解析出请求路径中*指代的字符串(如LoginAction), 然后取得web.xml中配置的Action实现类名字(cn.java.action.ActionLogin),之后通过Factory类(随后介绍)创建取得Action实现类的对象,经过Action实现类处后,最后取得响应的url.
代码示例:
public class ControlServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response){
try {
//取得请求路径LoginAction.ldy
String reqPath = request.getServletPath();
//取得*指代的字符串LoginAction
String actionName = reqPath.substring(1, reqPath.lastIndexOf(".ldy"));
/**根据请求ActionName取得servlet中配置的Action实现类的名字
* cn.java.action.ActionLogin
*/
String acionClassName = this.getInitParameter(actionName);
//在Factory类中创建Action对象(Factory类在下面介绍)
Action action = ActionFactory.getIns().getAction(acionClassName);
//从实现Action类中取得响应发送的url
String url = action.execute(request, response);
if(null!=url){
this.getServletContext().getRequestDispatcher(url).forward(request, response);
}else{
this.getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.Action接口,被Action实现类实现。
代码示例
public interface Action {
public String execute(HttpServletRequest request,
HttpServletResponse response);
}
4.ActionFactory类,批量生产Action实现类对象。
代码示例:
public class ActionFactory extends HttpServlet{
private static ActionFactory ac=null;
private ActionFactory(){};//构造器私有化
public static ActionFactory getIns(){
if(null==ac){
ac = new ActionFactory();
}
return ac;
}
//在工程中批量生产Action类型的对象
public Action getAction(String actionClass){
Action actionInstance = null;
try{
actionInstance = (Action)Class.forName(actionClass).newInstance();
}catch(Exception ef){
ef.printStackTrace();
}
return actionInstance;
}
}
5.Action实现类,继承Action接口。处理各种业务逻辑,包过调用数据库。处理信息等等。
代码示例:
public String execute(HttpServletRequest request,
HttpServletResponse response) {
String name = request.getParameter("userName");
String pwd = request.getParameter("pwd");
UserInfo user=MemoDBAccess.hasUser(userName, pwd);
if(null!= user){
request.getSession().setAttribute("user", user);
return "/mainPage.jsp";
}else{
request.setAttribute("error_msg", "您输入的账号或密码有误");
return "/login.jsp";
}
}
}
MVC的这5步实现中没有涉及pojo和dao类,但是Model模块是必须包过pojo和dao类的。有兴趣的可以自己编写。
最后再介绍点MVC典型的优点吧,当然缺点也还是有的。低耦合性,视图层和业务层分离,样就允许更改视图层代码而不用重新编译模型和控制器代码。同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可,因为模型层与控制器和视图层向分离,这是可以实现的。分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
分享到:
相关推荐
**MVC设计模式详解** MVC(Model-View-Controller)设计模式是一种广泛应用于软件开发,尤其是Web应用程序中的架构模式。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此...
Java 中 MVC 设计模式 MVC 设计模式是软件架构中的一种经典设计模式,广泛应用于 Java Web 开发中。MVC 模式将应用程序分为三个主要部分:Model(模型)、View(视图)和 Controller(控制器),每个部分都有其特定...
mvc设计模式详解 mvc设计模式是一种广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是mvc设计模式的研究。mvc模式在j2ee平台上非常流行,也是广大java开发者非常感兴趣的设计模型...
**MVC设计模式详解** **一、MVC模式概述** MVC(Model-View-Controller)设计模式是一种软件设计架构模式,广泛应用于Web应用开发,主要用于分离应用程序的业务逻辑、用户界面和数据处理。该模式将应用程序分为三...
### MVC设计模式介绍与详细讲解 #### 一、MVC设计模式概述 MVC(Model-View-Controller)设计模式是一种广泛应用于软件工程中的架构模式,尤其在Web应用开发领域非常常见。它将应用程序分为三个核心组件:模型...
**Java Web中的MVC设计模式** MVC(Model-View-Controller)设计模式是一种广泛应用于Web应用程序开发的架构模式,它的主要目标是将业务逻辑、数据处理和用户界面分离,从而提高代码的可维护性和可扩展性。在Java ...
**MVC设计模式详解** **一、什么是MVC设计模式** MVC,即Model-View-Controller(模型-视图-控制器)设计模式,是一种在软件工程中广泛应用于构建用户界面的架构模式。它将应用程序的数据处理、业务逻辑与用户界面...
总的来说,理解和掌握MVC设计模式对于任何Java Web开发者来说都是至关重要的,它能够帮助我们构建更加健壮、可维护的Web应用程序。通过学习“jsp的MVC设计模式”教程源码,你可以更深入地了解这一模式,并将其应用到...
### MVC设计模式概念及优缺点 #### 一、MVC设计模式的概念 MVC(Model-View-Controller)设计模式是一种广泛应用于软件工程中的架构模式,尤其在Web开发领域非常流行。该模式的核心理念在于将应用程序划分为三个...
### MVC设计模式详解 #### 一、MVC模式的起源 MVC模式即“模型-视图-控制器”模式(Model-View-Controller),这一概念最早由Trygve Reenskaug于1978年提出[1]。该模式最初是在施乐帕罗奥多研究中心(Xerox PARC)为...
**MVC设计模式详解及其在Android中的应用** MVC(Model-View-Controller)设计模式是一种广泛用于软件工程,特别是Web应用程序开发的经典架构模式。它将应用程序的不同组件划分为三个主要部分,以实现职责分离,...
让你对MVC设计模式有一个更加深刻的认识,深入浅出的搞明白MVC
### J2EE平台上MVC设计模式的研究与实现 #### 概述 在现代软件开发,尤其是在Web应用领域,设计模式的运用已经成为提升软件质量和开发效率的关键。其中,MVC(Model-View-Controller)设计模式因其强大的组织能力...
**MVC设计模式详解及其在Android应用中的实践** **一、MVC设计模式介绍** MVC(Model-View-Controller)是一种广泛应用于软件工程,尤其是Web应用开发中的设计模式。它将应用程序分为三个核心组件:模型(Model)...
MVC设计模式云盘分享JAVA课程资源。MVC设计模式云盘分享
【MVC设计模式详解】 MVC(Model-View-Controller)设计模式是由Trygve Reenskaug在SmallTalk-80环境中首次提出的,后来成为众多交互和界面系统设计的基础,包括Microsoft的MFC(Microsoft Foundation Classes)...
在实际应用中,许多Web框架如ASP.NET MVC、Ruby on Rails、Spring MVC等都采用了MVC设计模式。例如,书shop应用可能使用MVC来实现用户浏览书籍、添加到购物车、结算等功能: - **模型**:包含书籍的信息(ID、标题...