zoukankan      html  css  js  c++  java
  • Struts2之Action的实现

    对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filter,根据请求的Action,来决定生成哪个Action类的实例对象。

    不同与servlet,一个类要成为Action类并不需要继承任何Struts2的基类,或者实现任何接口。

    public class  LoginAction

    {

         private   String  name;

         private   Sting  password;

         //name Field的setter方法和getter方法

          ......

         //password  Field的setter方法和getter方法

          .....

         //Action类默认的处理用户请求的方法:execute()        类似于servlet类中service()方法

         public  String   execute()

        {

               .........                      //处理代码

        }

    }

    分析一下一个请求到Action中被处理的整个过程:              --------这个地方也是Struts2框架的核心

    页面的一个请求,请求中有两个属性name,password     →    该请求被Struts2的核心Filter拦截  → 可能先根据常量配置对请求参数进行解析,转码等操作   →  

    核心Filter根据该请求所请求的Action类,生成这个Action类的实例对象(根据struts.xml配置文件的对应关系,生成实例对象利用了反射技术)    →  

    核心Filter把请求中属性 调用Action类的实例对象的setter方法赋给实例对象Field    →    通过Action类的实例对象调用execute()方法来处理请求,放回一个逻辑视图名   →

    核心Filter根据放回的逻辑视图名  对应于struts.xml配置文件中逻辑视图名与物理视图名对应关系  ,转发到物理视图页面    

    由这个过程可见核心Filter对于整个过程起了举足轻重的作用,而这个核心Filter究竟是如何详细的处理的不用程序员关心 。

    一个类是Action类 是不需要实现任何接口或继承任何基类的    但是Struts2框架为了使开发者开发的Struts更加规范  ,提供了Action接口和ActionSupport基类   ,程序员可以选择的进行实现或继承  

    Action接口     ---------包含了一些结果字符串

    ActionSupport类    -------是Action接口的实现类  ,里面提供了一些默认的方法 

    Action访问Servlet的API

    不同于Struts1, Struts2的Action没有与任何的Servlet API耦合 ,但是我们又想使用servlet中的几大对象如ServletContext对象 ,request对象  ,response对象,session对象 ,application对象怎么办?

    大概有三种方式:

    1.通过ActionContext类的实例对象 ,调用该类提供的方法

         这种方式并不是真正的拿到了request对象,response对象 ....   那些方法返回不是request对象........,但是向其中添加值,与向request对象.....,添加值得效果相同。

    2.通过让该Action类选择实现ServletContextAware接口 ,ServletRequestAware接口 ,ServletResponseAware接口 

         这种方式可以获得requst对象....,但是想获得某个对象,就要实现特定的接口,也不是很方便。

    3.通过ServletActionContext工具类

         getPageContext()

         getRequest()

         getResponse()

         getServletContext()

         这种方式可以获得pageContext对象,request对象,reponse对象,servletContext对象。这种方式最方便,推荐使用这种方式。

  • 相关阅读:
    039、Data Volume 之 bind mount (2019-02-28 周四)
    038、Docker 的两类存储资源(2019-02-27 周三)
    037、外部网络如何访问容器 (2019-02-26 周二)
    036、容器如何访问外部世界 (2019-02-25 周一)
    035、容器间通信的三种方式(2019-02-22 周五)
    034、理解容器之间的连通性(2019-02-21 周四)
    033、如何自定义容器网络(2019-02-20 周三)
    032、学容器必须懂bridge网络(2019-02-19 周二)
    031、none和host网络的适用场景(2019-02-18 周一)
    030、实现容器的底层技术(2019-01-25 周五)
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4117268.html
Copyright © 2011-2022 走看看