【Struts2】02 过程分析
首先是访问了这个地址:
http://localhost:8080/hello.action
请求访问的第一个资源是工程设置的过滤器:
<filter> <filter-name>Struts2-Filter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>Struts2-Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
过滤器在服务器启动时创建,而Servlet默认是在被首次访问的时候创建
过滤器的执行过程:
1、获取到请求路径
2、得到请求的URL配置的名称: hello.action
3、找到并读取src目录下的struts.xml配置文件
4、读取使用DOM4J进行解析
5、得到的URL名称值与XML解析的action标签中的name属性进行匹配
6、匹配成功,找到action标签中的class属性的值,即是访问的资源类
7、找到HelloAction访问类的默认方法execute【使用反射实现】
// 通过action标签配置的class属性得到这个类 Class<?> HelloActionClass = Class.forName("cn.dzz.action.HelloAction"); // 默认获取execute方法对象 Method executeMethod = HelloActionClass.getDeclaredMethod("execute"); // 调用方法 Object invoke = executeMethod.invoke(HelloActionClass.newInstance()); // 我们的方法返回了字符串OK ,判断结果,如果是字符串则得到这个字符串OK if (invoke instanceof String) { String urlMapping = invoke.toString(); }
8、通过urlMapping与这个action标签的result标签的name进行匹配,读取标签的值,就是要访问的资源页面
源码分析:
org\apache\struts2\dispatcher\ng\filter\StrutsPrepareAndExecuteFilter.class
Struts2的这个过滤器,通过重写init方法,加载Struts2的配置文件,初始化拦截器的配置信息
同时包含我们自己编写的配置文件

初始化分发器:
下面又有一个空参的初始化方法
init.initDispatcher(config);

按照顺序加载了这些配置文件:

所在类:
org.apache.struts2.dispatcher.Dispatcher
其中第三个配置方法,可以看到这个:

也就是我们自己配置的struts.xml

浙公网安备 33010602011771号