Struts2_04_Struts核心知识(3)

这一篇主要时  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>&nbsp;
<a href="student_add" target="_blank">学生信息添加</a>&nbsp;
<a href="student_update" target="_blank">学生信息修改</a>&nbsp;
<a href="student_delete" target="_blank">学生信息删除</a>&nbsp;
<br/><br/>
<a href="grade_list" target="_blank">班级信息查询</a>&nbsp;
<a href="grade_add" target="_blank">班级信息添加</a>&nbsp;
<a href="grade_update" target="_blank">班级信息修改</a>&nbsp;
<a href="grade_delete" target="_blank">班级信息删除</a>&nbsp;<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>

猜你喜欢

转载自blog.csdn.net/qq_27163329/article/details/81582900