***struts2 流程分析
1.启动时,ConfigurationProvider用来加载配置文件,子类StrutsXmlConfigurationProvider 加载struts.xml文件
2.系统正常运行,用户发出HttpRequest请求,FilterDispatcher拦截请求,执行doFilter方法
3.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 requests
根据该信息可以找到对应的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)
5.创建拦截器和业务Action,ActionProxy创建ActionInvocation,由ActionInvocation实际创建Interceptors和Action
6.执行操作,先执行拦截器,再执行action;ActionProxy.exute()-->ActionInvocation.invoke()-->
Intercepter.intercept()-->ActionInvocation.invokeActionOnly()-->invokeAction()
1.启动时,ConfigurationProvider用来加载配置文件,子类StrutsXmlConfigurationProvider 加载struts.xml文件
2.系统正常运行,用户发出HttpRequest请求,FilterDispatcher拦截请求,执行doFilter方法
3.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 requests
and Config from struts.xml or properties)
3.2 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,ActionProxy创建ActionInvocation,由ActionInvocation实际创建Interceptors和Action
6.执行操作,先执行拦截器,再执行action;ActionProxy.exute()-->ActionInvocation.invoke()-->
Intercepter.intercept()-->ActionInvocation.invokeActionOnly()-->invokeAction()