Struts 原理阐述

刚接触STRUTS,下面代码有几点不懂,希望帮忙解释解释.

//为什么所有的action都要继承Action? 
public class LoginAction extends Action{ 
//为什么都是execute方法.可以给它改名吗? 
public ActionForward execute(ActionMapping mapping, Actionform form, 
HttpServletRequest request, HttpServletResponse response)throws AuctionException { 
//为什么要将form强制类型转换为Loginform,form里不是已经获取从页面提交的数据了吗?为什么不可以直接用form呢?还要类型转换? 
Loginform loginform = (Loginform)form; 
if ("123".equals(loginform.getUsername() && "123".equals(loginform.getPassword()){ 
return mapping.findForward("success"); 
}else{ 
return mapping.findForward("success"); 
} 
} 
} 

 

解释的不是太好:

 

因为 Strus 知道了你的类是 Action 的子类, 那他就可以放心的调用下面的代码来工作了:
Object yourAction = Class.forName("LoginAction").newInstance();
Action action = (Action)yourAction;
ActionForward forward = action.execute(mapping, form,
request, response);
// do forward
Struts 再神奇也是 Java 类啊, 你要是改了签名, 他就不知道该调用你的哪个方法来工作了啊, 所以它用父类和子类的多态功能来实现一个方法定义, 多种用途.
至于下面的方法, 也是这样的道理. 就是子类可以强制转换为父类而不报错.
还记得为啥所有对象的父类都是 Object 嘛? 因为这样 ArrayList 里面就可以写方法
add(Object object) 来添加任意对象了, 而不是每个类型都要写一个:
add(MyObject1 object1);
add(MyObject2 object2);
了.

例如中国人吧, 非文盲的都会写字, 这就相当于 Action 定义了一个功能点, 抽象方法, 但是没有留具体的实现, 因为你不能规定所有人都得写的一摸一样吧, 这也是实际情况. 但是如果实现没有这个限制, 非文盲, 你非要让一个具体的人(Action的子类)来写字, 那么幸运一点的它会写(实现了写字的具体功能), 也可能是碰到一个文盲, 不会写, 你非要逼着它写, 自然就会出错了. 至于 Actionform, 你可以用笔的概念来理解, 笔有各种各样的笔, 你实现并不会知道每个人会用什么样的笔来写字, 但是笔必须有一些属性, 设置好了才能被人用来写字, 注意是人用笔写字, 不是笔自己自动写字, 也就是人调用笔这个对象:

class 非文盲
{
    abstract method 写字(笔 pen);
}
//那你要找一个人来写字, 那它必须符合条件:
class 大学生 extends 非文盲
{
    method 写字(笔 pen) {
        // 他会选择用自己喜欢的笔写字, 例如 钢笔
        钢笔 myPen = (钢笔)pen;
        myPen.吸墨水();
        开始写字_用(myPen);
    }
}


Struts 中又规定并非所有的 Action 都必须先绑定一个 Actionform , 这也很好理解. 因为字并非非得用笔才能写出来, 如果我用自己的手指头直接在石碑上刻字(假设我练过大力金刚指), 或者我用键盘, 这些都用不到任何笔, 但是仍然可以写出字来.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值