一、优点
·1.Action可以是POJO,实现了servlet和容器的解耦合,为测试提供了便利
2.拦截器具有十分丰富和强大的功能,简化开发
3.支持多种变现层技术,freemarker和jsp等等
4.声明式的异常管理
5.资源国际化的支持
6.灵活的验证方式
7.通过struts-spring插件可以与spring 整合
二、 struts2工作流程
1.客户端向服务器发送请求,服务器端通过Filter引导请求进入struts内部结构进行加工
2.由FilterDispathcer根据请求的uri到ActionMapper找到请求对应的Action
3.然后产生一个Action 的代理类对象(ActionProxy的实例),因为在执行Action前,还需要执行struts中自定义或者默认的拦截器,比如模式驱动等等
4.由代理对象在调用目标action的目标方法
5.方法执行结束后,根据struts.xml的配置进行跳转,返回响应信息时,再经过拦截器栈
三、拦截器和过滤器的区别(摘抄)
1.拦截器是通过java的动态代理实现的,而过滤器是通过回调实现的
2.拦截器不依赖servlet容器,而过滤器依赖于servlet容器
3.拦截器仅对action的请求进行拦截,而filter可以过滤几乎所有的请求
4.拦截器可以访问action上下文和值栈的内容,而filter不能
5.拦截器可以在action的生命周期内被多次调用,而filter只在容器启动时初始化一次
四、关于struts2中ThreadLocal
为了解决线程安全的问题,struts2采用了ThreadLocal的方式,每一个线程使用同一个ActionContext,即一次请求始终对应一个ActionContext。多线程之间采用不同的实例,从而达到了线程安全的目的。
五、为什么要使用struts2框架
1、struts2可以与servlet容器解耦合,便于测试
2、struts2拥有强大的拦截器,可以简化开发过程
3、声明式的异常