分享
 
 
 

超级简单的mvc框架ajf1.2发布

王朝vc·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

没有在网上公开发部,与大家一同学习,分享,交流经验,旧版本的代码可以参考我以前的文章,设计思路上差不多。新版本中加入了preHandler,postHandler,exceptionHandler等方法,可自定义实现,这个来自于spring mvc,其实以前有,只不过不是叫这些名字,改了之后显得更专业些

加入了 自动事务处理功能

调用start()即可,其后的数据库操作加入事务容器,自动提交,回滚

当然 "事务容器"只是个概念,用把template和proxy即可轻松实现的,当然也不支持分布式事务拉,不过应付一般项目足以与webwork类似,action来一个new一个,没有线程安全问题action里可放心大胆使用成员变量

配置文件在见jf.XML

关于跳转路径

有!前缀的使用redirect,没有的则forward

ajf (agile Java framework)

// power magic action ,from struts,webwork and spring mvc

//组合使用 command,template,proxy,decorator,filter,chain等设计模式

//实现了类似aop功能,轻松实现日志,权限,连接,事务等问题

//拥有一个超强魔力的action基类

//还可以覆盖实现preHandler,postHandler,exceptionHandler

//做各种各样的前置后置异常处理等动作

//在这里你可以看到struts,webwork,spring mvc等框架的影子

//BaseAction extends Action

//XXXAction extends BaseAction

//一个action多个操作

//根据method参数 ,利用反射调用相应的execute方法,如execute_query

//可采用传统mvc框架配置也可零配置,在jsp页面里直接调用action

一个用户增删改查的例子,所有操作都写在一个action里

下面是BaseAction和UserAction的代码及注释

//------------------

//---------------------------

BaseAction.java

package com.zjuee.action;

import java.util.*;

import com.zjuee.mvc.*;

import com.zjuee.*;

public class BaseAction extends Action{

String action = null;

String actionClassName = null;

long start = 0;

long end = 0;

Map ajf_system_request_map = null;

long diff=0;

//看到这些方法的名字就晓得是怎么回事了,

//分别是前置,后置,异常处理器

//与webwork类似,action来一个new一个,没有线程安全问题

//放心大胆使用成员变量

public String preHandler()throws Exception{

/*

LogUtil.info("tiger",StringUtil.getNowTime());

action = AjfUtil.getAction(request);

actionClassName = this.getClass().getName();

LogUtil.info("action="+action+",method="+method);

LogUtil.info(actionClassName+",pre handler,"+StringUtil.getNowTime());

*/

ajf_system_request_map = JspUtil.getRequestModel(request);

start=StringUtil.getNowMs();

return null;

}

public String postHandler()throws Exception{

/*

LogUtil.info(actionClassName+",post handler,"+StringUtil.getNowTime());

LogUtil.debug(actionClassName+",post handler,"+StringUtil.getNowTime());

LogUtil.warn(actionClassName+",post handler,"+StringUtil.getNowTime());

*/

end=StringUtil.getNowMs();

diff=end-start;

LogUtil.info(diff+","+JspUtil.getUrl(request)+","+ajf_system_request_map);

return null;

}

public void exceptionHandler(Exception e)throws Exception{

LogUtil.error(actionClassName+",exception handler,"+e+","+StringUtil.getNowTime());

return;

}

}

//------------------------

//----------------------------UserAction.java

package com.zjuee.action;

import com.zjuee.mvc.*;

import com.zjuee.*;

import java.util.*;

// power magic action ,from struts,webwork and spring mvc

//组合使用 command,template,proxy,decorator,filter,chain等设计模式

//实现了类似aop功能,轻松实现日志,权限,连接,事务等问题

//拥有一个超强魔力的action基类

//还可以覆盖实现preHandler,postHandler,exceptionHandler

//做各种各样的前置后置异常处理等动作

//在这里你可以看到struts,webwork,spring mvc等框架的影子

//BaseAction extends Action

//XXXAction extends BaseAction

//一个action多个操作

//根据method参数 ,利用反射调用相应的execute方法,如execute_query

//可采用传统mvc框架配置也可零配置,在jsp页面里直接调用action

public class UserAction extends BaseAction{

public String execute()throws Exception{

return execute_query();

}

public String execute_query()throws Exception{

createTable();

String sql = "select * from t_user";

conn=DBUtil.getConn();

//just get connection

//close,commit,rollback,

//exception handle in parent class

//all is auto

//连接的释放,事务处理,异常处理,日志,权限 在父类进行

//手动开启事务,调用start()方法即可,

//其后的所有数据库操作将纳入事务管理容器,

//自动提交,回滚,关闭Connection

//当然不支持分布式事务,不过应付一般的项目足以

//简单的crud操作,在action里直接调用jdbc封装类

//如果业务复杂,则可用service包裹,注入connection即可

//关于分层设计,该分的时候分,该合的时候合

Map map = PagedUtil.queryString(conn,sql,1,1,request);

//分页查询,两个标志位分别表示主键列数,是否显示chechbox,供选择记录进行查看,编辑,删除操作

//返回数据表格和工具条,key值分别为data 和 page_bar

//如果是大数据量查询,可设置db_query_max_row 参数

add(map);

return "q";

//如果在jsp页面里直接调用则返回null即可,

//Action action = new UserAction();

//action.run(request,response,"query");

//run(request,respnse,"method_name");

// user$query.do

// user$method.do

// 根据method参数 ,利用反射调用相应的execute方法,如execute_query

//execute 命名方法

}

public String execute_input()throws Exception{

return "input";

}

public String execute_insert()throws Exception{

String table = "t_user";

String cols = "id,name,hh,ww,birth_day";

int autoPK = 1;

conn=DBUtil.getConn();

DBUtil.insert(conn,table,cols,autoPK,model);

return "!query";

}

public String execute_edit()throws Exception{

Map user = null;

String objectid = (String)model.get("objectid");

String sql = "select * from t_user where id='"+objectid+"'";

conn = DBUtil.getConn();

user = DBUtil.queryOne(conn,sql,null);

//sql = "select * from t_user where id=?"

//user = DBUtil.queryOne(conn,sql,new Object[]{objectid});

if(user==null){

return "no_object";

}

model.put("user",user);

return "edit";

}

QQread.com

推出各大专业服务器评测 Linux服务器的安全性能

SUN服务器

HP服务器

DELL服务器

IBM服务器

联想服务器

浪潮服务器

曙光服务器

同方服务器

华硕服务器

宝德服务器

public String execute_view()throws Exception{

Map user = null;

String objectid = (String)model.get("objectid");

String sql = "select * from t_user where id='"+objectid+"'";

conn = DBUtil.getConn();

user = DBUtil.queryOne(conn,sql,null);

//sql = "select * from t_user where id=?"

//user = DBUtil.queryOne(conn,sql,new Object[]{objectid});

if(user==null){

return "no_object";

}

model.put("user",user);

return "view";

}

public String execute_update()throws Exception{

String table = "t_user";

String cols = "id,name,hh,ww,birth_day";

int autoPK = 1;//主键是否自增 ,max(id)+1

conn = DBUtil.getConn();

DBUtil.updateRow(conn,table,cols,1,model);

return "!query";

}

public String execute_delete()throws Exception{

String sql = "delete from t_user where id ";

DBUtil.batchDelById(sql,request);

return "!query";

}

private void createTable(){

String sql = null;

sql = "create table t_user(id int primary key,name varchar(50),hh numeric(8,3),ww numeric(8,3),birth_day datetime)";

try{

DBUtil.update(sql,null,request);

}catch(Exception e){}

}

}

//--------------------配置文件ajf.xml

<ajf>

<view name="error">/pages/commons/error.jsp</view>

<view name="home">/pages/commons/ajf_home.jsp</view>

<view name="no_object">/pages/commons/no_object.jsp</view>

<action name="/pages/user/user" class="com.zjuee.action.UserAction">

<view name="query">user.do</view>

<view name="q">user_query.jsp</view>

<view name="input">user_input.jsp</view>

<view name="edit">user_edit.jsp</view>

<view name="view">user_view.jsp</view>

</action>

<action name="/pages/user/x" forward="/pages/user/user.do"/>

<action name="/xx" forward="!/pages/user/user.do"/>

</ajf>

enjoy!

giscat 20061121

(出处:http://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有