工作原理:
第一步:项目启动时,通过web.xml中的以下过滤器加载struts.xml文件
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<!-- -->
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
以下是该过滤器的源码:
第二步:加载struts.xml文件。
在package中继承了struts-default
<package name="csdn" namespace="/test" extends="struts-default">
<action name="helloworld" class="cn.csdn.action.HelloWorldAction">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
该struts-default位于struts核心类下的struts-default.xml中的struts-default包,这个包中定义了所有的结果集类型和拦截器。
比如下面这个actionMappingParams拦截器,就通过set和get方法实现了我们参数的传递。
<interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>
第三步:启动项目之后,struts.xml被加载到内存中,之后每次对struts.xml的访问都到内存中。
根据浏览器中的地址,系统到struts.xml中找到相应的package和action。
根据action中的method方法,到类中调用该方法。(如果没有method方法,则调用execute方法,这个我在上一章提过)
根据方法的返回值,到刚刚的action中找相应的result