Struts2要注意问题

Struts2是从Webwork衍生出来的框架,与Struts1有很大的不同。

它的主要优点:

1.它没有和ServletAPI紧密耦合,属于一种无侵入式的设计,可以方便地进行设测试。   

2.struts2拥有拦截器的机制,可以实现一种环绕通知的AOP。

3.struts2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。

4.Struts2提供支持多种表现层技术

5.Struts2的输入校验可以对指定方法进行校验

  

 

Struts2的处理流程简述(具体流程参见另一篇文章:Struts2源码简析)

请求到来之后,首先,经过StrutsPrepareAndExecuteFilter过滤,这是所有Struts2请求入口。然后,请求会经过各种拦截器(Interceptor)完成pre-process,有的是Struts2默认自带的拦截器,有的是自定义的。接下来执行Action中指定执行的方法(默认是execute),再执行拦截器的post-process,在次期间,无论是拦截器,还是Action,都有可能会影响到最终的Result。最后,再对Result解析,找到合适的视图并用输出信息对象与视图绑定,返回给用户。

  

 

使用Struts2的注意事项:

1.需要给Action注入属性:比如,处理文件上传的时候,文件保存的目录。可以把这个参数通过struts.xml中的<action>标签的子标签<param>来为Action注入属性。

 

2.Struts2对Action的管理和Struts1有很大不同。Struts1的Action是单例,创建出Action就放入缓存,以供重复使用;而Struts2的Action是原型,为每一个request建立一个Action。

 

3.虽然Struts2提供了文件上传的功能,可以通过设置常量struts.multipart.    maxSize来设置上传文件的大小。但是,Web并不适合上传大文件,如果要上传大文件,可以考虑开发Socket网络传输软件来实现。

4.在为Struts2的单独Action设置拦截器的时候,在<action>标签下设置<interceptor-ref>标签引用拦截器,但是如果直接这么写,Struts2默认提供的拦截器就会失效。解决方法:定义一个拦截器栈。

  

5.利用Struts2进行校验的时候,无论是校验错误还是类型转换错误,都可能会转入“input”视图。

 

6.如果为某个action提供了全方法校验和指定方法校验,先读全部校验文件,再读指定方法校验文件。struts2会将校验文件的校验规则汇总(使用后面文件的校验规则,即制定方法的校验规则),用于全部action方法。如果存在继承关系,例如:UserAction继承BaseAction,则先搜索父校验规则,再搜索子校验规则。

  

7.可以使用OGNL访问ValueStack中的值,不用加“#”,EL表达式也可以访问,因为Struts2对request对象做了增强处理,使它能够访问值栈。

  

8.Struts2中的<s:url>标签中的value属性默认不会按照OGNL表达式执行,需要加上“%{}”来处理。

      

9.在使用Model来进行参数传递的时候,Model不仅要有对应的setter,还有有对应的getter。如:Action中有一个User类的域,那么Action中要有setUser和getUser方法。

  

10.在进行声名式的异常处理时,可以使用OGNL在错误页面显示错误信息<s:property value="exception.message">

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值