***struts2 流程分析
参数和已经加载的configuration,生成映射文件actionMapping
ActionMapping mapping=
actionMapper.getMapping(request, dispatcher.getConfigurationManager());
and Config from struts.xml or properties)
(Simple class that holds the action mapping information used to invoke a Struts Action)
属性:(String namespace,String name,String method,Map params,Result result,String extension);
--ActionProxy动态代理对象,用的是cglib的动态代理。
动态代理:代理对象在执行被代理对象的操作前后,可以加入自己的业务逻辑。同时不破坏原来的封装性
Intercepter.intercept()-->ActionInvocation.invokeActionOnly()-->invokeAction(
)
1.启动tomcat
启动时,ConfigurationProvider用来加载配置文件,子类StrutsXmlConfigurationProvider 加载struts.xml文件。2.用户发请求,Struts2拦截
系统正常运行,用户发出HttpRequest请求,FilterDispatcher拦截请求,执行doFilter方法3.核心控制类,FilterDispatcher
in the FilterDispatcher doFilter method,映射工具类ActionMapper 根据 request参数和已经加载的configuration,生成映射文件actionMapping
ActionMapping mapping=
actionMapper.getMapping(request, dispatcher.getConfigurationManager());
备注:
3.1 ActionMapper 映射工具类,根据请求和加载的配置,生成映射类
(The ActionMapper interface provides a mapping between HTTP requestsand Config from struts.xml or properties)
3.2 ActionMapping 映射类
ActionMapping 映射类,用来存放根据请求和配置文件,生成的映射信息
根据该信息可以找到对应的Action 方法和所需的参数(Simple class that holds the action mapping information used to invoke a Struts Action)
属性:(String namespace,String name,String method,Map params,Result result,String extension);
4.创建代理对象
创建ActionProxy对象,dispatcher.serviceAction(request, response, servletContext, mapping)--ActionProxy动态代理对象,用的是cglib的动态代理。
动态代理:代理对象在执行被代理对象的操作前后,可以加入自己的业务逻辑。同时不破坏原来的封装性
5.创建拦截器和Action
创建拦截器和业务Action,ActionProxy创建ActionInvocation,由ActionInvocation实际创建Interceptors和Action6.执行
执行操作,先执行拦截器,再执行action;ActionProxy.exute()-->ActionInvocation.invoke()-->Intercepter.intercept()-->ActionInvocation.invokeActionOnly()-->invokeAction(
)