Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开。
首先看一个简单的系统开发流程图(没有框架的时候):
struts中ognl表达式用于把model层上的展示在jsp上。
1.启动服务,加载web.xml实例化StrutsPrepareAndExecuteFilter过滤器
2.在实例化StrutsPrepareAndExecuteFilter的时候会执行过滤器中的init方法加载struts.xml
3.浏览器发起请求,会被StrutsPrepareAndExecuteFilter拦截到,根据请求的uri(hello)找到相应的Action类,并且创建Action对象,执行相应的hello方法。
4.返回视图标志,展示success.jsp
用一张图来描述一下Struts2的运行流程:注(action充当MVC中的M和C。)
更加深入的还有拦截器运行过程。
服务器启动时实例化StrustPrepareAndExecuteFilter,读取struts所有的配置文件,把struts.xml中的每一个Action实例化,当一个请求访问的时候,StrustPrepareAndExecuteFilter会把请求拦截下来,匹配一个ActionMapper,然后ActionMapper创建ActionProxy,然后去执行默认拦截器栈,在执行Action,然后返回结果,然后默认拦截器再反向执行(做一些运行期的监控和清理工作,不是每一个拦截器都执行后置拦截),最后响应结果返回给页面。