Struts 从1.1使用到1.3已有多年,都升成2了,却来了个大变脸,须重新审视 一番了。从头学习,记下笔记,以要点式。
1. Struts2 与 Struts1 似乎没什么血缘关系了,承自于 WebWork,直害 WebWork 不再推出新版本了,原先的 WebWork 使用者只需顺其然,即是水道渠成 ;相反 Struts1 的开发经验对于 Struts2 却没有太大的帮助。
2. Struts1 的核心控制器是 ActionServlet,而 Struts2 的核心控制器是 FilterDispatcher。Struts2 的业务 Action 会在运行时生成 Action 代理。
3. Struts1 的 Action 须继承抽象 Action 类,侵入了 Servlet API;而 Struts2 的 Action 可以实现 ActionSupport,或者只要一个纯净的 POJO 来充 当,完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强,可把 Struts TestCase 扔到一旁去了。
4. Struts1 在运行时一个 Action 只会生成一个实例,而 Struts2 中的 Action 会应对每个请求生成新的实例,在线程安全性方面,Struts1 要多些考虑 。
5. Struts1 依靠 ActionForm. 来接受数据,它也是依赖于 Servlet API ,并 非普通的 JavaBean,而 Struts2 可在 Action 属性中获取请求的属性,当然也 能封装在一个独立的 POJO 中。不过提醒一下,在 Struts1.3 中也可以用 POJO 来接受请求属性,但使用起来有点烦琐。
6. Struts2 使用了新的 OGNL 的表达式语言,可以访问值栈,在对集合和索 引属性的支持上功能更强大。
7. Struts1 的配置文件只需 struts-config.xml;Struts2 的配置文件有 struts.xml 和 struts.properties。struts.properties 中有两个 struts.devMode = fase 和 struts.configuration.xml.reload = true 很可爱 ,分别设置当前是开发还是生产模式,以及 struts.xml 改变后是否自动重新加 载,免去了改配置手工重启应用的必须步骤。
8. Struts2Action 的 execute() 无参,返回的是一个字符串,不像 Struts1 Action 的 execute() 有一大串且不说,光是返回 ActionForward,就让这个 Action 与 Struts1 脱不了干系;还是 Struts2 来得聪明,只返回个中性的 String,反正名字吗,猛然间这个 Action 也成 POJO 了,复用性增强了,难怪 专门有一书,名为《POJO In Action》。
9. Struts1 的视图只支持 JSP,这也不怪它,只怨出身太早,那时就只有 JSP 一种表现层。相比,Struts2 更有艳福,能贴近于 FreeMarker、Velocity、 XSLT、PDF 等视图技术。
10. Struts2 提供了功能强大复杂的标签库,统一化为 “s” 前缀。并顺应时 代潮流地加入了 AJAX 的支持。还提供了更友好的验证功能。
没有了爱的语言,所有的文字都是乏味的