1.Struts2是现在Web开发中一个比较流行的MVC框架,它是由WebWork框架发展而来的,Struts1与Struts2如同小熊猫与大熊猫一样,虽然名字相同,但是区别比较大,Struts2充分吸收了Struts1的优秀之处,同时也避免了Struts1的不足之处,开发更方便快捷。
2.Struts2在web.xml文件中主要配置一个过滤器用于接收页面请求,并将请求转发给后台逻辑处理,其作用类似于Struts1中的ActionServlet。其具体配置如下:
配置过滤器和配置Servlet类似,熟悉Servlet的人应该很容易看懂这段配置。
3.在页面上使用Struts2的标签时,需要在页面引入Struts2的标签库:
4.Struts2的后台处理逻辑主要是一个Action,与Struts1不同的是:
a:Struts2中没有ActionFrom,Struts2的Action相当于Struts1中的Action和ActionFrom的组合。Struts2在Action中接收页面请求数据,同时进行业务逻辑处理。
b.Struts2的Action可以不继承任何东西,就是一个普通的POJO,也可以继承ActionSupport。
5.Struts2的数据类型转换:
Web页面中收集的数据都是String字符串类型,为了使数据类型转换成所需要的目标类型数据,就需要数据类型转换。
(1).简单数据类型Struts2会自动进行转换。
(2).复杂类型转换:
a.编写自定义的转换处理类,继承DefaultTypeConvert类,实现其Object convertValue(Map context, Object value, Class toType);方法,其中toType为要转换成的目标类型。
b.在需要进行转换属性的Action的同一目录下建立属性文件,
文件名命名规则:被转换Action名字-conversion.properties。
然后在属性文件中写如下内容:
要转换属性名=第一步中写的转换处理类全路径
c.还可以定义全局类型转换:
适用于所有Action中符合条件的类型转换。具体方法:
在/src根目录下建立“xwork-conversion.properties”转换属性文件。
在属性文件中写如下内容;
被转换类全路径名=第一步中写的转换处理类全路径
6.简化的Struts2数据类型转换:
一般的Struts2工程在数据类型转换时,很少直接继承DefaultTypeConverter类,而是继承一个抽象类:com.apache.struts2.util.StrutsTypeConverter类,需要重写该类的以下两个方法:
(1).converterFromString(Map context, String[] value, Class toClass);从页面端向服务器端数据类型转换。
(2).converterToString(Map context, Object value);从服务器端向页面端字符串进行数据类型转换。
7.改变Struts2表单的默认布局:
Struts2的标签默认将表单封装在一个table中,如果不想使用Struts2默认的表格布局,可以在表单输入域中加上“theme=’simple’”即可。
注意:当表单加上“theme=’simple’”,表单的label不再起作用。
8.Struts2的校验错误提示信息:
(1).字段错误信息:
a.Action校验失败时,添加错误提示信息:Action对象.addFieldError(“被验证字段”,“错误信息”);
b.在页面表单中字段下添加<s:fielderror>标签,当校验出错时,错误信息会自动显示到字段上。
(2).Action错误信息:
Struts2表单只能信息字段错误信息,若要信息Action的错误信息,则需要在表单外添加<s:actionerror>标签,用于显示Action级别的错误信息。
9.Struts2的校验和转换:
校验和转换时结合在一起的,需要先进行类型转换,然后才能进行验证。类型转换时如果失败,则会自动变为输入域类型的默认值,如int自动为0,String自动为null等。
类型转换和输入校验的流程:
(1).Struts2对页面端传来的数据进行数据类型转换。
(2).类型转换完毕,进行输入校验。
(3).如果类型转换和输入校验都通过,那么进行Action的execute方法调用具体业务逻辑处理。
注意:如果类型转换不成功时,也同样要进行输入校验。
10.Struts2的输入校验——XML方式调用Struts2校验框架:
(1).在和Action同一目录下建立校验文件,命名规则:“Action名字-validation.xml”,在校验文件中定义具体的校验规则。
(2).对于Action中有多个业务逻辑方法,类似于Struts1中DispatchAction一个Action中包含多个业务逻辑处理方法,针对特定的方法进行校验时,校验文件命名规则:“Action名字-被校验方法名-validation.xml”。
11.Struts2的输入校验——Action校验:
(1).在Struts2的Action中进行输入校验,需要实现ActionSupport的validate()方法。
validate()是对execute()方法进行校验。
注意:Action直接写validate()方法校验和XML校验框架两种方式最好只选择一种,免得引起冲突。
(2).对于Action中有多个业务逻辑方法,针对特定的方法进行校验时,校验方法名命名:“validate被校验方法首字母大写”,如校验方法update的方法命名为validateUpdate。
12.Struts2的输入校验——客户端校验:
在页面提交时进行校验
(1).页面表单的validate属性设置为true。
(2).在Action同一目录下加入“Action名字-validation.xml”的XML校验框架文件
注意:在运行时,Struts2会根据校验框架自动在页面生成javascript代码进行校验。
13.Struts2校验信息存储和校验执行顺序:
(1).Struts2中,字段级别的错误信息对象存放在一个LinkedHashMap集合中,该Map的key是字段名,value是ArrayList类型。Action级别的错误信息对象存放在ArrayList中。
(2).Struts2校验执行顺序:客户端校验—>XML校验框架—>Action的validate方法校验。
14.Struts2中实现一个Action处理多个业务逻辑
类似于Struts1中的DispatchAction,要在Struts2中实现一个Action处理多个业务逻辑,需要在Struts2的配置文件struts.xml中的<action>标签配置method属性,如:
注意:如不指定method属性,则默认执行execute()方法。
15.Struts2的国际化:
(1).在Struts2的配置文件Struts.xml的<struts>标签元素下添加:
注意:value中的国际化资源文件名要去掉后缀“.properties”。
(2).在/src根目录下添加国际化资源文件。
Struts2的国际化资源文件命名规则:
baseName_language_country.properties。
如:message_en_US.properties,message_zh_CN.peroperties。
注意:language必须是小写,country必须是大写的,千万不可写错。
16.使用国际化资源文件替换Struts2验证框架默认的错误提示信息:
在国际化资源文件中加入:“xwork.default.invalid.fieldvalue={0} error”。
同类型转换类似,国际化资源文件也有局部和全局之分,局部资源文件必须和Action放在同一目录下,文件名命名规则为:Action名.properties。一般在工程中应尽量多使用局部资源文件而非全局资源文件,因为可以更精细更灵活。
在局部资源文件中替换Struts2验证框架默认错误提示信息方法:
在局部资源文件中添加:“invalid.fieldvalue.被校验字段名=提示信息”。
17.包级别和类级别的局部国际化资源文件:
Struts2的局部国际化资源文件支持包级别和类级别。
(1).包级别的国际化资源文件:
在Action同一个包下,添加国际化资源文件,命名规则如下:
Package名称_zh_CN.properties,Package名称_en_US.properties.
(2).类级别国际化资源文件:
在Action同一目录下添加国际化资源文件,命名规则如下:
Action名称_zh_CN.properties,Action名称_en_US.properties
18.在资源文件中使用动态参数:
(1).在资源文件的value中使用占位符“{0}”,“{1}”等,如
hello=hello:{0},{1},{2}
(2).使用MessageFormat类格式化value,如:
String result = MessageFormat.format(hello, new Object[]{“zhangsan”,”lisi”,”wangwu”});
19.在Struts2中使用国际化:
(1).JSP页面使用国际化资源资源文件:
方式1使用Struts2的text标签:使用<s:text name=”资源文件的key”/>
方式2使用Struts2标签中的key属性:如<s:input name=”…” key=”资源文件的key”>
(2).Action的message信息国际化:
使用ActionSupport中的getText(资源文件的key);方法。
(3).XML校验框架中使用国际化资源文件:
在校验框架文件的message标签中配置key=”资源文件的key”即可。
20.临时国际化资源文件:
Struts2的JSP中也支持指定临时的国际化资源文件,方法为:
注意:其中的<s:text>还可以使用<s:param>指定参数。
21.Struts2使用国际化资源文件的原理:
(1).获得Locale:Locale locale = Locale.US/Locale.CN等等。
(2).根据Locale匹配国际化资源文件:
(3).通过资源文件的key获取配置文件中的value: