pfc.jar应用初步理解

服务器启动时,加载配置文件,把相关的信息放在静态变量(假设静态变量为list)中。
URL=*1.req?action=*3&req=*2
*1自定义,与请求无关
*2对应config.xml中handler
*3对应*2(即config.xml中handler)中的action

一个req请求的具体请求过程:

首先判断*2在list中是否存在,即*2是否在config.xml中

其次调用实现接口Authorize的类的init()、canAccess()方法(该实现类在web.xml中配置),true继续执行,false转到错误页面/defaultError.jsp,显示错误信息"Sorry, you can not do it..."(在canAccess()方法中对什么进行判断:我理解的是:对control.xml和roles.xml进行操作。control.xml和roles.xml中配置一些请求req1、req2,req1是针对一些特殊的请求(例如不同用户类型都可以访问),req2针对不同的用户类型,配置不同的请求,即用户权限下的特有的请求。总之,根据具体的情况,在请求URL与control.xml、roles.xml三者之间进行一些比较,返回一个boolean值。另外也可以在canAccess()中设置一些请求过程中需要的变量)

然后调用实现Handler接口并继承RequestHandler类的类,调用process()方法:
首先调用verify()方法(在此方法中调用RequestHandler中的stdVerify(request, response),首先判断请求URL中的action是否存在,存在则判断action中对应的sql是否存在,否则均显示错误信息"Sorry, could not process your request."。
然后判断当前请求中verify中配置的参数是否可以得到值,如果得不到,显示错误信息(此错误信息在en.xml中配置,如果有,显示配置的错误信息,没有显示错误信息"must be specified.")。
最后对当前请求中fileField中配置进行判断(还未弄明白)),判断请求的错误信息,返回一个StringBuilder类型存放错误信息的errors。
其次判断errors是否为空,不为空存放在HashMap类型的result中,为空调用RequestHandler中的execute():即执行action中配置的sql及对应类中的方法,得到对应的信(cn.xml中配置,_s代表成功,_f代表失败),执行实现ForwardStyle接口的类(见web.xml中)中forwarding()方法决定返回路径,最后如果请求对应的类中有以action+Request为方法名的方法便执行,具体执行过程请参考RequestHandler类。

span:代表另一个handler
commitSet和commitFlag一般组合使用,commitSet不为空,则设为手动提交。sql执行成功,如果commitFlag不为空,则提交、设为自动提交;sql执行失败,如果commitFlag、commitSet有一个不为空,则回滚、设为自动提交。
result:public static boolean isExpectedResult(String resultDescriptor//result对应的参数, int rst//执行sql影响的行数)
{
if (resultDescriptor.length() < 3)
return false;
String cmp = resultDescriptor.substring(0, 2);
String value = resultDescriptor.substring(2, resultDescriptor.length());
Integer reqRst = Assistor.str2Integer(value);
if (reqRst == null)
return false;
if (cmp.equals("EQ"))
return rst == reqRst.intValue();
if (cmp.equals("LT"))
return rst > reqRst.intValue();
if (cmp.equals("LE"))
return rst >= reqRst.intValue();
if (cmp.equals("ST"))
return rst < reqRst.intValue();
if (cmp.equals("SE"))
return rst <= reqRst.intValue();
else
return false;
}
该返回值决定该sql执行是否成功
processed_by_handler:执行以sql的name为方法名的方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值