Struts2详解

Struts2详解

Struts2是一种基于MVC的web应用框架,致力于组件化和代码重用的JEE Web框架。


优点:

  • Struts2基于MVC架构,框架结构清晰,一目了然;
  • Struts2提供了丰富的拦截器,内置30多种拦截器;
  • Struts2的可扩展性高,可以自定义拦截器,Result以及对外部插件的整合(使用json插件);
  • Struts2拥有丰富的标签库,大大提高了开发效率;
  • Struts2拥有强大的OGNL表达式,可以访问request、session、application各个域中的数据

缺点:

  • Struts2存在两个高危漏洞,影响安全性;
  • Struts2的架构设计过于复杂,使用过程中效率较低;
  • Struts2学习难度高,需要处处注意才能写出较好的代码


Struts2的运行过程:

  1. 客户端浏览器发出HTTP请求
  2. 根据web.xml配置文件,请求被FilterDispatcher拦截,并传给struts.xml
  3. 根据struts.xml配置文件,找到要调用的Action类和方法,并通过IOC方式,把值注入到Action
  4. Action执行完后,根据struts.xml文件找到返回结果result,并跳转页面
  5. 返回HTTP响应到客户端浏览器

Struts2的核心控制器

核心控制器:FilterDispatcher
    FilterDispatcher 负责拦截所有用户的请求,如果用户请求以action结尾,该请求将被转到Struts2框架中处理,否则将被过滤掉。
Struts2框架获得了*.action请求后,根据请求前面的部分,调用指定的Action类中的方法。Action都被定义在struts.xml文件中,定义了Action的name属性和class属性,其中name属性决定了Action处理哪个用户的请求,class属性决定了Action的实现类。


拦截器和过滤器的区别:

  1. 拦截器是基于java反射机制的,过滤器是基于函数回调的
  2. 拦截器不依赖于servlet容器,过滤器依赖servlet容器
  3. 拦截器只对action请求起作用,过滤器对所有的请求都起作用
  4. 拦截器可以访问action上下文和值栈中的数据,过滤器不能访问
  5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化的时候被调用一次

值栈的原理和生命周期:

值栈ValueStack在struts2框架设计架构中用于数据存储,传输。ValueStack贯穿整个Action的生命周期,保存在request域中。ValueStack的生命周期和request的生命周期一样。
当struts2接受一个请求时,会迅速创建ActionContext、Action、ValueStack,然后把Action存放到ValueStack中,Action中的实例变量可以被OGNL表达式访问。
请求进来时,Action、ValueStack的生命周期开始,请求结束时,生命周期结束。



Struts2的默认拦截器:

ParamsInterceptor:字段驱动方式收集参数的拦截器
ModelDrivenInterceptor:模型驱动方式收集参数的拦截器
FileUploadInterceptor:文件上传的拦截器
ValidationInterceptor:校验拦截器
I18nInterceptor:处理国际化操作的拦截器


Struts2如何调用Action控制器的方法:

  1. *.action直接调用Action的默认方法
  2. *!method.action调用Action指定的method方法(方法的动态调用)
  3. *_method.action调用Action指定的method方法(通配符的动态调用)
  4. 为Action指定不同的别名

在项目中使用Struts2遇到的问题:

1.收集表单日期类型封装到Timestamp中,转型失败
a)自定义一个日期类型的转换类,将Date类型转换成Timestamp类型,并设置为全局转换类
2.经常遇到返回input校验失败页面
a)OGNL自动转型中,类型不匹配导致的问题








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云梦楼兰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值