【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

 

posted @ 2020-08-29 15:10  emdzz  阅读(158)  评论(0)    收藏  举报