springmvc总结
struct2 总结
前言
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展开工作。深入到filter的源码中会对理解有所帮助。下面几篇博客对filter的介绍很好。
(1),struts2请求过程源码分析:博客1
(2),Struts 2配置文件加载顺序:博客2
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()。
总结
本文从宏观角度解读了Struts2框架的基本结构,每个部分的具体细节以后再讲。
参考: