structs
structs2和Structs1具有一些不同点,主要集中在以下几个方面:
1,Action的编写
在Structs1中,Action一般继承基类org.apache.structs.action.Action.而在Structs2中,Action类可以实现一个Action接口,也可以实现其他接口,也可以继承ActionSupport基类,甚至不需要实现任何接口,只编写execute函数即可。
2,Action的运行模式
Structs1中,Action是单态的,系统实例化一个对象来处理多个接口,为每一个请求分配一个线程,在该线程运行execute函数。因此,在开发时需要特别小心,Action资源必须是安全的或同步的。但是,Structs2中,Action为每一个请求都产生一个实例,不会产生线程安全问题。同时,系统又能及时回收垃圾资源,不会用废弃空间的问题。
3,对Web容器的依赖
Structs1中,Action的execute函数内,传入了Servlet API:HttpServletrequest和HttpServletresponse,使得测试必须依赖Web容器。但是,在Structs2可以不传入上面的连个参数,同时也可以访问他们,因此,Action不依赖容器,允许Action脱离容器单独被测试。
4,对表单数据的封装
Structs中,使用actionform来封装表单数据,所有的ActionForm必须继承org.apache.structs.action.ActionForm,有可能造成ActionForm类和VO类重复编码。但是,Struct2中,直接在Action中编写表单数据相对应的属性,可以不用编写ActionForm,而这些属性又可以通过Web页面上的标签访问。
此外,在Structs2中,支持了一个功能更强大和灵活的表达式语言——Object Graph Notation Language(OGNL);在类型转换和校验上开发了更丰富的API。