<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="action" namespace="/action" extends="struts-default">
<!-- 全局的 -->
<global-results>
<result name="main">/main.jsp</result>
</global-results>
<action name="userAction" class="com.cn.nnny.action.UserAction">
<result>/success.jsp</result>
</action>
<action name="teacherAction" class="com.cn.nnny.action.TeacherAction">
<result>/success.jsp</result>
</action>
</package>
<!-- 继承 -->
<package name="department" namespace="/department" extends="action">
<action name="departmentAction" class="com.cn.nnny.action.DepartmentAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
注意,在struts.xml的user action里并没有一个result叫mainPage,怎么会跳到main.jsp呢? 原因是假如有许多的action,他们都有一个共同的结果,如果你配在每一个action里面,就太多太麻烦了,与其这样,不如把它写在一个地方,这个地方就叫< global-result >,在package name="user"下面大家可以共用的这样的结果集。
这里有个麻烦点的事,就是在package name="user"里有个结果集在另外一个package nane="admin"里它也想用,那就用在package nane="admin"标签里加上extend="user" extend逻辑上来说非常简单,从另外一个包的配置里继承。但是话又说回来,这东西继承来继承去有好多继承关系,你到时候项目管理起来会很困难,所以一般的,对于我们的工作有什么意义呢?我告诉你,真正工作中你用extends,也是很常见的,比如在学生管理系统里,我们分了4个模块,用户管理,权限管理,老师管理,学生管理,4个模块,每个模块有自己的配置,但是有一些配置大家是可以共用的,比如说出错之后返回某个页面,又比如返回到不存在的action就让它返回到主页,这些东西不用在每个模块里都配,这时候就可以来个主要的配置,然后让所有其它的包都从我这里继承,是不是就有意义啦??没错,这样就有意义了。
package nane="admin"extend了"user",package name="user" extends了“struts-default”,那么struts-default又是什么东东呢?它又在哪里呢? 它在struts2-core-2.1.6.jar包的struts-default.xml里,里面这么定义
<package name="struts-default" abstract="true">
有个属性abstract="true"说明这是个抽象包,说明这个包里面不是用来干别的,就是用来给其它包继承的,和我们java里讲的继承没什么区别,这包里面定义了一大推的result-type和各种各样的拦截器,还有拦截器栈。 由于它把默认的配置都给你们归类了,你的配置就简单了,你只需要配置extends="struts-default"就行了。
拦截器的原理,提前跟大家说,跟filter的原理一模一样。servlet容器是可以配filter的,我们的每一个请求都要穿过一系列的filter才能到达真正处理的地方