`

Struts2基本原理

阅读更多
框架可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

基本流程:
1. 客户端浏览器发出HTTP请求
2. 根据web.xml配置,该请求被FilterDispatcher接收
3. 根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Action。
4. Action调用业务逻辑组件处理业务逻辑,包含表单验证。
5. Action执行完毕,根据structs.xml中的配置找到对应的返回结果result,并跳转到相应页面
6. 返回HTTP响应到客户端浏览器

工作原理:
1. 客户端发起一个指向servlet容器的请求(如:Tomcat)
2. 这个请求会经过几个过滤器,到达FilterDispatcher过滤器
3. FilterDispatcher是struts2的核心,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里面的相关层数,并转换成相应的类,如:ConfigurationManager, ActionMapper 和 ObjectFactory。 ConfigurationManager存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在请求过程中得所有对象(如:Action,result,interceptors等)都是通过ObjectFactory来创建的。过滤器会通过ActionMapper类来查找请求中需要用到的Action。
4.如果找到需要调用Action,过滤器会把请求交给ActionProxy。ActionProxy为Action的代理对象。ActionProxy通过ConfigurationManger询问框架的配置文件,找到需要调用的Action类。
5. ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,表示了Action的执行状态,或者说控制Action的执行步骤。它持有Action实例和所有的Interceptor。
6. ActionInvocation实例使用命名模式来调用。在ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。通过ActionInvocation.invoke()方法按序调用所有的Interceptor后,调用Action的实现。并在返回时,再次调用Interceptor。
7. Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(不总是,也可能是另一个Action链)一个需要被表示的JSP或者FreeMarker的模板。在表示中的过程中可以使用struts2框架中的标签。



完整步骤与类的调用过程

1.客户端发送一个HTTP请求,tomcat接收后,查看web.xml,找到配置文件中的FilterDispatcher

2.FilterDispatcher中包含了ConfigurationManager和ActionMapper对象,ConfigurationManger中含有struts.xml, default-struts.xml等配置文件中得信息,ActionMapper中含有Action的信息。ActionMapper会查找本次请求需要调用的Action。如果没有找到就执行静态的资源请求。如果找到了action,就会调用dispatcher中得serviceAction方法。

在serviceAction方法中,会通过容器的反射机制获得ActionProxyFactory对象,通过工厂模式的方式创建一个ActionProxy实例。然后调用ActionProxy的execute方法。

3.struts调用的ActionProxy类为StructActionProxy,其中包含一个ActionInvocation对象,ActionProxy就调用ActionInvocation的invoke()方法。

4.默认调用的是DefaultActionInvocation类。ActionInvocation中持有从ActionMapper中获得的与本次请求相关的action类的信息,如namespace,name,需要调用的方法名method等。还持有与这个Action相关的所有Interceptor(protected Iterator<InterceptorMapping> interceptors;一个迭代器)。

在invoke方法中,会依次调用每一个Interceptor,实现方式是:
首先,判断迭代器是否还有下一个Interceptor(hasNext()方法),如果有就获得这个Interceptor调用它的intercept()方法,该方法的参数就是ActionInvocation本身。在Interceptor中又会再一次调用ActionInvocation的invoke方法,使得ActionInvocation能够调用下一个Interceptor。这样就完成了在调用Action之前的全部拦截工作。在调用完成全部的Interceptor之后,ActionInvocation开始调用Action。

在invokeAction()方法中,通过反射机制来获得需要调用的method方法
method = getAction().getClass().getMethod(methodName, EMPTY_CLASS_ARRAY);

其中:methodName是方法名,EMPTY_CLASS_ARRAY是常量Object[],说明该方法没有参数。
然后调用这个method方法:  methodResult = method.invoke(action, EMPTY_OBJECT_ARRAY); 并返回结果集


ActionInvocation根据结果集从配置文件中找到对应的返回结果。


由于invokeAction()方法是在最后一个Interceptor中调用ActionInvocation的invoke方法中被调用的,因此程序返回到最后一个Interceptor中,此时Interceptor就可以在请求返回时进行拦截操作。最后一个Interceptor返回的是倒数第二个Interceptor中调用invoke方法处,以此类推,就实现了与请求进入时顺序相反的拦截操作。例如ExceptionInterceptor拦截器的实现:在请求进入前给请求加上try/catch异常捕获块,在请求返回时,处理异常。


try{
    result =  invocation.invoke();
}catch(Exception e){
      … //异常处理操作。
}
  • 大小: 109.4 KB
分享到:
评论

相关推荐

    struts1 mvc基本原理

    本文将深入探讨Struts1的基本原理,帮助理解其架构设计和工作流程。 **1. MVC架构** MVC模式是软件工程中一种用于分离业务逻辑、数据和用户界面的设计模式。在Struts1中,Model代表应用程序的数据和业务逻辑,View...

    struts2基本lib架包

    总的来说,这个“struts2_basic_lib”压缩包是Struts2开发的基石,提供了构建web应用所需的全部基本组件。开发者可以通过深入学习这些库的功能和使用方式,掌握Struts2框架的核心原理,从而有效地开发出高效、可维护...

    strut2教程 基本原理及应用

    本教程旨在深入讲解Struts2的基本原理及其在实际开发中的应用。 一、Struts2基本原理 1. **Action和Result**:在Struts2中,业务逻辑主要由Action类执行,Action类是处理用户请求的核心组件。每个Action对应一个...

    Struts的工作原理

    在深入理解Struts的工作原理之前,我们先来简单回顾一下MVC模式的基本概念: **Model(模型)**:这是应用程序的核心业务逻辑,通常由Java Beans或Enterprise JavaBeans (EJBs)实现,它们处理数据和业务规则。 **...

    struts2的基本实现原理

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它极大地简化了构建基于Java的企业级应用程序的...通过理解和实践这些基本原理,你可以更好地掌握Struts2框架,从而高效地开发Java Web应用。

    Struts2工作原理

    ### Struts2工作原理深度解析 #### 引言 Struts2框架,作为Java Web开发领域的一款重要工具,其设计理念源自于WebWork框架,并融合了Struts1的优点,旨在提供更为强大、灵活的MVC(Model-View-Controller)架构...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    struts2小程序 struts2代码

    Struts2是一个强大的Java web应用程序框架,用于...通过分析源代码,可以深入理解Struts2的工作原理、配置机制以及MVC模式在实际项目中的应用。对于初学者,这是一个很好的实践平台,能帮助他们掌握Web开发的基本技能。

    struts运行基本原理(详细)

    标题:Struts运行基本原理(详细) 在深入探讨Struts框架的基本运行原理之前,我们首先应当明确Struts作为一款开源的MVC(Model-View-Controller)架构模式的实现,其核心价值在于将Web应用程序的业务逻辑、数据...

    留言板留言板struts2留言板struts2

    Struts2是一个强大的Java web应用程序框架,用于构建和部署企业级的MVC(Model-View-Controller)架构的Web应用。...通过分析和运行这个项目,可以深入理解Struts2的工作原理及其在实际应用中的运用。

    Struts2接口文档

    这个“Struts2接口文档”是开发者的重要参考资料,提供了关于Struts2框架内各个组件、类库以及接口的详细说明,帮助开发者深入理解框架的内部工作原理并有效地使用其功能。 Struts2的核心组件包括Action、Result、...

    Struts2视频教程

    - **Hello Struts2**:通过创建一个简单的“Hello World”示例,帮助开发者快速上手Struts2的基本配置和运行流程。 - **Action类详解**:Action类是Struts2的核心组件之一,负责处理用户的请求并返回相应的结果。...

    servlet模拟struts1工作原理

    Struts1是Apache组织开发的一个基于MVC(Model-View-Controller)设计模式的Web应用框架,它简化了开发...实际开发中,虽然Struts1已经被Struts2和其他现代框架取代,但了解其工作原理对理解和使用其他框架仍然有裨益。

    struts2简单例子

    这个“struts2简单例子”是初学者理解Struts2工作原理和核心概念的一个很好的起点。让我们深入探讨一下Struts2的基础知识。 1. **MVC架构**: MVC模式是软件设计中的一个经典模式,它将应用逻辑分为三个主要部分:...

    struts 基本原理和添加数据库

    **Struts基本原理** 1. **MVC模式**:在Struts中,模型(Model)通常由业务逻辑组件(如JavaBeans或EJBs)组成,负责处理数据;视图(View)是用户界面,通常由JSP页面实现;控制器(Controller)则是Struts的核心...

    struts2入门实例和工作(流程)原理

    本文将深入探讨Struts2的入门实例、工作原理及其主要组件。 首先,让我们从一个简单的Struts2入门实例开始。创建一个基本的Struts2应用通常包括以下几个步骤: 1. 引入Struts2的依赖库到项目中,这通常通过Maven或...

    传智播客struts2.1视频教程_介绍struts2及struts2开发环境的搭建

    通过这个视频教程,你将能够深入理解Struts2的基本原理和用法,学会如何利用Struts2构建一个简单的Web应用。同时,掌握Struts2的开发环境搭建,有助于你在实际项目中快速上手。传智播客的教程以通俗易懂的方式讲解,...

    Struts2的视频学习代码

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。这个“Struts2的视频学习代码”资料可能是...通过学习这部分代码,开发者能够初步掌握Struts2的基本操作和工作原理。

Global site tag (gtag.js) - Google Analytics