注:黄色字体为网络引用内容
一、include标签
include标签通常用于Struts的模块化配置,可以使Struts2配置更加清晰明了,不杂乱。
首先需要在Struts.xml配置一个入口
<struts>
<include file="cheliang.xml"></include>
<include file="zichang.xml"></include>
</struts>
其中 “cheliang.xml”等表示各个模块的Struts.xml cheliang.xml里面的配置和普通的相同 如:
<package name="cheliang" namespace="/cheliang" extends="struts-default">
<action name="cheliang" class="com.java1234.action.CheLiangAction" >
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
二、通配符 *
Struts.xml里可以用*号来代替字符 如:
<action name="Grade_*" class="com.java1234.action.GradeAction" method="{1}">
<result name="success">success.jsp</result>
</action>
其中 method="{1}" 表示 执行的方法名为 name中第一个*号 又:method="{2}" 即表示第二个 所以:
<action name="*_*" class="com.java1234.action.{1}Action" method="{2}">
<result name="success">success.jsp</result>
</action>-->
这样写也成立, 第一个*号来匹配Action名称 第二个*号来匹配方法名 以此类推。前端页面如:
<h1>通配符</h1>
<a href="Student_list" target="_blank">学生信息查询</a>
<a href="Student_add" target="_blank">学生信息添加</a>
<a href="Student_update" target="_blank">学生信息修改</a>
<a href="Student_delete" target="_blank">学生信息删除</a>
<br/><br/>
<a href="Grade_list" target="_blank">班级信息查询</a>
<a href="Grade_add" target="_blank">班级信息添加</a>
<a href="Grade_update" target="_blank">班级信息修改</a>
<a href="Grade_delete" target="_blank">班级信息删除</a> <br/>
此方法可以在Action标签里指定Action路径名称不用指定方法名,方法名写在请求的URL里。
需要在Struts.xml的 <Struts>标签下 添加:
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
表示本xml可以动态配置Action
前台页面如下:
<h1>动态方法调用</h1>
<a href="student!list" target="_blank">学生信息查询</a>
<a href="student!add" target="_blank">学生信息添加</a>
<a href="student!update" target="_blank">学生信息修改</a>
<a href="student!delete" target="_blank">学生信息删除</a>
<br/><br/>
<a href="grade!list" target="_blank">班级信息查询</a>
<a href="grade!add" target="_blank">班级信息添加</a>
<a href="grade!update" target="_blank">班级信息修改</a>
<a href="grade!delete" target="_blank">班级信息删除</a> <br/>
用感叹号来区分Action类名和其中的方法 参数可以这样写:student!add?name=xxxx
四、Action生命周期:
前台页面每次请求一次Action都会创建一个Action实例,返回后杀死,因此在多并发的情况下会比较耗资源
五、result配置:
type属性:type属性定义了该result的类型,有很多种,最经常用的有以下四种:
1、默认是dispatcher 内部转发
上面提到的例子即此类型
2、redirect 重定向
此类型会进行页面跳转,但不会传递参数。其他与 1 相同
3、chain 链条
此类型可以将此请求转发到另一个Action,两个Action都会相继执行:
<action name="hello" class="com.java1234.action.HelloWorldAction" >
<result name="c" type="chain">hello2</result>
</action>
<action name="hello2" class="com.java1234.action.HelloWorldAction2" >
<result name="success">success.jsp</result>
</action>
前台页面:
<a href="hello!c?name=Struts2" target="_blank">链条_chain</a>
HelloWorldAction
public String c() throws Exception {
return "c";
}
HelloWorldAction2
@Override
public String execute() throws Exception {
this.name2="你好啊";
return SUCCESS;
}
得到结果:
Name:Struts2
Name2:你好啊
4、redirectAction 重定向Action
此类型也可以进行Action的转发,与chain唯一的不同点是 第一个Action的参数不可传递到第二个Action
同代码得到结果如下:
Name:
Name2:你好啊
五、全局的result:
可以直接写在pacakage标签下:
<global-results>
<result name="error">error.jsp</result>
</global-results>
当在Action里找不到error的时候 会在全局results里找。执行效果与普通result相同