Struts2是什么?
Apache Struts是一个免费,开源,MVC框架;创建优雅,现代Java web应用程序。
它有利于约定优于配置,使用一个插件是可扩展的架构,和附带插件支持,AJAX和JSON。
Struts2原理:
Struts2在web.xml配置
<pre name="code" class="html"><span style="font-size:18px;"> <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></span>
1.首先用户通过HttpServletRequest用户请求发送过来;
2.这个请求经过一系列的过滤器 Fileter,如:ActionContextCleanUp(ActionContextCleanUp可选过滤器这个过滤器主要用于和其他的框架进行集成;例如SiteMesh)、Other filters、FilterDispatcher;
注:StrutsPrepareAndExecuteFilter过滤器在Struts2.1.3就把FilterDispatcher替代了
为什么FilterDispatcher会被代替呢?
我们往往会放在struts2顶端写我们自己的过滤器(filter),如果我想在执行Action之前去写过滤器,
FilterDispatcher是执行不了的,StrutsPrepareAndExecuteFilter就可以做到,在执行action之前执行我们自己写的过滤器。
3.FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器,请求发送到FilterDispatcher后,FilterDispatcher则把请求交到ActionMapper是否需要调用某个Action来出来这个Request(一般根据url的后缀是不是.action来判断);
4.如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求交到ActionProxy,有它进行处理;
5.ActionProxy通过configurationManager(它会访问struts.xml)询问框架的配置文件,找到需要调用的Action;
6.ActionProxy创建一个ActionInvocation实例,而ActionInvocation通过代理模式调用Action,(在调用之前会更加配置文件加载相关的所有Interceptor拦截器);
7.Action执行完毕之后,返回一个result字符串,此时再按照相反的顺序通过Interceptor拦截器;
8.最后ActionInvocation负责根据struts.xml中配置的result元素,找到返回值对应的result,决定进行下一步输出。