Struts2的知识整理总结(二)—— Action 应用总结

Action应用总结

       

之前我们已经总结了Struts2的基本配置和设置。下面我来说一下具体的实现流程

一、实现Action的三种方式

Action类就是一个POJO类

POJO类:

        POJO(Plain Ordinary Java Object)简单的Java对象。简单来说,没有继承某个类,没有实现接口,就是POJO的类。

Action类可以实现Action接口

        Action接口中定义了5个常量,5个常量的值对应的是5个逻辑视图跳转页面(跳转的页面还是需要自己来配置),还定义了一个方法,execute方法。

大家需要掌握5个逻辑视图的常量

        SUCCESS      -- 成功.

        INPUT        -- 用于数据表单校验.如果校验失败,跳转INPUT视图.

        LOGIN         -- 登录.

        ERROR        -- 错误.

        NONE        -- 页面不转向.

Action类可以去继承ActionSupport

        对请求参数进行校验

        设置错误信息

        读取国际化信息

二、在Action中获取Servlet相关API的三种方式

在Action类中也可以获取到Servlet一些常用的API,有如下三种方式获取

   * 完全解耦合的方式

   * 使用接口注入的方式

   * 使用ServletActionContext中静态方法直接访问Servlet的API

完全解耦合的方式

        如果使用该种方式,Struts2框架中提供了一个类,ActionContext类,该类中提供一些方法,通过方法获取Servlet的API

一些常用的方法如下:

        static ActionContext getContext()       获取ActionContext对象实例

        java.util.Map<java.lang.String,java.lang.Object> getParameters()      获取请求参数,相当request.getParameterMap();

       java.util.Map<java.lang.String,java.lang.Object> getSession()    获取的代表session域的Map集合,就相当于操sessio域

        java.util.Map<java.lang.String,java.lang.Object> getApplication()    获取代表application域的Map集合

        void put(java.lang.String key, java.lang.Object value)         注意:向request域中存入值。

使用接口注入的方式

        Struts2框架中提供了一些接口,编写的Action类可以是去实现这些接口,然后实现这些接口中的方法,这些方法都是把一些Servlet的常用对象通过参数的方式传递进来。

常用的接口如下:

        *ServletRequestAware      -- 注入request

        *ServletContextAware       -- 注入ServletContext

        *ServletResponseAware    -- 注入response.

使用ServletActionContext中静态方法直接访问Servlet的API

        Struts2框架提供了一个类,ServletActionContext,该类中提供了一些静态的方法

具体的方法如下:

        * getPageContext();

        * getRequest()

        * getResponse();

        * getServletContext();

三、访问Action的三种方式

通过<action>标签中的method属性,访问到Action中的具体的方法

传统的配置方式

具体的实例如下:

        页面代码

 配置文件的代码

Action的代码

通配符的访问方式

        使用通配符的方式可以简化配置文件的代码编写,而且扩展和维护比较容易。

具体实例如下:

        页面代码

                    <a href="${pageContext.request.contextPath}/order_add.action">添加订单</a>                                            <a href="${pageContext.request.contextPath}/order_delete.action">删除订单</a>

 

        配置文件代码
        <action name="order_*" class="cn.zlq.demo.OrderAction" method="{1}"></action>
        Action的代码              public String add(){ 
                     System.out.println("添加订单");    
                     return NONE;
              }             
              public String delete(){
                     System.out.println("删除订单");  
                     return NONE;            
              }
通配符更抽象的写法

具体的实例如下:

        页面的代码

                <a href="${pageContext.request.contextPath}/OrderAction_add.action">添加订单</a>
        配置文件代码
                <action name="*_*" class="cn.zlq.demo.{1}" method="{2}"></action>
        Action的代码
                public class OrderAction extends ActionSupport{                 
                        public String add(){                     
                                System.out.println("添加订单");                     
                                return NONE;                 
                        }             
                }

动态方法访问的方式 

        如果想完成动态方法访问的方式需要开启一个常量,struts.enable.DynamicMethodInvocation = false,把值设置成true。

        注意:不同的Struts2框架的版本,该常量的值不一定是true或者false,需要自己来看一下。如果是false,需要自己开启

在struts.xml中开启该常量。

                <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

具体代码如下

        页面的代码

                <a href="${pageContext.request.contextPath}/product!add.action">添加商品</a>             
            <a href="${pageContext.request.contextPath}/product!delete.action">删除商品</a>
        配置文件代码
               <action name="product" class="cn.zlq.demo.ProductAction"></action>

  



四、对结果页面的跳转


结果页面存在两种方式

全局结果页面

条件:

        如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果页面。

        全局结果页面针对的当前的包中的所有的Action,但是如果局部还有结果页面,会优先局部的。

使用的标签是

               

局部结果页面

                <result>/demo/suc.jsp</result>


结果页面的类型

         结果页面使用<result>标签进行配置,包含两个属性

                name   -- 逻辑视图的名称

                type  -- 跳转的类型,值一些,需要掌握一些常用的类型。常见的结果类型去struts-default.xml中查找。

                       *dispatcher        -- 转发.type的默认值.Action--->JSP

                       *redirect           -- 重定向. Action--->JSP

                       *chain                 -- 多个action之间跳转.从一个Action转发到另一个Action.  Action---Action

                       *redirectAction   -- 多个action之间跳转.从一个Action重定向到另一个Action. Action---Action

                       *stream               -- 文件下载时候使用的.




下一章节:Struts2的知识整理总结(三)—— 数据封装和类型转换

上一章节:Struts2的知识整理总结(一)


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值