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对象。这种方式最方便,推荐使用这种方式。

  • 相关阅读:
    解决 git 同步时 Everything up-to-date
    vs2019 git Authentication failed for xxx
    vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
    vs2017 使用 reportviewer
    var,dynamic的用法
    水晶报表报无法在资源中找到报表,请重新创建项目 错误
    css隐藏元素的方法
    css-浮动与清除浮动的原理详解(清除浮动的原理你知道吗)
    正则并不适合严格查找子串
    浏览器加载、渲染过程总结
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4117268.html
Copyright © 2011-2022 走看看