博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现Action
阅读量:5271 次
发布时间:2019-06-14

本文共 2839 字,大约阅读时间需要 9 分钟。

实现Action 

 对于开发者来说,Action才是应用的核心,开发者需要提供大量的Action类,并在Struts.xml文件中配置Action。Action类中包含了用户请求的处理逻辑,Action也被称为业务控制器。

 相对于Struts1来说,Struts2采用了低侵入式的设计,Struts2不要求Action类继承任何的Struts基类,或者实现任何的Struts2的接口,在这种设计方式下,Struts2 的Action类只是一个普通的POJO(简单的Java对象),通常包含一个无参数的execute方法,从而有很好的代码复用性。

  Struts2通常是使用Action来封装HTTP请求参数的,因此Action中还应包含于请求参数对应的属性,并且为这些属性提供getter和setter方法

  例如:用户请求参数包含了user和pass两个请求参数,那么Action应该提供user和pass两个属性用来封装用户的请求参数,如下

package com.strtus2.action;//处理用户请求的Action类只是一个普通的Java类public class LoginAction {    private String user;    private String pass;    public String getUser() {        return user;    }    public void setUser(String user) {        this.user = user;    }    public String getPass() {        return pass;    }    public void setPass(String pass) {        this.pass = pass;    }    // Action类默认处理用户请求的方法:execute()    public String execute() {        // 返回处理结果字符串        return resultStr;    }}

   即使Action需要处理的请求包含了user和pass两个HTTP请求参数,Action类也可以不包含user和pass变量,因为系统是通过对应的getter和setter方法来处理请求参数的,而不是通过变量名来处理请求参数的,也就是说,如果包含了user的HTTP请求参数,Action类是否包含了user变量并不重要,重要的是包含了void setUser(String user)和 String getUser()两个方法

  Action类里的属性,不仅可以用于封装请求参数,还可以用于封装处理结果。例如,我们希望将服务器提示的“登录成功”或者其他的信息在下一个页面输出,那么可以在Action中增加一个tip属性,并未该属性提供对用的setter和gettier方法,既为Action类增加如下代码。

   private String tip;    public String getTip() {        return tip;    }    public void setTip(String tip) {        this.tip = tip;    }

 

  

  一旦在Action中设置了tip属性的值,就可以在下一个页面中使用Struts2标签来输出该属性的值,例如在JSP页面中输出了tip属性值

  <s:property value="tip"/>

   系统不会严格的区分Action中哪个是用于封装请求参数的值,哪个属性是用来封装处理结果的,对系统而言,封装请求参数和封装处理结果的属性是完全平等的。如果系统中包含了名为tip的请求参数,则系统回调用Action类的void setTip(String tip)方法,通过这种方法,名为tip的请求参数就可以传入Action实例,如果没有void setTip(String tip)方法,那么名为tip的请求参数是不能传入到Action实例的。

  同样,在JSP页面中输出Action属性时,它也不会区分该属性时用于封装请求参数还是用于封装处理结果,因此,使用Struts2的标签库既可以输出Action的处理结果,也可以输出请求参数的值。

  从上面可以看出,使用struts2的标签库可以输出一个简单的字符串,使用<s:property..../>标签来控制输出,实际上,Action类中可以封装非常复杂的属性,包括其他用户自定义的类,数组,集合对象和Map对象,对于这些复杂类型的输出,一样可以通过Struts2的标签来完成。

 

一.Action接口和ActionSupport基类

  为了让用户开发的Action更规范,Struts2提供了一个Action接口,这个接口定义了Struts2的Action处理类应该实现的规范。

public class Action {    // 定义Action接口中的一些字符串    public static final String ERROR = "error";    public static final String INPUT = "input";    public static final String LOGIN = "login";    public static final String NONE = "none";    public static final String SUCCESS = "success";    // 定义用户请求的execute方法    public String execute() throws Exception {        return null;    }}

 

  Action中定义了一个execute方法,该接口的规范规定了Action类应该包含一个execute方法,该方法返回一个字符串,除此之外,该接口还定义了5个字符串常量,它们的作用是统一execute方法的返回值,如果开发者希望使用特定的字符串作为返回值也是可以的。

  另外,Struts2还提供了一个ActionSupport类,该类是实现Action接口的类,该类中提供了许多的默认方法,因为ActionSupport完全符合一个Action的要求,多有我们可以直接使用ActionSuppot作为业务控制器,如果我们配置Action是没有指定特定的类(既用户没有提供Action类),系统就会自动使用ActionSupport类作为Action处理类。

 

转载于:https://www.cnblogs.com/zhilili/p/10923961.html

你可能感兴趣的文章
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>
c# 文件笔记
查看>>
第一页 - 工具的使用(webstorm)
查看>>
Linux 进程资源用量监控和按用户设置进程限制
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>