更新时间:2022-10-01 21:11:39
我们来简单地了解一下Struts的执行流程,然后再慢慢对上面的开发步骤的部分进行讲解….
下边我说的都是struts流程的重点:
Dispatcher dispatcher = init.initDispatcher(config);
,初始化dispatcher下面用GIF图来看看它的执行过程:
细心的朋友可能会发现,我们在struts.xml的package节点下,extends了struts-default….那struts-default究竟是什么东西呢?
我们找到它的源码:
我们发现了一大堆的Bean,interceptor,result-type,interceptor-stack…下边我来讲解一下它们是干嘛用的…
还要补充的就是:默认的拦截器栈有18个拦截器….
拦截器和过滤器都是拦截资源的
拦截器只拦截Action请求,是struts的概念…
过滤器拦截web的所有资源,是Servlet的概念…
服务器启动的时候,其实就是加载了web.xml文件,然后调用init()方法去加载struts.xml和struts-default.xml之类的文件…..
注意:此时的拦截器是还没有被调用的。
在服务器启动的阶段,仅仅是加载了各种的xml文件…那么当我们访问Action的时候,它的执行流程是怎么的呢?
值得注意的是:每访问Action一次,它就会创建一个对象…它并不是和Servlet一样只有一个对象…因此它是线程安全的.
这是我们的struts.xml的内容,相信现在对它也不会太陌生了…
<struts> <package name="hello" extends="struts-default"> <action name="hello" class="action.HelloAction" method="execute"> <result name="success">/index.jsp</result> </action> </package> </struts>
package其实就是包,那包用来干什么?包就是用来管理Action
通常来说,我们都是一个业务模版对应一个package
name是包的名字,值得注意的是,包的名称是不能重复的。
extends代表的是当前包继承着哪个包。在struts中,包一定要继承着struts-default
在package中还有abstract这个属性,使用该属性时:表明当前包被其他的包继承…并且,在package下不能有action,否则会出错!
在package中还有namespace这个属性---名称空间….它是作为路径的一部分的,默认是"/"
action:配置请求路径与Action类的映射关系
name是请求路径的名字
class是处理action类的全名
method是调用的方法名称
result代表的是Action中业务方法返回的值
name是action处理返回的值
type是跳转的类型
文本值是跳转的路径
前边已经说了,一个package应该对应一个业务模块..目的就是把职能细分出来…
struts为了让我们更好地管理xml文件,它还可以这样做:在不同的模块中用不同的xml文件进行描述…
最后在struts.xml文件中将其引入即可..
<!--struts在运行的时候总会加载这个文件--> <!--总配置文件总引入其他的文件--> <struts> <include file="privilegeaction/privilege.xml"/> <include file="useraction/hello.xml"/> </struts>