最近学习了Struts2的一些知识,这里先谈一下对Struts2的一些认识和感触,在后续的博客中再贴出一些具体的代码。
先谈一下Struts2对于Struts1的一些进步:
- Struts2取代了Struts1的Servlet和Action。
- Struts1继承Action,不少参数多需要Request来传递参数,Struts2继承ActionSupport,只要实现execute方法就可以了,这样Action可以脱离Servlet进行测试。
- Struts2的一个重要的核心就是提供了拦截器(Interceptor),这是在Struts1中没有的。
- Struts2的请求Action是线程安全的,不同于Struts1中所有的请求共享一个Action。
- Struts2更加充分的利用了javaBean的特征,对实体类进行了更深度的封装,不用单独创建ActionForm,可以在Action中直接定义需要和前台交互的属性。
- 一个简单的配置文件:struts.xml(取代了struts1里面的strut-config.xml)。
上面只是一些感性的认识,来通过一个Struts2的架构图,对Struts2有一个比较形象的认识。
通过这个图可以大致明白Struts2内部是通过代理机制(ActionProxy)然后结合各式各样的拦截器(Interceptor),然后根据struts.xml中的配置,对客户端的请求进行了深度的封装。
再看一个比较简洁的图:
结合这个架构图,简要的总结一下Struts2的请求流程:
1、加载类(FilterDispatcher) 2、读取配置(struts配置文件中的Action) 3、派发请求(客户端发送请求) 4、调用Action(FilterDispatcher从struts配置文件中读取与之相对应的Action ) 5、启用拦截器(WebWork拦截器链自动对请求应用通用功能,如验证) 6、处理业务(回调Action的execute()方法) 7、返回响应(通过execute方法将信息返回到FilterDispatcher)
8、查找响应(FilterDispatcher根据配置查找响应的是什么信息如:SUCCESS、ERROR,将跳转到哪个jsp页面) 9、响应用户(jsp--->客户浏览器端显示) 10、struts2标签库(相比struts1的标签库,struts2是大大加强了,对数据的操作功能很强大)。
这里仅对Struts2做一个简要的概括,有个整体的认识。如果用一句话对Struts2总结就是:
Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开来。