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的例子当中去复制

然后写配置文件         如下:

//这个是根目录

//这个是需要验证的输入框名字就是输入框的名字

//选择验证类型  这个类型的列表在xwork.jar 的 com.opensymphony.xwork2.validator.validators 包下的default.xml

文件里

true//这个是为绑定的验证类的里的属性进行配置

username should not be blank;//当验证不通过时的信息输出

6

10

username should between in ${minLength} and ${maxLength}

在一个action类当中可以能有多个返回的方法(一个action类可以实现多个逻辑),可以再struts.xml文件当中设置使用哪个执行的方法,是在action标签当中的method的属性设置,但是使用不同的方法需要不同的

验证方式,可以设置不同的验证配置文件来为不同的方法设置验证方法,验证配置文件的文件名应该这样写:actionName-methodName-validation.xml

这是设置每个方法的校验方式,但是这个为这个action类配置的校验配置也会去校验,而且首先校验的是这个action类的校验文件(建议的是如果一个action类有多个逻辑,只提供每个逻辑的验证而不提供action类的

全局验证)

特殊情况:如果一个action类有一个方法的验证,并且有一个全局的验证,这个action有一个子类这个子类也有一个方法 的验证和全局的验证,系统验证的顺序是

首先执行父类的全局验证然后是方法的验证之后是子类的全局验证最后才是子类的方法的 验证

除了field校验方式(字段检验,为每个字段配置校验对象)还有一种是非字段校验 validtor 就是在这个标签里定义一个validtor标签,定义校验的对象然后为这个对象设置需要校验的字段

validtor标签的使用:标签下第一个子标签是需要校验的字段的名然后还必须有一个标签标示出错后提示的内容

客户端校验:

struts2 给我们提供了一定的客户端校验功能但是功能很不完善所以最好自己去写js校验的代码;

但是在使用struts2提供的校验方式的时候theme属性一定不要设置为simple,而且validata的要设置为true;

也可以自己写js校验,form的一些属性和html里是一样的

java struts2 mvc_struts2的MVC模式相关推荐

  1. java struts2 mvc_struts2自定义MVC框架

    本文实例为大家分享了struts2自定义MVC框架的方法,供大家参考,具体内容如下 自定义MVC:(首先了解Model1和Model2的概念) Model1与Model2: Model1:就是一种纯j ...

  2. java 框架mvc_JAVA框架-MVC模式

    MVC MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型) - 模型代表一个存取数据的对象或 JAVA PO ...

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

    一.MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分 ...

  4. struts2学习笔记(一) MVC模式

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

  5. java ssh三层架构_SSH和三层架构的MVC模式的对应关系

    1.MVC(Model-View-Controller)设计模式: 首先让我们了解下MVC(Model-View-Controller)的概念: MVC全名是Model View Controller ...

  6. java mvc模式_Java MVC模式

    MVC模式表示:模型 -视图 - 控制器模式.此模式用于分离应用程序的问题. 模型(Model) - 模型表示携带数据的对象或JAVA POJO.如果其数据改变它也可以具有逻辑来更新控制器. 视图(V ...

  7. java EE开发之Servlet第八课:MVC模式 (基本理解)

    ##1,为什么需要MVC模式? 为什么需要MVC模式,以前简单的JSP页面处理不好吗?MVC有什么好处呢? 答:MVC就是常说的: 模型(Model):POJO(Plain Old Java Obje ...

  8. Java面向对象和MVC模式设计练习——快递管理系统

    快递管理系统 一.任务概述 二.MVC设计模式 1.定义 2.优点 a.低耦合 b.复用性强 三.思路梳理 1.MVC架构设计 a.Controller b.Model c.View 2.流程控制 3 ...

  9. java中mvc事务_java核心技术第五篇之事务和MVC模式

    第一部分:事务 1.事务的简介: 1.1 在一组操作中(比如增加操作,修改操作),只有增加和修改操作都成功之后,这两个操作才能真正的成功. ,如果这两个操作中,有一个失败了,这两个操作都失败了. 1. ...

最新文章

  1. 命令行收集(DOS/Linux/nc/xscan/xsniffer)
  2. R语言可视化包ggplot2绘制线性回归模型曲线实战( Linear Regression Line)
  3. 数据智能是大数据的未来
  4. csu 1554: SG Value 思维题
  5. XCTF-Reverse:python-trade
  6. 【Java正则表达式】正则基本语法、使用方式(分组、替换、分割)、简单爬虫基础
  7. 牛客OI周赛15-普及组
  8. 停止追赶最新的 RPA 趋势
  9. ORTP协议栈【ZT】
  10. 为什么资源文件名以类型开头
  11. 一步一步写算法(之二叉树深度遍历)
  12. 2021年中国乙酸异冰片酯市场趋势报告、技术动态创新及2027年市场预测
  13. ios7学习之路七(隐藏虚拟键盘,解决键盘挡住UITextField问题)
  14. SMO算法是干什么的?有什么作用?
  15. python数字金额转换为中文大写金额
  16. 关于在dll中申请内存,外部释放的问题
  17. 颜色RGB对照表(颜色大全)
  18. 集合(List集合、数据结构、List集合的实现类)
  19. 基于51单片机的简易交通灯仿真代码讲解
  20. 微信小程序 授权地理位置被拒绝后 wx.getLocation接口调用失败问题

热门文章

  1. 剑指 Offer 13. 机器人的运动范围 【重刷】
  2. 95-910-144-源码-FlinkSQL-Flink的UDF
  3. 95-10-030-启动-deamon定时任务
  4. 10-10-020-简介-kafka的ZK上面的存储
  5. 【Flink】Flink写入es报错failed to get node info for request_id time out out after
  6. Flink 1.9 : Wordcount报错:ClassNotFoundException: yarn.exceptions.YarnException
  7. MySQL日期处理-查询间隔数据
  8. 【flume】flume读取web应用某个文件夹下日志到hdfs
  9. HDFS数据管理与容错
  10. dubbo注册中心的细节