这一篇主要时 struts.xml 的一些属性的介绍:
1.package 配置 name 包名 extends 继承 namespace 包命名空间 abstract 抽象包
2.action 配置 name action 名 class 处理类 method 方法
3.分模块配置方法 <includefile=""></include>
4.使用通配符
package 配置
name:包名,区分不同模块,比如区分前台和后台,是包的唯一标识。
extends:继承,指定该包继承的父包,子包可以从一个或多个父包中继承到拦截器、Action等配置,一般会继承Struts2自带的默认文 件struts-default.xml配置文件。继承多个父包时逗号隔开
namespase:定义带包的命名空间,访问package里面的action,需要加此前缀,因此命名空间不同,可以写相同的action
abstract:抽像包,不能写action,就好像抽象类不能写具体实现一样,只能是别的包继承。目的是过滤掉非法,敏感词汇的请求
下面通过简单实例,说明一下namespase:
stuts.xml:
<package name="foreground" namespace="/fore" extends="struts-default">
<action name="student" class="com.java.action.ForeAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
<package name="background" namespace="/back" extends="struts-default">
<action name="student" class="com.java.action.BackAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
两个包,namespase分别为/fore./back 模拟前台和后台
里面可以写相同的action:student,需要注意的是:返回后的页面,默认路径也是有前缀的,在根目录下的jsp文件,需要绝对路径${pageContext.request.contextPath}
action里面简单写一句System.out.println("执行BackAction默认方法");来区分不同就行:
当请求:
Action配置
name :action 名
class: 处理类
method: 默认执行的是execute方法,可指定处理类的方法。
public String show()throws Exception{
System.out.println("执行了ForeAction的show方法");
return SUCCESS;
}
<package name="foreground" namespace="/fore" extends="struts-default">
<action name="student" class="com.java.action.ForeAction" method="show">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
分模块配置方法
一个完整的项目,肯定包括很多的模块,为了便于管理,用<includefile=""></include> 把其分成若干个文件单独管理
比如一个系统包含 车辆管理,资产管理等等。
为了便于管理,用cheliang.xml和zichan.xml分别管理
在struts.xml:
<struts>
<include file="cheliang.xml"></include>
<include file="zichan.xml"></include>
</struts>
cheliang.xml:
<struts>
<package name="cheliang" namespace="/cheliang" extends="struts-default">
<action name="cheliang" class="com.java.action.CheLiangAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
</struts>
zichan.xml:
<struts>
<package name="zichan" namespace="/zichan" extends="struts-default">
<action name="zichan" class="com.java.action.ZiChanAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
</struts>
CheLiangAction:默认方法
public String execute()throws Exception{
System.out.println("执行CheLiangAction默认方法");
return SUCCESS;
}
当请求时:
使用通配符
index.jsp:
<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/>
</body>
在Action处理类中:
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String list()throws Exception{
System.out.println("学生查找");
name="学生查找";
return SUCCESS;
}
public String add()throws Exception{
System.out.println("学生添加");
name="学生添加";
return SUCCESS;
}
public String update()throws Exception{
System.out.println("学生修改");
name="学生修改";
return SUCCESS;
}
public String delete()throws Exception{
System.out.println("学生删除");
name="学生删除";
return SUCCESS;
}
发现所有的请求都是student_方法名。
所以在struts.xml中:
<struts>
<package name="manager" extends="struts-default">
<action name="student_*" method="{1}" class="com.java.action.StudentAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
<action name="grade_*" method="{1}" class="com.java.action.GradeAction">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
</struts>
用*来代替方法名,后面的method中的1指的是第一个通配符:
请求时:
其实,把所有的请求的student,grade的首字母大写,我们不难发现,请求不光与方法有关,还和处理类有关。这时 :
<struts>
<package name="manager" extends="struts-default">
<action name="*_*" method="{2}" class="com.java.action.{1}Action">
<result name="success">${pageContext.request.contextPath}/success.jsp</result>
</action>
</package>
</struts>