1、修改web.xml
要在web应用中使用Struts2框架,首先修改web.xml,在web.xml中加入:
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
将所有的请求(/*),都映射到struts2过滤器中进行处理。
2、增加struts.xml
struts.xml文件放置在/WEB-INF/classes文件夹根目录中,具体配置参见struts.xml详解。
3、增加处理类
根据struts.xml中的配置,增加Action处理类。。Action类可以不继承任何其他的类和实现其他的接口,只要是一个具有public String execute()方法的POJO类即可。
4、使用UI标签
标签库是Struts2的一个重要组件。
5、完成国际化
5.1 定义国际化资源文件
编写.properties文件,对于包含非西欧字符的资源文件,一定要使用native2ascii命令来处理,否则看到的是一堆乱码。
5.2 加载资源文件
在struts.properties文件中,增加:
struts.custom.i18n.resources=messageResource,表明资源文件的baseName是messageResource,放置在/WEB-INF/classes目录下。如果struts.custom.i18n.resources=source.messageResource,表明资源文件的baseName是messageResource,放置在/WEB-INF/classes/source目录下
6、增加数据校验
6.1 通过集成ActionSupport
ActionSupport类是一个工具类,已经实现了Action接口,还实现了Validateable接口,通过重写validate方法,如果校验表单的输入域存在错误,则将错误添加到ActionSupport类的fieldErrors域中。
public void validate() {
if(this.getUsername()==null||this.getUsername().trim().equals("")){
this.addFieldError(username, "用户名不能为空");
}
if(this.getPassword()==null || this.getPassword().trim().equals("")){
this.addFieldError(password, "密码不能为空");
}
}
validate方法会在execute方法执行之前执行,如果执行该方法以后,存在校验错误,请求会被转发到input逻辑视图处。
所以必须在struts.xml中配置action时指定<result name=”input”>/input.jsp</result>.
struts2的<s:form>标签默认提供了输入校验错误的能力,所以如果存在校验错误,会自动在页面上显示。
为了使用国际化,不能把校验提示信息以硬编码的方式写死,而是调用getText(key)的方法,来提取错误提示信息。
6.2使用struts2 的校验框架
增加一个校验配置文件,文件名命名规则:<ActionClassName>-validation.xml,将该文件与action文件放置在同一个文件夹下。
如果对一个Action中的多个方法进行校验,校验文件的命名规则为:<ActionClassName>-别名-validation.xml
Struts2的验证框架为了使验证信息通用,指定了较为复杂的验证继承关系,当验证框架需要验证一个Action的时候,会按照以下的优先级收集验证信息:
父类-validation.xml
父类-别名-validation.xml
接口-validation.xml
接口-别名-validation.xml
Action类名-validation.xml
Action类名-别名-validation.xml
别名其实对应的就是<action>元素的method属性的值,因此,虽然看着很多,其实我们只需要记住基本的顺序是:父类 > 接口 > Action类 就可以了。
注意:要使用Struts2的校验框架,需要Action继承ActionSupport