`
jafisher
  • 浏览: 56723 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MVC结构总结

阅读更多
  学习MVC已有一段时间,之前对MVC的理解比较凌乱,最近开始着手做web项目,考虑到MVC的重要性,觉得有必要把MVC的知识点综合总结一下,也算是对自己学习的一个检测吧。
  MVC是一个设计模式,是model-view-control结构。它强制性的使应用程序的输入、处理和输出分开。MVC应用程序被分成三个核心部件:模型(model)、视图(view)、控制器(controller)。它们各自处理自己的任务。MVC模式的目的就是实现Web系统的职能分工。
  Model层:
    实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据。模型分为数据模型和业务逻辑模型。
  View层:
    负责展示数据对象给用户的界面层,用于与用户的交互,通常用JSP来实现。是用户看到并与之交互的界面。
  Controller层:
    是Model与View之间沟通的桥梁,是根据界面反馈处理业务逻辑的控制层,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。

  简单地说,MVC就是一个HTML/JSP+Servlet+javaBean结构:
  HTML/JSP负责生成动态网页;
  Servlet负责流程转发至对应胡Action实现
  javabean(pojo和dao)负责业务数据模型存取

  控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。最重要的一点是多个视图能共享一个模型,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论用户想要Flash界面或是WAP界面,用一个模型就能处理它们。由于已经将数据和业务规则从表示层分开,所以可以最大化的重用代码了。

MVC特点:
  低耦合性
  高重用性和可适用性
  较低的生命周期成本
  快速部署
  可维护性
  有利于软件工程化管理
  并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。

model1与model2的概念:
  在使用JAVA技术建立Web应用的实例中,由于JSP技术的发展,很快这种便于掌握和可实现快速开发的技术就成了创建Web应用的主要技术。JSP页面中可以非常容易地结合业务逻辑(jsp:useBean)、服务端处理过程(jsp:let)和HTML(),在JSP页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的Web应用就是由一组JSP页面构成的。这种以JSP为中心的开发模型我们可以称之为Model1。
  Model 2表示的是基于MVC模式的框架。MVC是Model-View-Controller的简写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表示面(由JSP页面产生),“Controller”是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。从而弥补了Model1的不足。

MVC框架结构:
  ControlServlet:请求控制器,解析请求中的动作名字,调用动作工厂对象生成的动作对象处理请求,处理后返回的结果即为目标url。
  ActionFactory:工厂类,根据请求中的动作名创建命令对象action。
  Action:接口,定义所有动作的接口。
  具体Action:是实现了Action接口的类,调用其具体实现的方法处理Request或Response对象,返回一个url,再由Servlet负责转发到界面上。
  user:用户类,一个最基本的单元,用来实现动作的对象。
  Dao:负责连接数据库,将数据库中的数据导入到具体的Action中。

java实例:
1.设计控制器Servlet:
  创建一个动态web工程后,首先定义一个ControlServlet,用户的所有请求都提交给这个Servlet,为了便于系统扩展,可以对Servlet的请求路径在web.xml中进行模糊配置。
<servlet-mapping>
  <servlet-name>ControlServlet</servlet-name>
  <url-pattern>*.netjava</url-pattern>
</servlet-mapping>

ControlServlet:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
try{
            //得到请求的命令名字,解析出*.netjava请求中*所指代的字符串,即动作名字        
              String actionName = getActionName(request);
  //根据请求的动作名,得到控制器servlet中配置的Action实现类名字
   String actionClassName = this.getInitParameter(actionName);

  //通过工厂类创建命令对象
   Action action = ActionFactory.getIns().getAction(actionClassName);

  //使用动作对象处理动作,返回结果为处理后要输出的目标页面
   String url = action.execute(request, response);
   if(url != null){
   //输出目标页面
            getServletContext().getRequestDispatcher(url).forward(request, response);
            }
}catch(Exception e){
   e.printStackTrace();
//出错则输出错误页面
getServletContext().getRequestDispatcher("/error.jsp").forward(request, response);
}
}

//解析得到请求中的命令字
protected String getActionName(HttpServletRequest request){
String path = request.getServletPath();
return path.substring(1, path.lastIndexOf("."));
}

ActionFactory:
public class ActionFactory {

private static ActionFactory af = null;
//单实例访问方法
public static ActionFactory getIns(){
if(af == null){
af = new ActionFactory();
}
return af;
}

//根据具体的Action类名字创建Action对象
public Action getAction(String actionClassName){
Action actionInstance = null;
try{
Class c = Class.forName(actionClassName);
actionInstance = (Action)c.newInstance();
}catch(Exception e){
e.printStackTrace();
}
return actionInstance;
}
}

Action接口:
public interface Action {

public String execute(HttpServletRequest request, HttpServletResponse response);
}

具体Action:
public class LoginAction implements Action{

public String execute(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html; charset=UTF-8");
String userName = request.getParameter("userName");
String userPwd = request.getParameter("userPwd");

//到数据库中查找用户
User user = new UserDao().findUser(userName, userPwd);

//判断用户是否存在
if(userName.equals(user.getName()) &&
userPwd.equals(user.getPwd())){
request.getSession().setAttribute("USER", user);
return "/mainPage.jsp";
}else{
request.setAttribute("ERROR", "账号或密码不正确!");
return "/Login.html";
}
}
}

web.xml配置:
  <servlet>
    <description></description>
    <display-name>ControlServlet</display-name>
    <servlet-name>ControlServlet</servlet-name>
    <servlet-class>cn.netjava.servlet.ControlServlet</servlet-class>
    <init-param>
      <param-name>LoginAction</param-name>
      <param-value>cn.netjava.action.LoginAction</param-

value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>ControlServlet</servlet-name>
    <url-pattern>/*.netjava</url-pattern>
  </servlet-mapping>

Login.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;

charset=UTF-8">
<title>登陆界面</title>
</head>
<body>

<form name="testForm" method="get"

action="LoginAction.netjava">
<br>用户名:<input type="text" name="userName"/>
<br>密     码:<input type="password" name="userPwd"/>
<%
String msg = (String)request.getAttribute("ERROR");
if(msg != null){
out.print("<br>"+msg);
}
%>
<input type="submit" name="submit" value="登陆"/>
</form>
<a href="Register.jsp">注册用户</a>
</body>
</html>

开启服务器,在IE浏览器上测试结果:

http://localhost:8080/MVCTest/Login.jsp
注意:最好是使用IE浏览器,因为有的浏览器并不完全兼容tomcat,可能会出现异常。
  在界面上输入用户名和密码,点击登陆按钮,jsp将请求交给Servlet,Servlet再根据提交的动作得到具体的Action对象,然后通过Factory创建命令动作对象,处理Servlet中的动作,返回目标url,即得到登陆成功的界面。
  这就是MVC构架的一个大致流程。为系统的扩展为了充分的准备,利用一个Servlet可以实现用户多个不同动作的响应。以上也是我对MVC的一点粗略的理解。
分享到:
评论

相关推荐

    MVC结构编写购物车

    接下来,我们将重点关注MVC结构的运用。在模型层,我们需要创建一个或多个类来表示书籍、购物车、订单等实体,这些类将处理与数据库交互、计算总价等逻辑。视图层则可以通过JSP页面呈现书籍列表、购物车内容以及结算...

    MVC基础总结

    ### MVC基础总结 #### 一、MVC概述 1. **MVC架构** - **MVC基本概念** - **模型(Model)**: 模型是应用的核心组件,负责存储和管理数据,以及处理业务逻辑。它直接与数据源进行交互,并确保数据的有效性和一致性...

    MVC结构在Ajax客户端开发中的应用研究.pdf

    "MVC结构在Ajax客户端开发中的应用研究" MVC 结构是软件开发中的一种常见的设计模式,它将应用程序分成三个部分:模型(Model)、视图(View)和控制器(Controller)。其中,模型负责存储和管理数据,视图负责显示...

    PureMVC框架学习总结

    3. 分模块的结构有利于团队合作开发,提高开发效率。 然而,MVC模式也存在一些缺点: 1. M、V、C三者难以清晰划分,尤其在小型项目中,过度的划分会增加开发复杂性; 2. 细化划分带来的副作用是工作目录和代码文件...

    基于MVC结构的合同管理

    总结来说,【基于MVC结构的合同管理】是一个利用C#和MVC模式构建的合同管理系统,通过合理的分层和组件化设计,实现了高效的数据管理和用户交互。这种系统设计思路对于初学者理解和实践软件工程的最佳实践,尤其是C#...

    一个标准的MVC结构的SSI,实现了用户注册,查询,删除,修改操作

    在这个项目中,"一个标准的MVC结构的SSI"指的是使用Struts2、Spring和iBatis(简称SSI)框架组合实现了一个完整的MVC应用。下面将详细阐述这三个框架及其在MVC中的作用。 1. **Struts2**:Struts2是一个基于MVC设计...

    简述java技术的web体系结构-mvc

    总结来说,Java Web的MVC体系结构为开发人员提供了一个高效、灵活的框架,用于构建复杂、可扩展的Web应用程序。通过理解并熟练运用MVC模式,开发者可以更好地组织代码,提高开发效率,并确保项目的长期可持续性。

    Spring MVC 学习记录总结1

    在这个学习记录总结中,我们将深入理解Spring MVC的核心概念、主要组件以及其工作流程。 1. Spring MVC 概述 Spring MVC 是Spring框架的一部分,它基于Spring IoC(Inversion of Control,控制反转)容器,简化了...

    MVC总结大全

    ### MVC总结大全——深入解析Utils工具类、Entity实体类与DAO层Service层知识 #### 一、Utils工具类知识——请求和响应 在Java Web开发中,`Utils`工具类通常用于封装一些常用功能,如数据库操作、网络请求处理等...

    基于MVC结构的电子病例系统

    总结来说,基于MVC结构的电子病例系统通过清晰的角色分工和模块化设计,实现了高效、安全的医疗服务流程,为医疗信息化提供了可靠的平台。学习这样的系统有助于理解MVC模式在实际项目中的应用,以及如何设计和实现...

    JSPMVC结构注册登陆模块

    总结,`JSPMVC结构注册登陆模块`提供了一个基础的框架,帮助开发者理解MVC模式在Web应用中的运用,以及如何利用MySQL、DAO和服务层处理用户注册和登录。通过学习和实践这个模块,初学者可以掌握核心的Web开发技能,...

    基于ASP.NET MVC 3的企业应用项目总结

    ### 基于ASP.NET MVC 3的企业应用项目总结 #### 一、项目背景与概况 本项目是一次采用ASP.NET MVC 3框架构建的企业级应用程序的开发经历。项目历时约三个月,期间不仅实现了功能需求,还克服了诸多技术挑战。作为...

    mvc练手项目 三层结构 学生管理系统 jsp servlet

    **项目概述** ...**总结** 这个练手项目旨在帮助开发者熟悉MVC模式和三层架构,以及JSP和Servlet在实际项目中的应用。通过完成这个项目,可以提升对Java Web开发的理解,为更复杂的Web应用打下基础。

    Spring MVC的总结梳理

    ### Spring MVC的核心概念与应用详解 ...通过以上介绍可以看出,Spring MVC不仅提供了一个结构化的开发框架,还拥有丰富的配置选项和灵活的功能扩展点,这些都使得Spring MVC成为Java Web开发领域中不可或缺的一部分。

    [转] 老板让俺总结的puremvc学习笔记

    例如,对于非常复杂的大型项目,它的结构可能显得过于简单,不足以应对所有需求。另外,虽然它提供了一种标准的通信方式,但在某些情况下,过度依赖Notification可能导致过多的事件监听器,从而影响性能。 在阅读...

    Spring3 MVC结构全解(实例+核心流程+全部jar包)

    一、Spring3 MVC结构 1. **DispatcherServlet**:作为Spring MVC的前端控制器,它是所有HTTP请求的入口点。DispatcherServlet负责调度请求到相应的处理器,处理后返回响应。 2. **Controller**:控制器是业务逻辑...

    PureMVC总结(附Hello World含PureMVC源码代码和文档)

    这个框架是基于Model-View-Controller(MVC)设计模式的,它提供了一种结构化的解决方案,使得开发者可以更有效地组织和管理应用程序的组件。 在PureMVC中,MVC的三个主要组成部分被抽象为类: 1. **Model**(模型...

    JAVA MVC结构

    ### JAVA MVC结构详解 #### 一、MVC架构概述 MVC(Model-View-Controller,模型-视图-控制器)是一种广泛应用于Browser/Server结构的WEB应用开发中的设计模式。这种模式的主要目的是将应用程序的业务逻辑、数据...

    采用MVC设计模式的java聊天系统

    总结来说,这个Java聊天系统通过采用MVC设计模式,实现了高效、可维护的代码结构。从模型层处理业务逻辑,到视图层展示用户界面,再到控制器层协调两者,整个系统展现出清晰的层次和职责划分,为开发者提供了良好的...

    Mvc4.0 三层结构框架

    总结来说,Mvc4.0的三层结构框架通过明确的角色分工,提高了代码的可读性、可维护性和可扩展性。这种架构设计允许开发者专注于各自的领域,降低了复杂性,促进了团队协作,是构建大型企业级Web应用的理想选择。在...

Global site tag (gtag.js) - Google Analytics