1个回答
展开全部
WebWork 工作原理总结 一、WebWork的框架初始化过程 利用WebWork做的项目,在服务器启动时完成WebWork的框架初始化。具体是通过Web.xml中配置好的FilterDispatcher过滤器中的init(FilterConfig filterConfig)方法完成。并且web.xml中配置好FilterDispatcher的映射,当用户用映射好的结尾资源请求浏览器时,FillterDispather会进行请求处理. 具体实现是通过以下步骤:1、 通过FilterDispatcher中的public void init(FilterConfig filterConfig) throws ServletException方法,进行框架的初始化 2、 Init方法又同过调用DispatcherUtils类的public static void initialize(ServletContext servletContext)方法创建DispatcherUtils实例,同时间接调用DispatcherUtils类的protected void init(ServletContext servletContext)方法初始化Configuration 配置,创建对象创建的工厂ObjectFactory和ObjectTypeDeterminer。至此完成WebWork框架的初始化。 二、WebWork的用户请求处理过程所有以web.xml中映射FilterDispatcher结尾的服务请求将由FilterDispatcher进行处理。 1、从用户请求的服务名中解析出对应Action的名称。 具体完成是:户按webwork规则请求时,服务器会调用FilterDispatcher的doFilter方法,完成第二步的内容。 2、遍历 HttpServletRequest、HttpSession、ServletContext 中的数据,并将其复制到Webwork的Map中,为下一步创建Action事例打下基础。具体完成是:过调用DispatcherUtils的serviceAction方法中的 Map extraContext = createContextMap(request, response, mapping, context); 完成以上信息的封装。 3、以上一步封装好的信息为参数,调用 ActionProxyFactory创建对应的 ActionProxy实例。ActionProxyFactory 将根据 Xwork 配置文件(xwork.xml)中的设定,创建ActionProxy实例,ActionProxy中包含了 Action的配置信息(包括 Action名称,对应实现类等等)。 具体完成是:通过ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(namespace, name, extraContext, true, false);//创建动态代理 DefaultActionProxyFactory实现ActionProxyFactory的createActionProxy方法,返回new DefaultActionProxy(namespace, actionName, extraContext, true, true); DefaultActionProxy是对ActionProxy的默认实现,通过DefaultActionProxy 类的DefaultActionProxy(namespace, actionName, extraContext, true, true)构造方法实例化DefaultActionProxy,同时得到用户请求的actionName及namespace,并通过config = ConfigurationManager.getConfiguration().getRuntimeConfiguration().getActionConfig(namespace, actionName);ConfigurationManager的publicstaticsynchronized Configuration getConfiguration() { if (configurationInstance == null) { configurationInstance = new DefaultConfiguration(); try { configurationInstance.reload(); } catch (ConfigurationException e) { configurationInstance = null; throw e; } } else { conditionalReload(); } returnconfigurationInstance;} 完成对xwork.xml(具体操作类是XmlConfigurationProvider)配置信息的读取。获得与此次请求相关的ActionConfig 4、ActionProxy创建对应的Action实例,并根据配置进行一系列的处理程序。 通过DefaultActionProxy类的invocation = ActionProxyFactory.getFactory().createActionInvocation(this, extraContext); //通过createActionInvocation方法创建动作调用类ActionInvocation,处理被Action调用的方法 privatevoid resolveMethod() { // if the method is set to null, use the one from the configuration // if the one from the configuration is also null, use "execute" if (!TextUtils.stringSet(this.method)) { this.method = config.getMethodName(); if (!TextUtils.stringSet(this.method)) { this.method = "execute"; } }}然后调用DispatcherUtils的serviceAction方法中的if (mapping.getResult() != null) { Result result = mapping.getResult(); result.execute(proxy.getInvocation()); } else { proxy.execute();}完成用户的最终要执行的action方法。public String execute() throws Exception { ActionContext nestedContext = ActionContext.getContext(); ActionContext.setContext(invocation.getInvocationContext()); String retCode = null; try { retCode = invocation.invoke(); } finally { if (cleanupContext) { ActionContext.setContext(nestedContext); } } return retCode; }最终处理ActionContext对象将Action调用提交给ActionInvocation处理
记得采纳啊
记得采纳啊
VSH艾羽
2024-10-27 广告
2024-10-27 广告
ANSYS是一款功能强大的有限元分析软件,广泛应用于航空航天、汽车、电子、能源等多个领域。它能够进行结构、流体、热、电磁等多物理场的仿真分析,支持复杂的几何建模、高效的网格划分和多种求解器,帮助工程师优化产品设计,减少开发成本,提高生产效率...
点击进入详情页
本回答由VSH艾羽提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询