又是忙碌的一天~对struts2有了一定了解,今天有点头疼...于是看了些简单的东西,总结了一下struts1与struts2的区别(主要是struts2的一些优势):
1、struts2的pojo类,不必像struts1一样要继承Action
2、对servlet的依赖性:struts1的依赖性较强;struts2与servlet则彻底分开,不依赖
3、封装请求参数:struts2合并了action和actionform,方便了一些
4、测试性:struts1的测试非常痛苦,必须用到jsp;而struts2则方便了许多,可以单独进行测试而不必用到jsp
其他一些比较:
类型转化问题:struts1的属性类型基本都是String等简单类型;struts2支持复杂类型,如集合,自定义的类型等。
表达式语言:struts1用的是EL;struts2为OGNL,明显强于简单的EL
线程模式:struts1为单线程;struts2则是一个request分配一个action。
生命周期:(不懂,就不解释了)
struts2有拦截器,多视图等
struts2是基于webwork2的,其实与struts1并无多大关系,个人认为两者除了都是基于MVC和名字相同,其他的都不一样...
今天的第二个收获OGNL(对象图导航语言)ognl.Ognl类
getvalue(X,Y)X为ognl表达式;Y为root对象(Object类型)
getvalue(X,Y,Z)X为ognl表达式;Y为Context(Map);Z为root对象(Object类型)
例子:
#username :用getvalue(X,Y)检索是否有username属性;
#user.name:用getvalue(X,Y)首先查找是否包含user,在检索user中是否有name属性
用getvalue(X,Y,Z)则在Map(key,value)中检索“key=user,value=name”
重要接口:ValueStack,实现类:OgnlValueStack
标签:iterator value="book" id="book"
property value="#book.name"
date name="#book.date" format="yyyy-MM-dd"
(其中name对应struts.xml中的name)
book.{?#this.price>100}<!--显示price>100的book--!>
写了个显示图书信息的练习,关键代码如下:
(list.jsp)
<%page import="com.opensymphony.xwork2.util.*"%>
<%@taglib uri="/struts-tags" prefix="s"%>
ValueStack vs=(ValueStack)request.getAttribute("struts","value Stack");
List list=(List)vs.findvalue("book");
"book!delete.action?id=<%=book.getId()%>"
struts2代码调试的时候建议每次重新启动tomcat服务器,并重新加载项目到tomcat,否则容易出异常。
头疼啊~睡了。。。