struts2的MVC模式

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里是一样的

时间: 2024-08-07 00:11:02

struts2的MVC模式的相关文章

extjs4.1 和struts2结合使用时延迟加载js,可使用extjs的mvc模式

直奔主题,在前台我们点击左边的菜单会先打开一个tab页,希望将请求的页面放到新打开的tab页上面:关键代码如下: tabPanel.add({ id: id, title: title, closable: true, autoScroll: true, layout: 'fit', loader: { scripts: true, autoLoad: true, params: params, url: url } }); 传统的方法是在tab里面嵌入一个iframe,然后在里面嵌入一个独立的

Struts(一)struts2.2概述与MVC模式深度剖析

struts2.2概述与MVC模式深度剖析 1.Struts2是由webwork与struts一起组成的.struts1与struts2完全不一样.(处理前段到服务器端的交互,也就是web端) 2.通过基于请求响应( Request-Response)模式的应用Framework, 基本上有如下几个表现逻辑结构组成.– 控制器(Controller) ——控制整个Framework中各个组件的协调工作.– 业务逻辑层(Business Logic) ——对Framework本身来说, 这里仅仅只

struts2 MVC模式

在学习struts2之前首先了解一下MVC模式. MVC是一个设计模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.分层概念 模型(Model) 用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法.“模型”有对数据直接访问的权力,例如对数据库的访问.“模型”不依赖“视图”和“控制器”,也就是说,模型不关心它会被如何显示或是如何被操作.但是模型中数据的变化一般会通过一种刷新机制被公布.为了实现这种机制,那些用

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

MVC模式-----struts2框架 第一个struts2程序 struts2框架是通过一个过滤器将struts2集成到Web应用程序中的,这个过滤器的对象是StrutsprepareAndExecuteFilter.struts2框架通过过滤器对象,获取web应用中的Http请求,并将http请求转发到的指定Action进行处理,Action根据处理结果返回给用户相应的页面. 创建一个简单的struts项目,需要创建于用户进行交互并获取输入信息的jsp页面:呈现最终信息的页面:创建一个用于业

基于mvc模式的应用框架之struts

Struts就是基于mvc模式的框架! (struts其实也是servlet封装,提高开发效率!) Struts开发步骤: 1. web项目,引入struts - jar包 2. web.xml中,引入struts的核心功能 配置过滤器 3. 开发action 4. 配置action src/struts.xml 1. 引入8个jar文件 2. web.xml <!-- 引入struts核心过滤器 --> <filter> <filter-name>struts2<

Struts2的MVC思想

 MVC思想概述 MVC思想将一个应用分成三个基本部分:Model(模型).View(视图).Controller(控制器),这三个部分以最少的耦合协同工作,从而提高应用的可扩展性及可维护性. 在经典的MVC模型中,事件由控制器处理,控制器根据事件的类型改变模型或视图,反之亦然.具体地说,每个模型对应一系列的视图列表,这种对应关系通常采用注册来完成,即:把多个视图(View)注册到同一个模型(Model),当模型发生改变时,模型向所有注册过的视图发送通知,接下来,视图从对应的模型中获得信息,

MVC模式在Java web 应用程序的实现

一.MVC简介 MVC(Model-View-Controller)模型-视图-控制器,最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此模式通过对复杂度的简化,使程序结构更加直观.软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能. Mode

MVC模式在Java Web应用程序中的实现

MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri