• MVC架构设计及应用


    要:本文通过查阅资料和项目实际应用,讲解了MVC设计模式发展历程以及其在现代软件工程中的应用。列举了基于MVC设计模式的框架及其应用,同时以struts为例介绍了如何将MVC架构应用于实际项目中。

    关键词:MVC架构设计、软件设计模式、工程管理

    一、产生背景

    MVC(模型—视图—控制器)是Xerox PARC在二十世纪八十年代为编程语言Smalltalk-80发明的一种软件设计模式,后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,并且受到越来越多的使用ColdFusion和PHP的开发者的欢迎,现已被各工程项目广泛使用。

    二、基本概念

             在MVC中,M(model)指业务模型,V(view)是指用户界面,C(controller)是控制器。使用MVC架构的目的是将M和V的实现从代码层面分离,从而使同一个程序可以使用不同的表现形式。

    三、具体内容

      M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

      V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

      C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

     

    四、主要技术及框架

    1、经典JSP+Servlet+JavaBean三层架构

      在早期web开发中,最初使用JSP+JavaBean的设计模式,其中JSP充当视图和控制器,JavaBean充当模型,虽然该模式将业务逻辑与页面表现进行了分层,在一定程度上增加了程序的可调试性和维护性,但其页面将控制与显示集于一身,不利于构建大型项目;之后又产生了JSP+Servlet模式,其中分为view层(JSP前台交互)和web层(Servlet数据交互),但是JSP和Servlet的一大共同点是都可以进行网页操作,也就是说,单独使用某一项技术都可以进行网页开发,这就导致二者产生了难以维护和杂乱代码的困扰。

      考虑到以上两种模式的优缺点,扬长而避短,JSP+Servlet+JavaBean三层架构应运而生,其将系统分为最基本的三个部分,模型(Model)、视图(View)、控制器(Controller),其中JSP作为View层,进行页面展示,负责前台的交互和传递数据;Servlet作为Controller层,主要是连接Model和View层沟通的桥梁,主要是用于业务处理,例如用户注册登录,就可以看成是User的业务,我们将负责业务的相关代码写到这个层中;最后JavaBean即模型层,常用来封装对象属性;最后一般还会写一个Dao层,这个层是属于MVC中Model层的抽离,目的是为了更纯粹的和数据库打交道,将Servlet中的数据和数据库交互。

      这种方法遵循了MVC设计模式,大大提高了代码的可读性和可维护性,但由于没有一套统一的开发框架,导致很多项目开发周期长,因此逐渐不被使用。

    2、曾经的王——Struts

             Struts是Apache软件基金下Jakarta项目的一部分。Struts框架的主要架构设计和开发者是Craig R.McClanahan。Struts 曾经是Java Web MVC框架中不争的王者,经过长达九年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,占有了MVC框架中最大的市场份额。但是Struts某些技术特性上已经落后于后来新兴的MVC框架。面对Spring MVC、Webwork2这些设计更精密,扩展性更强的框架,Struts受到了前所未有的挑战。但站在产品开发的角度而言,Struts仍然是最稳妥的选择。

      Struts的工作流程:Tomcat启动 → 加载web.xml → Struts核心功能初始化 → 过滤器执行:①Init — 启动执行 ②doFilter — 访问执行 ③Destroy — Tomcat停止 ④解析struts-default.xml文件 ⑤解析struts-plugin.xml文件 ⑥解析struts.xml文件 → 访问action

      其中struts.xml配置文件根据访问的路径名称找到action的位置,根据配置的class创建action对象,根据method调用方法,之后方法执行,返回一个字符串(只能返回String),配置文件根据返回的字符串找到对应的result标签,跳转至相应界面。

    3、J2EE的春天——Spring

    Spring是一个开源框架,由Rod Johnson创建并且在他的著作《J2EE设计开发编程指南》里进行了描述。它是为了解决企业应用开发的复杂性而创建的。Spring使使用基本的JavaBeans来完成以前只可能由EJB完成的事情变得可能了。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

    Spring主要由以下几个模块组成:

    l  Spring Core:核心类库,提供IOC服务;

    l  Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);

    l  Spring AOP:AOP服务;

    l  Spring DAO:对JDBC的抽象,简化了数据访问异常的处理;

    l  Spring ORM:对现有的ORM框架的支持;

    l  Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传;

    l  Spring MVC:提供面向Web应用的Model-View-Controller实现。

    其中Spring MVC的核心内容围绕DispatcherServlet展开,DispatcherServlet接收所有请求,并将具体工作委托给其他组件进行处理,Spring MVC框架包括注解驱动控制器、请求及响应的信息处理、视图解析、本地化解析、上传文件解析、异常处理以及表单标签绑定等内容。

    4、Microsoft——ASP.NET

             .NET MVC是微软官方提供的以MVC模式为基础的.NET Web应用程序(Web Application)框架,它由Castle的MonoRail而来(Castle的MonoRail是由java而来)。

      ASP.NET Core MVC是由Web Forms和最初的ASP.NET MVC演变而来,其遵循MVC模式, 指导了ASP.NET web应用程序的形成和内部组件之间的交互,实现了MVC模式,其优点在于具有可扩展性和可测试性、以及强大的路由系统(包括一个干净的URL地址,因为简洁的URL使用户更乐于点击)

      .NET目前最新的版本是.NET 6.0。

    五、Struts案例——宿舍管理系统

    项目结构展示:

    根据MVC架构理论,使用Struts搭配JavaBean和JSP将项目分为M层(JavaBean、Dao),V层(webapp)与C层(action),其中,JavaBean负责对对象进行封装;Dao负责纯粹的与数据库进行交互;Action负责业务层逻辑判断,是M层和V层沟通的桥梁;View层进行页面展示,使用html静态网页+JSP动态网页的方式。

             代码展示:struts如何添加一名学生

             首先是view层构建,其主要负责视图展示,在添加学生功能中,主要是获取输入

    <form method="post" action="AddStu.action" class="form-horizontal">
        <div class="form-group">
            <label class="col-sm-2 control-label">学号</label>
            <div class="col-sm-10">
                <input type="number" class="form-control" name="user.uid" id="uid">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">学生姓名</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="user.name" id="name">
            </div>
        </div>
        <div class="hr-line-dashed"></div>
        <div class="form-group">
            <div class="col-sm-4 col-sm-offset-2">
                <button class="btn btn-danger" type="reset">重置</button>
                <button class="btn btn-primary" type="submit">提交</button>
            </div>
        </div>
    </form>

    在Action中接收前台传入的参数,struts主要是通过构建对象的get/set方法来实现接收参数。

    public void setUser(User user) {
        this.user = user;
    }
    
    public User getUser() {
        return user;
    }

    接收参数后,执行业务逻辑判断

    public String addStu() throws Exception{
        Dao dao = new Dao();
    
        System.out.println(user);
    
        String uid = user.getUid();
        String pass = MD5Util.encrypt(uid,"MfSd3zHbhQMWWFUS6lY39gPSTLS8VsAa");
        String identity = "学生";
        user.setPass(pass);user.setIdentity(identity);
        System.out.println(user);
        dao.insert_user(user);
        return "success";
    }

    在struts.xml配置文件中规定如何实例化方法与跳转

    <action name="AddStu" class="action.AdminAction" method="addStu">
        <result name="success">/success.jsp</result>
    </action>

    最后是Dao层中对数据库进行操作

    public boolean insert_user(User user) { 
        boolean f  =false;
        String sql = "insert into user (uid,username,password,identity) values('"+user.getUid()+"','"+user.getName()+"','"+user.getPass()+"','"+user.getIdentity()+"')";
        Connection conn = 
    DBUtil.getConnection();//数据库连接,加载驱动
        Statement state = null;
        try
        {
            state = conn.createStatement();//实例化Statement对象,方便对sql语句进行操作
            System.out.println(conn);
            state.executeUpdate(sql);
            f=true;
        }catch(Exception e)//当try语句中s出现异常时,会执行catch中的语句
        {
            e.printStackTrace();//捕获异常的语句
        }
        finally
        {
            DBUtil.close(conn);
        }
        return f;
    }

    添加结果:数据库中插入了一条数据记录

    以上是struts一个基于MVC架构的小案例,其中主要使用JDBC对数据库进行操作,如果使用ORM等数据库工具会使项目更易于开发和维护,这主要是由于MVC架构没有明确定义,因此常搭配其他工具搭配进行使用。

    六、总结

      MVC架构模式是web开发中的一大里程碑,使用MVC有利于现代软件的工程化管理,增加项目的可维护性,同时也增加了项目的可重用性,使相似项目的开发效率大大提高。

  • 相关阅读:
    记录@DeleteMapping注解的使用
    记录一次linux设置frp开机自启动功能实现
    mongo对用户简单操作
    Jedis分布式锁实际应用笔记
    如何在R语言中建立六边形矩阵热图heatmap可视化
    R语言复杂网络分析:聚类(社区检测)和可视化
    R语言泊松Poisson回归模型预测人口死亡率和期望寿命
    R语言混合正态分布极大似然估计和EM算法
    R语言使用自组织映射神经网络(SOM)进行客户细分
    R语言时间序列TAR阈值自回归模型
  • 原文地址:https://www.cnblogs.com/Arisf/p/16257238.html
Copyright © 2020-2023  润新知