ActionProxy的构建过程:
ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
namespace, name, method, extraContext, true, false);
首先生成DefaultActionInvocation,
然后到了这个工厂类:通过该工厂类生成proxy。同时prepare也初始化了DefaultActionInvocation。
public class StrutsActionProxyFactory extends DefaultActionProxyFactory {
@Override
public ActionProxy createActionProxy(ActionInvocation inv, String namespace, String actionName, String methodName, boolean executeResult, boolean cleanupContext) {
StrutsActionProxy proxy = new StrutsActionProxy(inv, namespace, actionName, methodName, executeResult, cleanupContext);
container.inject(proxy);
//这个方法做了一些初始化工作,其中同时初始化了method.
/**
初始化method的代码
private void 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 (StringUtils.isEmpty(this.method)) {
this.method = config.getMethodName();
if (StringUtils.isEmpty(this.method)) {
this.method = ActionConfig.DEFAULT_METHOD;
}
methodSpecified = false;
}
}
这段代码说明了如果没有在xml中配置method,那么会默认调用execute方法。
*/
proxy.prepare();
return proxy;
}
}
ActionConfig其中封装了xml中的一条配置信息:
public class ActionConfig extends Located implements Serializable {
public static final String DEFAULT_METHOD = "execute";
public static final String WILDCARD = "*";
protected List<InterceptorMapping> interceptors; // a list of interceptorMapping Objects eg. List<InterceptorMapping>
protected Map<String,String> params;
protected Map<String, ResultConfig> results;
protected List<ExceptionMappingConfig> exceptionMappings;
protected String className;
protected String methodName;
protected String packageName;
protected String name;
protected Set<String> allowedMethods;
分享到:
相关推荐
ActionProxy是Struts2中的一个重要组件,因为它封装了Action的实例化和调用过程。通过ActionProxy,开发者可以实现更复杂的逻辑,如动态Action映射或延迟加载Action。 Struts2的视图组件被封装在`org.apache.struts...
总结来说,Webwork中的Action调用涉及到类关系的构建、参数的获取与包装、ActionProxy的创建以及Action的执行。通过这一系列过程,Webwork能够高效地处理用户请求,执行业务逻辑,并将结果呈现给用户。理解这些核心...
总的来说,Struts2架构的核心在于FilterDispatcher、ActionMapper、ActionProxy、ActionInvocation、拦截器和ActionContext,它们共同协作,实现了请求处理、业务逻辑执行以及响应生成的过程。这种设计模式使得...
1. **ActionContext**:ActionContext是Struts 2中的一个核心类,它在请求处理过程中存储了所有上下文相关的数据,比如值栈、参数、session、request、response等。它是一个线程局部变量,确保了不同请求之间的数据...
Struts2是一个强大的Java web应用程序框架,用于构建和部署企业级的MVC(Model-View-Controller)架构应用。理解其运行流程对于开发者来说至关重要,因为它可以帮助优化代码、提高性能并减少开发中的错误。现在,让...
Struts2是一个流行的Java web框架,它主要用于构建MVC(模型-视图-控制器)架构的应用程序。在本文中,我们将深入探讨Struts2的运行流程,了解它是如何处理用户的请求并协调各个组件来实现业务逻辑和视图展示的。 ...
总的来说,Struts2的执行原理是通过过滤器链、ActionMapper、ActionProxy、ActionInvocation以及拦截器等组件协作,实现了从接收到HTTP请求到生成响应的全过程,提供了一套灵活且可扩展的MVC框架。
从客户端请求到最终视图的呈现,每个环节都有其独特的职责和功能,使得开发人员能够轻松地构建复杂的Web应用。此外,Struts2还提供了丰富的扩展机制,支持各种自定义需求,如自定义拦截器、视图结果等,为开发者提供...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,它为开发者提供了构建可扩展、易于维护的Web应用程序的工具。Struts2不仅继承了Struts1的优点,还引入了许多新的特性,如拦截器、动态...
- **ActionProxy**: 是一个代理对象,用于封装Action的创建和调用过程。它不直接包含Action实例,而是通过`ActionInvocation`来间接操作Action实例。默认的实现是`DefaultActionProxy`。 - **ActionInvocation**: ...
Struts2框架的核心设计围绕着请求处理流程构建,其主要目标是简化Web应用的开发过程,提高代码的可维护性和可扩展性。当一个HTTP请求到达时,Struts2通过一系列精心设计的组件和流程,将请求转化为具体的业务逻辑...
渲染过程中可以利用Struts2提供的各种标签库来简化页面的开发。 8. **后置拦截器**:执行完`Action`后,还会执行各个拦截器中的`invocation.invoke()`之后的代码,即后置拦截器。 9. **响应返回**:最后,将渲染后...
4. **Action执行**: 如果需要调用Action,则FilterDispatcher将请求交给ActionProxy,ActionProxy通过配置信息找到对应的Action并创建ActionInvocation实例。 5. **调用Action**: ActionInvocation实例在调用Action...
4. **build.properties**: 构建配置文件,定义了构建过程中的各种属性,如编译路径、依赖库等。 5. **build.xml**: Apache Ant的构建脚本,用于自动化构建、测试和打包过程。 6. **docs**: 这个目录可能包含项目的...
这样,我们就可以设置测试环境,然后调用`ActionProxy.execute()`方法来模拟请求处理过程。在这个过程中,我们可以检查拦截器是否按预期工作,验证框架是否正确执行了数据验证,以及Result是否返回了正确的视图。 ...
Struts 是一款经典的Java Web开发框架,主要用于构建MVC(Model-View-Controller)架构的应用程序。它简化了Web应用的开发过程,并提供了一种结构化的解决方案。下面将详细阐述Struts的工作流程。 1. **HTTP请求...
通过精心设计的过滤器链、Action代理机制以及强大的Interceptor体系,Struts2实现了高效、安全、可维护的应用程序构建。对于Java Web开发者而言,深入理解Struts2框架的工作原理,不仅能提升开发效率,还能在面对...
Struts2是一个流行的Java web框架,它为开发者提供了一种结构化的方式来构建MVC(Model-View-Controller)应用程序。其请求处理流程是Struts2的核心机制,它决定了当一个HTTP请求到达时,如何被转化为应用程序的动作...