zoukankan      html  css  js  c++  java
  • Struts2的工作原理

      Struts2是在Struts1的基础上发展而来的,Struts是WebWork和Struts1的集合,采用的正是WebWork的核心,更多的是WebWork。

      下载的Struts2源代码文件

      

      主要的包和类:

    包名

    说明

    org.apache.struts2. components

    该包封装视图组件,Struts2在视图组件上有了很大加强,不仅增加了组件的属性个数,更新增了几个非常有用的组件,如updownselectdoubleselectdatetimepickertokentree等。

    另外,Struts2可视化视图组件开始支持主题(theme),缺省情况下,使用自带的缺省主题,如果要自定义页面效果,需要将组件的theme属性设置为simple

    org.apache.struts2. config

    该包定义与配置相关的接口和类。实际上,工程中的xmlproperties文件的读取和解析都是由WebWork完成的,Struts只做了少量的工作。

    org.apache.struts2.dispatcher

    Struts2的核心包,最重要的类都放在该包中。

    org.apache.struts2.impl

    该包只定义了3个类,他们是StrutsActionProxyStrutsActionProxyFactoryStrutsObjectFactory,这三个类都是对xwork的扩展。

    org.apache.struts2.interceptor

    定义内置的截拦器。

    org.apache.struts2.util

    实用包。

    org.apache.struts2.validators

    只定义了一个类:DWRValidator

    org.apache.struts2.views

    提供freemarkerjspvelocity等不同类型的页面呈现。

      重要类的说明:

    类名

    说明

    org.apache.struts2.dispatcher. Dispatcher

          该类有两个作用:

           1、初始化

           2、调用指定的Actionexecute()方法。

    org.apache.struts2.dispatcher. FilterDispatcher

          这是一个过滤器。文档中已明确说明,如果没有经验,配置时请将url-pattern的值设成/*

          该类有四个作用:

           1、执行Action

           2、清理ActionContext,避免内存泄漏

           3、处理静态内容(Serving static content

           4、为请求启动xwork’s的截拦器链。

    com.opensymphony.xwork2. ActionProxy

           Action的代理接口。

    com.opensymphony.xwork2. ctionProxyFactory

          生产ActionProxy的工厂。

    com.opensymphony.xwork2.ActionInvocation

          负责调用Action和截拦器。

    com.opensymphony.xwork2.config.providers.XmlConfigurationProvider

          负责Struts2的配置文件的解析。

     

      工作原理:

      

      Struts工作机制:

    1. 客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。

     请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、FilterDispatcher)。注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。

     2. FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。

      FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。

     3. ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。

      4.ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。

    5. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。

    Struts 2的核心控制器是FilterDispatcher,有3个重要的方法:destroy()、doFilter()和Init(),可以在Struts 2的下载文件夹中找到源代码,如代码3.1所示。

  • 相关阅读:
    【Javascript】javascript学习 二十二 JavaScript 对象简介
    【Javascript】javascript学习 二十六 JavaScript Boolean(逻辑)对象
    【Javascript】javascript学习 二十九 JavaScript HTML DOM 对象
    【Javascript】javascript学习 二十八 JavaScript RegExp 对象
    【Javascript】javascript学习 二十一 JavaScript 指导方针
    【Javascript】javascript学习 二十三 JavaScript 字符串(String)对象
    【Javascript】javascript学习 三十 JavaScript 浏览器检测
    【Javascript】javascript学习 二十五 JavaScript Array(数组)对象
    【Javascript】javascript学习 二十四 JavaScript Date(日期)对象
    【Javascript】javascript学习 二十七 JavaScript Math(算数)对象
  • 原文地址:https://www.cnblogs.com/lxq0309/p/3662834.html
Copyright © 2011-2022 走看看