Struts2的配置可以分成三个单独的文件
Web.xml
Structs.xml
Struct.properties
Web.xml
FilterDispatcher是一个servlet过滤器,它是整个Web应用的配置项,需要在“web.xml”中进行配置:
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Struct.properties
剩下的就是自定义一些Web应用的执行环境和
在Struts2-Core的jar发行版中,有一个默认的属性文件,名为“default.properties”。如果要对属性进行修改的话,只需要在项目的源代码目录下,创建一个叫做“struts.properties”的文件,然后把想要修改的属性添加到文件中,新的属性就会把默认的覆盖掉了
struts.xml
配置应用中的组件。
Include标签:
<include … /> 是<struts>标签的一个子标签,它可以把其他配置文件导入进来,从而实现Struts2的模块化。它的“file”属性定义了要导入的文件的名称——该文件要和“struts.xml”一样有着相同的结构。
The Package Tag
???
Action
1 在Struts2中,Action可以以几种不同的方式来工作
Action最常用也是最基本的用法就是执行操作后返回单个结果。这个Action类不需要继承其它类,也不需要实现其他接口。这样的类就是一个简单的POJO。
class MyAction {
public String execute() throws Exception {
return "success";
}
}
2 多个结果
现在情况稍微复杂了一些,Action需要根据逻辑运算的结果,来生成多个结果
class MyAction {
public String execute() throws Exception {
if( myLogicWorked() ) {
return "success";
} else {
return "error";
}
}
}
<action name="my" class="com.fdar.infoq.MyAction" >
<result>view.jsp</result>
</action>
因为这里有两个结果,所以就为每一种不同的情况来配置要呈现给用户的结果。配置文件就变成了如下的样子:
<action name="my" class="com.fdar.infoq.MyAction" >
<result>view.jsp</result>
<result name="error">error.jsp</result>
</action>
前面我们已经看到了定义Action结果的最通用的方式。而实际上我们还有另外四种方式:
1. Action方法返回一个字符串——这个返回的字符串与“struts.xml”的一个action配置相匹配。例子中已经演示这一种方式。
2. 使用Code behind插件 ——当使用这个插件的时候,它会将Action的名字和Action返回的结果字符串进行连接来得到视图模板。比如说,如果URL是“/adduser.action”,而Action返回了“success”,那么要渲染的页面就是“/adduser-success.jsp” 。更多信息请参见http://struts.apache.org/2.x/docs/codebehind-plugin.html。
3. 使用 @Result注解——action类可以用@Results 和@Result注解来标注多个不同的结果。Action所返回的字符串需要与所注解的结果之一相匹配。
4. 方法返回一个Result类的实例——Action不必一定要返回一个字符串,它可以返回一个Result类的实例,该实例应当是已经配置好可使用的
结果类型
??
拦截器
架构目标
些不同层次的功能都是Web开发人员应当了解的:
♦ 在请求/响应周期中,所完成的核心任务是执行特定于每个Action的逻辑功能。
♦Action要完成逻辑功能或者访问资源的话,必须要访问或者持有业务对象。
♦ 在把HTML中基于字符串的值转换成原始数据类型或其他对象类型,以及把视图对象转换成业务对象或者数据表表示的过程中,这期间需要完成多种转化,映射和变换。
♦ 有一些横切(cross-cutting)的目的是为成组的action,或者应用中的所有action提供功能的
惯例重于配置是Rails带入主流应用开发中的概念。
提高效率技巧
验证
声明式验证
编程式验证