MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而得到更好的开发和维护效率。

在MVC模式中,应用程序被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分。其中,模型部分包含了应用程序的业务逻辑和业务数据;视图部分封装了应用程序的输出形式,也就是通常所说的页面或者是界面;而控制器部分负责协调模型和视图,根据用户请求来选择要调用哪个模型来处理业务,以及最终由哪个视图为用户做出应答。

MVC模式的这三个部分的职责非常明确,而且相互分离,因此每个部分都可以独立的改变而不影响其他部分,从而大大提高了应用的灵活性和重用性。

1.1.2  MVC模式基础

在MVC模式中,一个应用被划分成了模型(Model)、视图(View)和控制器(Controller)三个部分,接下来认识一下这三个部分。

1:首先看一下模型、视图、控制器各部分的作用

  • 模型(Model):负责封装应用的状态,并实现应用的功能。通常又分为数据模型和业务逻辑模型,数据模型用来存放业务数据,比如订单信息、用户信息等;而业务逻辑模型包含应用的业务操作,比如订单的添加或者修改等。
  • 视图(View):用来将模型的内容展现给用户,用户可以通过视图来请求模型进行更新。视图从模型获得要展示的数据,然后用自己的方式展现给用户,相当于提供界面来与用户进行人机交互;用户在界面上操作或者填写完成后,会点击提交按钮或是以其它触发事件的方式,来向控制器发出请求。
  • 控制器(Controller):用来控制应用程序的流程和处理视图所发出的请求。当控制器接收到用户的请求后,会将用户的数据和模型的更新相映射,也就是调用模型来实现用户请求的功能;然后控制器会选择用于响应的视图,把模型更新后的数据展示给用户。

struts2是根据mvc模式设计出来的web层框架,主要处理的是接收和返回数据,而逻辑层和数据访问就不是这个框架的职责范围了。这个框架在mvc模式当中就是一个servlet,用来处理和转发。web.xml用来配置web容器,struts.xml用来配置struts框架。

MVC的组件关系图描述了模型、视图、控制器这三个部分的交互关系,下面按照交互顺序来详细描述一下它们的交互关系:

(1)首先是展示视图给用户,用户在这个视图上进行操作,并填写一些业务数据

(2)然后用户会点击提交按钮,来发出请求

(3)视图发出的用户请求会到达控制器(servlet),在请求中包含了想要完成什么样的业务功能以及相关的数据。

(4)控制器会来处理用户请求,会把请求中的数据进行封装(一系列的拦截器封装:ModelDriven,params参数封装),然后选择并调用合适的模型,请求模型进行状态更新,然后选择接下来要展示给用户的视图。

(5)模型会去处理用户请求的业务功能,同时进行模型状态的维护和更新

(6)当模型状态发生改变的时候,模型会通知相应的视图,告诉视图它的状态发生了改变。

(7)视图接到模型的通知后,会向模型进行状态查询,获取需要展示的数据,然后按照视图本身的展示方式,把这些数据展示出来。

接下来就是等待用户下一次操作,再次从头轮回了。

那么,在用户发出一个请求后,Servlet+JSP+JavaBean模型基本的响应顺序是怎样的呢?

当用户发出一个请求后,这个请求会被控制器Servlet接收到;Servlet将请求的数据转换成数据模型JavaBean,然后调用业务逻辑模型JavaBean的方法,并将业务逻辑模型返回的结果放到合适的地方,比如请求的属性里;最后,根据业务逻辑模型的返回结果,由控制器来选择合适的视图(JSP),由视图把数据展现给用户。

1.1.3  MVC模式作用

在早期开发中,有一些程序员没有认识到MVC模式带来的好处,在开发的时候不遵守MVC模式。这样做的结果就是程序结构划分不明确,各个部分功能混乱,在业务功能发生变更时,无论是业务逻辑修改还是显示形式修改,都要修改很多的类,“牵一发而动全身”,导致软件的开发和维护效率低下,错误百出。

数据校验  当校验成功的时候执行execute方法返回success,如果校验不成功返回input值去配置文件当中去找转发的页面
当数据类型转换错误的时候(也就是不能转换的时候)struts2框架将数据定义为java数据的初始值,框架生成一条错误信息,并将错误信息放到addfielderror中去
如果要替换struts2框架的默认错误信息去struts.xml文件当中配置,在替换的错误信息里应该有
#在这里面name是你要替换的框架当中的值,value是要替换的值
xword.default.invalid.fieldvalue={0} error    这里{0}是当数据错误的时候赋的值 后面的字符串是要添加到addfielderror当中的值

错误信息的替换也有全局的和局部的
全局的配置文件要在classes目录下局部的配置文件要在Action相同目录下全局的配置文件名为定义的properties
局部的配置文件要和Action的名称相同

在配置文件但中每个action属性都可以设置这个表单处理的方法,用method属性里面是方法的名字。这种做法是为了能让一个Action类能有多个处理逻辑

struts2的验证框架是基于xml的验证方式,在和action类相同的目录下面建立   "action类名"+"-validation.xml"    然后在里面添加dtd文件这个文件可以去struts2的例子当中去复制
然后写配置文件         如下:
<validators >//这个是根目录
    <field name="username">//这个是需要验证的输入框名字就是输入框的名字
        <field-validator type="requiredstring">//选择验证类型  这个类型的列表在xwork.jar 的 com.opensymphony.xwork2.validator.validators 包下的default.xml
        文件里
            <param name="trim">true</param>//这个是为绑定的验证类的里的属性进行配置
            <message>username should not be blank;</message>//当验证不通过时的信息输出
        </field-validator>
    </field>
    <field name="username">
        <field-validator type="stringlength">
        <param name="minLength">6</param>
        <param name="maxLength">10</param>
        <message> username should between in ${minLength} and ${maxLength}</message>
        </field-validator>
    </field>
</validators>

在一个action类当中可以能有多个返回的方法(一个action类可以实现多个逻辑),可以再struts.xml文件当中设置使用哪个执行的方法,是在action标签当中的method的属性设置,但是使用不同的方法需要不同的
验证方式,可以设置不同的验证配置文件来为不同的方法设置验证方法,验证配置文件的文件名应该这样写:actionName-methodName-validation.xml 
这是设置每个方法的校验方式,但是这个为这个action类配置的校验配置也会去校验,而且首先校验的是这个action类的校验文件(建议的是如果一个action类有多个逻辑,只提供每个逻辑的验证而不提供action类的
全局验证)
特殊情况:如果一个action类有一个方法的验证,并且有一个全局的验证,这个action有一个子类这个子类也有一个方法 的验证和全局的验证,系统验证的顺序是
首先执行父类的全局验证然后是方法的验证之后是子类的全局验证最后才是子类的方法的 验证

除了field校验方式(字段检验,为每个字段配置校验对象)还有一种是非字段校验 validtor 就是在<validators >这个标签里定义一个validtor标签,定义校验的对象然后为这个对象设置需要校验的字段
validtor标签的使用:标签下第一个子标签是<param name="fieldName">需要校验的字段的名</param>然后还必须有一个<message>标签标示出错后提示的内容

客户端校验:
struts2 给我们提供了一定的客户端校验功能但是功能很不完善所以最好自己去写js校验的代码;
但是在使用struts2提供的校验方式的时候theme属性一定不要设置为simple,而且validata的要设置为true;
也可以自己写js校验,form的一些属性和html里是一样的

struts2的MVC模式的更多相关文章

  1. MVC模式-----struts2框架(2)

    MVC模式-----struts2框架 第一个struts2程序 struts2框架是通过一个过滤器将struts2集成到Web应用程序中的,这个过滤器的对象是StrutsprepareAndExec ...

  2. MVC模式-----struts2框架

    MVC模式-----struts2框架 一.struts MVC模式 1.概述 MVC是模型(model)---视图model(view)---控制器(control)的缩写,是一种用于将逻辑.数据和 ...

  3. struts2 MVC模式

    在学习struts2之前首先了解一下MVC模式. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.分 ...

  4. Spring mvc 模式小结

    http://www.taobaotesting.com/blogs/2375 1.spring mvc简介 Spring MVC框架是一个MVC框架,通过实现Model-View-Controlle ...

  5. 第1章-Struts2 概述 --- Struts2和MVC

    (一)Struts2和MVC的关系图: (1)控制器---FilterDispatcher 用户请求首先达到前段控制器(FilterDispatcher).FilterDispatcher负责根据用户 ...

  6. [转载]WIKI MVC模式

    MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最 ...

  7. MVC模式在Java Web应用程序中的实例分析

    MVC在软件架构中是一种比较重要的架构思想,已经被广泛的应用在实际的java web项目开发中,我们所要了解和掌握的是mvc的架构思想和使用mvc模式来分析和解决问题的方法.当然相同或不同的项目都有各 ...

  8. 学习struts2及MVC

    1.MVC模式基础 1.1.MVC模式简介 MVC是一种架构型模式,它本身并不引入新的功能,只是用来指导我们改善应用程序的架构,使得应用的模型和视图相分离,从而达到更好的开发和维护效率.在MVC模式中 ...

  9. 作业07之《MVC模式》

    MVC(Model View Controller)模型-视图-控制器 MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的 ...

随机推荐

  1. java第一次实验报告

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java实验      班级:1352         姓名:潘恒      学号:20135209 成绩:         ...

  2. 私人助手(Alpha)版使用说明

    私人助手使用说明 私人助手这款软件是通过添加事件提醒,提醒你在合适的时间做该做的事,可以选择有多种提醒模式. 目前实现了对事件的添加和提醒功能,软件现在的情况如下: 1.添加事件 2.删除事件 3.事 ...

  3. java项目 相对路径(本项目的地址)

    File file=new File(""); String abspath=file.getAbsolutePath(); System.out.println(abspath) ...

  4. 一个简单的加减乘除自动生成小程序升级版(JAVA)

    import java.util.Scanner; public class Suan { public static void main(String[] args) { int []b;//设置数 ...

  5. [51单片机] Keil C51中变量的使用方法详解

    引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量 ...

  6. redis简介及增删改查

    redis 是一个文档(nosql)数据库,工作与内存,主要用做高速缓存 缓存经常会查到的数据 存入的值默认是字符串 使用步骤: 1 从redis.io下载 2 点击redis-server.exe启 ...

  7. 二叉查找树ADT--C语言描述

    首先给出此ADT的声明: struct TreeNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree ...

  8. awk4.0对数组value排序

    有朋友问了一个问题,要求对下面这段文本进行处理: http://www.baidu.com/2.html http://www.baidu.com/2.html http://www.baidu.co ...

  9. python基础(四)文件操作和集合

    一.文件操作 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 1.文件基本操作: f = open('file.txt','r') # ...

  10. teamcity执行jmeter脚本使用Executable with parameters方式不能正确运行解决思路

    如下图是选择command Line:Executable with parameters设置启动jmeter.bat  命令如下 command Executable: D:\apache-jmet ...