A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liqiangheb 黑马粉丝团   /  2017-9-17 15:30  /  1064 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

Struts2是一个相对流行的MVC框架。在说Struts2之前,我们先回顾一下传统的servlet/jsp实现的MVC架构,其运行机制是:jsp页面(视图view)发送消息到servlet(控制器Controller),servlet获取请求数据,处理业务逻辑,分发转向。这样的话,servlet就太臃肿了,什么活儿都是servlet在干,而且业务逻辑全是硬编码,代码都写死了不利于维护。
Struts2框架的MVC分别对应:
V:jsp+OGNL
C:action类
M:javabean+ModelDriven
Struts2框架的控制器将“获取请求”和“分发转向”代码抽取出来写在配置文件里,这样一来,控制器(action类)就能专注于业务逻辑的处理了。
正文
1,一个完整的Struts2项目的web目录结构及主要文件的执行流程
各文件执行流程关系
由上图可以看出,Struts2的MVC各个部分都是围绕着struts.xml文件执行的,这样就解放了控制器的负担,而且解决了硬编码的问题。
2,Struts2框架的内部执行过程
上面讲了MVC中个文件的执行过程,那只是一小部分,现在来看一下整个struts2框架的执行机制,下面的图来源于官网,然后加了自己的改动。
由上图看出,整个框架的运行又紧紧围绕着核心过滤器StrutsPrepareAndExecuteFilter展开工作。
3,默认拦截器
struts-default.xml配置文件中定义了一个默认拦截器栈,这些拦截器就是动作方法执行之前的要执行的。常用的有封装用户表单数据到javabean的modelDriven拦截器,用于输入验证的validation拦截器,等等。
4,View和Controller之间的交互
从视图页面每次发来的用户请求都会产生一些数据,这些数据都存放在哪儿呢?实际上,每次动作类执行前,核心过滤器StrutsPrepareAndExecuteFilter都会创建2个对象:ActionContext和ValueStack,这2个对象存储了动作访问期间用到的所有数据。这些数据又可以在jsp页面上通过strut标签和OGNL表达式来取得。
1),ActionContext是一个map数据结构,其中的key是一些常见的域对象(application,session,request等),而value又是一个map。也就是说ActionContext是一个大map包裹着一些小map。
2),ValueStack是一个ArrayList数据结构,并且是一个栈结构,每次都在栈顶存取数据。
5,Controller与Model之间的交互
C和M之间的交互比较简单,利用Struts框架提供的拦截器:ModelDriven,即可实现将用户表单提交的数据封装到对应的javabean中。
要点:
(1)javabean类自己编写。
(2)动作类要实现ModelDriven接口。
(3)实现抽象方法getModel()。

2 个回复

倒序浏览
这波挺不错
回复 使用道具 举报
大神,抱大腿
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马