Struts2笔记
1.Tomcat动态部署 在D:\\Program Files\\Tomcat 6.0\\conf\\Catalina\\localhost中添加文件Struts2.xml内容如下:
2.Junit4单元测试:在JUnit下,您可以继承TestCase 来撰写测试案例,并定义您的测试方法,每一个测试方法是以testXXX()作为命名,文件名有XXXTest。assertEquals()方法用来断定您希望的预期结果与单元方法实际的传回结果是否相同,如果不同则丢出例外,TestRunner会捕捉例外。您定义自己的TestCase,并使用TestRunner来运行测试,事实上TestRunner并不直接运行 TestCase上的单元方法,而是透过TestSuite,TestSuite与TestCase都实作了Test介面,TestSuite可以将数个TestCase组合在一起,这是Composite 模式,这让每个TestCase保持简单。 并提取当中的相关讯息报告测试结果,这边使用的是文字模式的TestRunner。 3.Struts2: 1)添加Struts2的常用类库主要包括(commons-logging-1.0.4.jar、freemarker-2.3.8.jar、ognl-2.6.11.jar、struts2-core-2.0.14.jar、xwork-2.0.7.jar),修改web.xml,并在src目录下添加struts.xml. 2)要在JSP中使用Struts 2.0标志,先要指明标志的引入。通过在JSP的代码的顶部加入以下代码可以做到这点。 <%@taglib prefix=\ 3) 理论上Struts 2.0的Action无须实现任何接口或继承任何类型,但是,我们为了方便实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重载(Override)此类里的String execute()方法。 4.默认情况下,当请求HelloWorld.action发生时,Struts运行时(Runtime)根据struts.xml里的Action映射集(Mapping),实例化tutoiral.HelloWorld类,并调用其execute方法。当然,我们可以通过以下两种方法改变这种默认调用。 1) 在classes/sturts.xml中新建Action,并指明其调用的方法; 2) 访问Action时,在Action名后加上“!xxx”(xxx为方法名)。 在Struts2中是通过action的name来区别不同的方法,首先在struts.xml添加不同的action,这些action可以是同一个类中,也可以不是同一个类的,然后在页面的请求中通过指定action中的name来确定调用哪个方法。 5.在Strutx 2.0你可以有两种方式获得HttpServletRequest这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式。 1)非IoC方式 要获得上述对象,Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。 另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。 ActionContext context = ActionContext.getContext(); HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); HttpSession session = request.getSession(); 如果你只是想访问session的属性(Attribute),你也可以通过 ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。 1 Struts2笔记 6.Struts2标签 1)if elseif else 2)iterator 7. param中的value通过value属性或者标签中间的text,不同之处我们看一下例子: (A)参数值会以String的格式放入statck. (B)该值会以java.lang.Object的格式放入statck. 8.Velocity模板的使用 9.ant的使用 10. 参数化国际化字符串 许多情况下,我们都需要在动行时(runtime)为国际化字符插入一些参数,例如在输入验证提示信息的时候。在Struts 2.0中,我们通过以下两种方法做到这点: 1. 在资源文件的国际化字符串中使用OGNL,格式为${表达式},例如: validation.require=${getText(fileName)} is required 2. 使用java.text.MessageFormat中的字符串格式,格式为{ 参数序号(从0开始), 格式类形(number | date | time | choice), 格式样式},例如: validation.between=Date must between {0, date, short} and {1, date, short} 在显示这些国际化字符时,同样有两种方法设置参数的值: 1. 使用标志的value0、value1...valueN的属性,如: 2. 使用param子元素,这些param将按先后顺序,代入到国际化字符串的参数中,例如: 配置资源文件时,首先新建struts.properties,新建属性name为struts.custom.i18n.resources 名称固定,value为对应资源文件的名称,如globalMessages,相应的资源文件可以为:globalMessages_en_US.properties,globalMessages_zh_CN.properties. 11.继承类 ognl.DefaultTypeConverter, 实现转换器,我们需要通过配置告诉Struts 2.0。我们可以通过以下两种方法做到这点: 1. 配置全局的类型转换器,——在源代码文件夹下,新建一个名为 “xwork-conversion.properties”的配置文件,并在文件中加入“待转换的类型的全名(包括包路径和类名)=转换器类的全名”对; 2. 应用于某个特定类的类型转换器,做法为在该类的包中添加一个格式为“类名-conversion.properties”的配置文件,并在文件中加入“待转换的属性的名字=转换器类的全名”对。上面的例子也可以这样配置——在源代码文件夹的tutorial包下新建名为 “HelloWorld-conversion.properties”文件,并在其中加入“loc=tutorial.LocaleConverter”。 12.Struts已有的转换器? 13. Struts 2.0的数据校验工作方式,它需要经过下面几个步骤: 1)通过转换器将请求参数转换成相应的Bean属性; 2) 判断转换过程是否出现异常。如果有,则将其保存到ActionContext中,conversionError拦截器再封装为fieldError;如果没有,进行下一步; 2 Struts2笔记 3) 通过反射(Reflection)来调用validateXxx()方法(其中,Xxx表示Action的方法名); 4) 调用validate()方法; 5)如果经过上述步骤没有出现fieldError,则调用Action方法;如果有,则会跳过Action方法,通过国际化将fieldError输出到页面。如果需要转换的数据,通常做法在转换的时候做格式的校验,在Action中的校验方法中校验取值。假如用户填错了格式,我们可以通过在资源文件配置invalid.fieldvalue.xxx(xxx为属性名)来提示用户正确的格式,不同的阶段出错显示不同的信息。具体做法请参考上面的例子; 14.创建自定义拦截器前,切记以下原则: 拦截器必须是无状态的,不要使用在API提供的ActionInvocation之外的任何东西。 15.Struts2更多信息参考:http://www.blogjava.net/max 16.Struts2中action不能带/ ,namespace必须带/,具体的访问页面中可以通过设置全部路径来访问如: 17. 资源文件查找顺序图 3 Struts2笔记 18. 校验顺序图. 4 Struts2笔记 1. 如果需要转换的数据,通常做法在转换的时候做格式的校验,在Action中的校验方法中校验取值。假如用户填错了格式,我们可以通过在资源文件配置invalid.fieldvalue.xxx(xxx为属性名)来提示用户正确的格式,不同的阶段出错显示不同的信息。具体做法请参考上面的例子; 2. 至于用validate()还是validateXxx(),我推荐使用validate()。原因是validateXxx()使用了反射,相对来说性能稍差,而validate()则是通过接口com.opensymphony.xwork2.Validateable调用。当然如果你的表单数据取值是取决于特定Action方法,则应该使用validateXxx()。 1. 在Xxx-validation.xml文件中的 2. 在Input.jsp中的 配置和使用拦截器 在struts-default.xml中已经配置了以上的拦截器。如果您想要使用上述拦截器,只需要在应用程序struts.xml文件中通过“ < struts > < include file =\=\timer\action > package > struts > 5