Struts 从1.1使用到1.3已有多年,都升成2了,却来了个大变脸,须重新审视一番了。从头学习,记下笔记,以要点式。
1. Struts2 与 Struts1 似乎没什么血缘关系了,承自于 WebWork,直害 WebWork 不再推出新版本了,原先的 WebWork 使用者只需顺其然,即是水道渠成;相反 Struts1 的开发经验对于 Struts2 却没有太大的帮助。
2. Struts1 的核心控制器是 ActionServlet,而 Struts2 的核心控制器是 [color=red]FilterDispatcher[/color]。Struts2 的业务 Action 会在运行时生成 Action 代理。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 [color=red]ActionSupport[/color],或者只要一个纯净的[color=red] POJO [/color]来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
4. Struts1 在运行时一个 Action 只会生成一个实例,而 Struts2 中的 Action 会应对每个请求生成新的实例,在线程安全性方面,Struts1 要多些考虑。
5. Struts1 依靠 ActionForm 来接受数据,它也是依赖于 Servlet API ,并非普通的 JavaBean,而 Struts2 可在 Action 属性中获取请求的属性,当然也能封装在一个独立的 [color=red]POJO [/color]中。不过提醒一下,在 Struts1.3 中也可以用 [color=red]POJO [/color]来接受请求属性,但使用起来有点烦琐。
6. Struts2 使用了新的 [color=red]OGNL[/color] 的表达式语言,可以访问值栈,在对集合和索引属性的支持上功能更强大。
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
8. Struts2 Action 的 execute() 无参,返回的是一个字符串,不像 Struts1 Action 的 execute() 有一大串且不说,光是返回 ActionForward,就让这个 Action 与 Struts1 脱不了干系;还是 Struts2 来得聪明,只返回个中性的 String,反正名字吗,猛然间这个 Action 也成 [color=red]POJO [/color]了,复用性增强了,难怪专门有一书,名为《POJO In Action》。
9. Struts1 的视图只支持 JSP,这也不怪它,只怨出身太早,那时就只有 JSP 一种表现层。相比,Struts2 更有艳福,能贴近于 FreeMarker、Velocity、XSLT、PDF 等视图技术。
10. Struts2 提供了功能强大复杂的标签库,统一化为 "s" 前缀。并顺应时代潮流地加入了 AJAX 的支持。还提供了更友好的验证功能。
http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html
解释:
[color=red]OGNL[/color]
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
WebOGNL是一种构建以servlet为基础的组件化应用的web表现层框架,它的模板语言建立在OGNL表达式的基础上,具有别的web层框架不能匹敌的适应性。
OGNL可以让我们用非常简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达式person.address[0].province
可以访问到user1的person属性的第一个address的province属性。
这种功能是模板语言的一个重要补充,象jsp2.0,velocity,jelly等等,都有类似的功能,但是ognl比它们完善得多,而且以一个独立的lib出现,方便我们构建自己的框架。
webwork2和现在的Struts2.x中使用OGNL取代原来的EL来做界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。
和struts1.x的formbean相比,这样做的好处非常明显:在webwork中不需要为每个页面专门写formbean,可以直接利用对象层的对象。例如在对象设计中,我们的User和Person是分开的,而一个注册用户界面需要填写两者的内容,在webwork中,就可以保持后台的对象结构,把属于用户属性的界面元素用user.person.xxx绑定,把属于账号属性的界面元素用user.xxx绑定。
[color=red]POJO[/color]
在Java应用程序中的角色简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
POJO是Plain Old Java Objects的缩写不错,但是它通指没有使用Entity Beans的普通java对象,并且作者在这里提到的pojo是用来实现业务逻辑(business logic )的。
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口。例如:
public class User {
private long id;
private String name;
public void setId(long id) {
this.id = id;
}
public void setName(String name) {
this.name=name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。
1. Struts2 与 Struts1 似乎没什么血缘关系了,承自于 WebWork,直害 WebWork 不再推出新版本了,原先的 WebWork 使用者只需顺其然,即是水道渠成;相反 Struts1 的开发经验对于 Struts2 却没有太大的帮助。
2. Struts1 的核心控制器是 ActionServlet,而 Struts2 的核心控制器是 [color=red]FilterDispatcher[/color]。Struts2 的业务 Action 会在运行时生成 Action 代理。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 [color=red]ActionSupport[/color],或者只要一个纯净的[color=red] POJO [/color]来充当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
4. Struts1 在运行时一个 Action 只会生成一个实例,而 Struts2 中的 Action 会应对每个请求生成新的实例,在线程安全性方面,Struts1 要多些考虑。
5. Struts1 依靠 ActionForm 来接受数据,它也是依赖于 Servlet API ,并非普通的 JavaBean,而 Struts2 可在 Action 属性中获取请求的属性,当然也能封装在一个独立的 [color=red]POJO [/color]中。不过提醒一下,在 Struts1.3 中也可以用 [color=red]POJO [/color]来接受请求属性,但使用起来有点烦琐。
6. Struts2 使用了新的 [color=red]OGNL[/color] 的表达式语言,可以访问值栈,在对集合和索引属性的支持上功能更强大。
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加载,免去了改配置手工重启应用的必须步骤。
8. Struts2 Action 的 execute() 无参,返回的是一个字符串,不像 Struts1 Action 的 execute() 有一大串且不说,光是返回 ActionForward,就让这个 Action 与 Struts1 脱不了干系;还是 Struts2 来得聪明,只返回个中性的 String,反正名字吗,猛然间这个 Action 也成 [color=red]POJO [/color]了,复用性增强了,难怪专门有一书,名为《POJO In Action》。
9. Struts1 的视图只支持 JSP,这也不怪它,只怨出身太早,那时就只有 JSP 一种表现层。相比,Struts2 更有艳福,能贴近于 FreeMarker、Velocity、XSLT、PDF 等视图技术。
10. Struts2 提供了功能强大复杂的标签库,统一化为 "s" 前缀。并顺应时代潮流地加入了 AJAX 的支持。还提供了更友好的验证功能。
http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html
解释:
[color=red]OGNL[/color]
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
WebOGNL是一种构建以servlet为基础的组件化应用的web表现层框架,它的模板语言建立在OGNL表达式的基础上,具有别的web层框架不能匹敌的适应性。
OGNL可以让我们用非常简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达式person.address[0].province
可以访问到user1的person属性的第一个address的province属性。
这种功能是模板语言的一个重要补充,象jsp2.0,velocity,jelly等等,都有类似的功能,但是ognl比它们完善得多,而且以一个独立的lib出现,方便我们构建自己的框架。
webwork2和现在的Struts2.x中使用OGNL取代原来的EL来做界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。
和struts1.x的formbean相比,这样做的好处非常明显:在webwork中不需要为每个页面专门写formbean,可以直接利用对象层的对象。例如在对象设计中,我们的User和Person是分开的,而一个注册用户界面需要填写两者的内容,在webwork中,就可以保持后台的对象结构,把属于用户属性的界面元素用user.person.xxx绑定,把属于账号属性的界面元素用user.xxx绑定。
[color=red]POJO[/color]
在Java应用程序中的角色简单的Java对象(Plain Old Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类,有时可以作为value object或dto(Data Transform Object)来使用.当然,如果你有一个简单的运算属性也是可以的,但不允许有业务方法,也不能携带有connection之类的方法。
POJO是Plain Old Java Objects的缩写不错,但是它通指没有使用Entity Beans的普通java对象,并且作者在这里提到的pojo是用来实现业务逻辑(business logic )的。
POJO有一些private的参数作为对象的属性。然后针对每个参数定义了get和set方法作为访问的接口。例如:
public class User {
private long id;
private String name;
public void setId(long id) {
this.id = id;
}
public void setName(String name) {
this.name=name;
}
public long getId() {
return id;
}
public String getName() {
return name;
}
}
POJO对象有时也被称为Data对象,大量应用于表现现实中的对象。