`
tinguo002
  • 浏览: 25709 次
  • 性别: Icon_minigender_1
  • 来自: 福建
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Struts2的工作原理

阅读更多

Struts2的工作原理

(2009-02-26 14:35:54)
<script></script>标签:

it

分类:技术讲解

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

 

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);

 

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;

 

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

 

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

 

6、ActionProxy创建一个ActionInvocation的实例。

 

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

 

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

 

注:以上步骤参考至网上,具体网址已忘记。在此表示感谢!

 

3.3Struts2源代码分析

      和Struts1.x不同,Struts2的启动是通过FilterDispatcher过滤器实现的。下面是该过滤器在web.xml文件中的配置:

代码清单6:web.xml(截取)

   <filter>

      <filter-name>struts2</filter-name>

      <filter-class>

           org.apache.struts2.dispatcher.FilterDispatcher

      </filter-class>

   </filter>

   <filter-mapping>

      <filter-name>struts2</filter-name>

      <url-pattern>

 

   publicstaticfinalStringHTTP_REQUEST="com.opensymphony.xwork2.dispatcher.HttpServletRequest";

   

   publicstaticfinalStringHTTP_RESPONSE="com.opensymphony.xwork2.dispatcher.HttpServletResponse";

   

   publicstaticfinalStringSERVLET_DISPATCHER="com.opensymphony.xwork2.dispatcher.ServletDispatcher";

   

   publicstaticfinalStringSERVLET_CONTEXT="com.opensymphony.xwork2.dispatcher.ServletContext";

   

 publicstaticfinalStringPAGE_CONTEXT="com.opensymphony.xwork2.dispatcher.PageContext";

   

   publicstaticfinalStringSTRUTS_PORTLET_CONTEXT="struts.portlet.context";

}

 

   容器启动后,FilterDispatcher被实例化,调用init(FilterConfig filterConfig)方法。该方法创建Dispatcher类的对象,并且将FilterDispatcher配置的初始化参数传到对象中(详情请参考代码清单10),并负责Action的执行。然后得到参数packages,值得注意的是,还有另外三个固定的包和该参数进行拼接,分别是org.apache.struts2.static、template、和org.apache.struts2.interceptor.debugging,中间用空格隔开,经过解析将包名变成路径后存储到一个名叫pathPrefixes的数组中,这些目录中的文件会被自动搜寻。

 

代码清单9:FilterDispatcher.init()方法

   publicvoidinit(FilterConfig filterConfig)throwsServletException {

       this.filterConfig = filterConfig;      

       dispatcher = createDispatcher(filterConfig);

       dispatcher.init();      

       String param = filterConfig.getInitParameter("packages");

       String packages ="org.apache.struts2.static template org.apache.struts2.interceptor.debugging";

       if(param !=null) {

            packages = param +" "+ packages;

       }

       this.pathPrefixes= parse(packages);

}

 

代码清单10:FilterDispatcher.createDispatcher()方法

   protectedDispatcher createDispatcher(FilterConfig filterConfig) {

       Map<String,String> params =newHashMap<String,String>();

       for(Enumeration e = filterConfig.getInitParameterNames(); e.hasMoreElements(); ) {

           String name = (String) e.nextElement();

           String value = filterConfig.getInitParameter(name);

           params.put(name, value);

       }

       returnnewDispatcher(filterConfig.getServletContext(), params);

   }

 

   当用户向Struts2发送请求时,FilterDispatcher的doFilter()方法自动调用,这个方法非常关键。首先,Struts2对请求对象进行重新包装,此次包装根据请求内容的类型不同,返回不同的对象,如果为multipart/form-data类型,则返回MultiPartRequestWrapper类型的对象,该对象服务于文件上传,否则返回StrutsRequestWrapper类型的对象,MultiPartRequestWrapper是StrutsRequestWrapper的子类,而这两个类都是HttpServletRequest接口的实现。包装请求对象如代码清单11所示:

代码清单11:FilterDispatcher.prepareDispatcherAndWrapRequest()方法

 

来源:(http://blog.sina.com.cn/s/blog_5ec49e1d0100c3t7.html) - Struts2的工作原理_周超_新浪博客
分享到:
评论

相关推荐

    struts2工作原理

    struts2工作原理、请求响应流程。。。。。。。。。。。。。。。

    Struts2工作原理

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

    struts2工作原理.doc

    ### Struts2工作原理 #### 一、Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是Struts1的下一代版本,基于WebWork框架,并融合了Struts1的一些特性,形成了一个新的MVC(Model-View-Controller)框架...

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

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

    Struts2 工作原理 Struts2框架 有图

    ### 二、Struts2工作流程详解 #### 1. 请求初始化 一切始于客户端发起的HTTP请求,该请求通常包含用户提交的数据和请求的资源标识符。请求首先到达Web服务器的Servlet容器,如Apache Tomcat。 #### 2. 过滤器链 ...

    struts2工作原理图

    理解Struts2的工作原理是深入学习和有效利用该框架的关键。下面将详细介绍Struts2的工作流程。 1. **请求接收**:当用户在浏览器中提交一个HTTP请求时,这个请求首先会被Web服务器(如Apache Tomcat)接收到。如果...

    struts2工作原理及源码分析学习笔记

    在本文中,我们将深入探讨Struts2的工作原理和源码分析,以帮助理解其内在机制。 1. **Struts2架构图**: 当一个HTTP请求到达服务器时,它首先通过一系列Filter(过滤器),包括ActionContextCleanUp,该过滤器...

    struts2工作原理.

    总的来说,Struts2的工作原理是通过一系列的组件协作,实现了从用户请求到业务逻辑处理再到视图展示的完整流程。它通过拦截器机制提供了强大的扩展性,使得开发者可以轻松地插入自定义的行为,增强了应用程序的灵活...

    struts2工作原理.docx

    下面将详细解释Struts2的工作原理,以便深入理解其核心流程。 1. **客户端请求**:当用户在浏览器中发起一个HTTP请求,该请求会被发送到服务器上的Servlet容器,例如Apache Tomcat。 2. **过滤器链**:请求首先会...

    Struts2工作原理图

    现在我们来详细解析Struts2的工作原理。 首先,当客户端发起一个HTTP请求到服务器,这个请求会到达Servlet容器,如Tomcat。在Struts2框架中,一系列的过滤器(Filter)会介入这个请求处理流程。其中,...

    Struts2工作原理模拟

    在Struts2的工作原理中,有几个核心概念和技术值得深入理解: 1. **前端控制器(Front Controller)模式**:Struts2框架基于Servlet API中的Filter设计模式实现前端控制器,即`StrutsPrepareAndExecuteFilter`。它...

    struts2 工作原理.rar

    理解Struts2的工作原理是提升Java web开发技能的关键。 **工作流程** 1. **请求接收**:当用户在浏览器中发起HTTP请求,请求到达应用服务器,Struts2拦截器会捕获这个请求。Struts2的核心是Front Controller,即`...

    struts2配置与工作原理

    ### Struts2配置与工作原理详解 #### 一、Struts2概述 Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的...对于希望进一步了解Struts2工作原理的开发者来说,掌握以上提到的关键知识点是非常重要的。

Global site tag (gtag.js) - Google Analytics