Java Web框架DIY.docx
《Java Web框架DIY.docx》由会员分享,可在线阅读,更多相关《Java Web框架DIY.docx(16页珍藏版)》请在冰豆网上搜索。
![Java Web框架DIY.docx](https://file1.bdocx.com/fileroot1/2022-12/31/ac45a9d7-eb6f-4d6c-a15a-097d5950e47c/ac45a9d7-eb6f-4d6c-a15a-097d5950e47c1.gif)
JavaWeb框架DIY
一,为什么要DIY
当前,成熟的javaweb框架有很多种,我们为什么还要自己弄一个呢?
我的看法如下:
首先,现在的主流框架过于庞大,使用起来过于繁琐,这一点从ROR给java带来的冲击就能看出来,
用ROR开发一个web程序如此简单,反思java,难道我们真的需要那么多复杂的步骤吗?
其次,现在的用户越来越追求画面的体验,而java主流框架产生的时间相对比较早,对web2.0的考虑相对少一些,
对ajax的封装不足,框架处理这类问题比较笨拙。
另外,java框架太注重自身的发展,缺乏和新事物的融合,在某种程度上阻碍了自身的进步。
二,DIY的原则
第一,简单就是美。
围绕解决用户的需求这个核心,方案越简洁高效越好。
例如,我们没有必要为了某种形式写一大堆get,set方法。
第二,坚持自己认为正确的方向。
比如说有人不喜欢SQL,希望把对数据库的操作封装起来,进而实现对数据库产品无依赖的编程,
但是,我不这么认为,我喜欢SQL,SQL是高效的,如果把oracle提供的递归查询弃置不用,而是自己编程实现,复杂度不必说了,
就执行效率而言,同前者不可同日而语。
我认为一个复杂的项目必须针对具体的数据库产品的特性编程,毕竟程序运转中,
代码是固定的,而不断变化的是数据,我们必须事先对数据库有足够的重视,而不是事后把责任推给DBA。
所以,在我的DIY框架中
使用SQL是正常的。
第三,博采众长。
只要不违反知识产权,很多好的,开源的东西,我们尽可能的采用。
当然,使用前你要确定这些东西是安全可靠的。
三,DIY举例
下面对一个具体的组合框架进行刨析,希望对大家有所启发,起到抛砖引玉的作用。
先介绍一下该框架的原理。
说白了很简单,就是利用jquery增强画面效果,用json进行数据传递。
其实网络中介绍jquery+ajax+json的文章很多,
但是,都是说返回一个json,用它的内容渲染页面,我在这里更近了一步,不但回来的是json,传到后台的数据也是json,
并在此基础上做了一些封装。
需要引入的外部资源:
jquery.js,著名的js库;json2.js,js的json工具;org.json,java操作json的类包;sqlitejdbc-v053.jar,
sqlite的jdbc驱动,因为只是做一个demo所以用了一个我知道的最简单的数据库。
json_param.js算是一个jquery插件。
把dom中的内容做成json;包装了一下jQuery.ajax,使其调用更简单。
//Addadomparametertojson.
$(document).ready(function(){
jQuery.jsonParam={
jsonRetn:
newObject(),
registParaToJson:
function(dom){
if(dom.is("table")){
vararryData=newArray();
$('tr:
gt(0)',dom).each(function(){
varcurRow=newObject();
$('td',$(this)).each(function(index){
if($(this).children().is("input[type=text]")){
curRow[index]=$('input[type=text]:
eq(0)',this).val();
}
elseif($(this).children().is("input[type=radio]")){
curRow[index]=$('input[type=radio]:
eq(0)',this).attr("checked");
}
elseif($(this).children().is("input[type=checkbox]")){
curRow[index]=$('input[type=checkbox]:
eq(0)',this).attr("checked");
}
elseif($(this).children().is("select")){
curRow[index]=$('select:
eq(0)',this).val();
}
else{
curRow[index]="";
}
});
arryData.push(curRow);
});
$.jsonParam.jsonRetn[dom.attr('id')]=arryData;
}
elseif(dom.is("input[type=text]")||dom.is("select")){
$.jsonParam.jsonRetn[dom.attr('id')]=dom.val();
}
elseif(dom.is("input[type=checkbox]")||dom.is("input[type=radio]")){
$.jsonParam.jsonRetn[dom.attr('id')]=dom.attr("checked");
}
},
passEventToJson:
function(even){
$.jsonParam.jsonRetn.passEvent=even;
},
getParamFromJson:
function(){
returnJSON.stringify($.jsonParam.jsonRetn);
},
ajaxJson:
function(url,callback){
returnjQuery.ajax({
type:
"post",
url:
url,
dataType:
"json",
data:
{'param':
$.jsonParam.getParamFromJson()},
success:
callback
});
}
}
});
first.jsp一个jsp,注意$.jsonParam.registParaToJson往后台传值的使用。
<%@pagelanguage="java"contentType="text/html;charset=utf-8"%>
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN">
$(document).ready(function(){
$('#contentdiv').html(' ');
$("#idm").change(function(){
$.jsonParam.passEventToJson('idm');
$.jsonParam.registParaToJson($('#idm'));
$.jsonParam.ajaxJson("SecondServlet",
function(response){
$('#contentdiv').empty();
$.each(response,function(entryIdex,entry){
$('#contentdiv').append(entry['MAIN_DISH']);
});
}
);
});
$("#b_pass").click(function(){
$.jsonParam.passEventToJson('b_pass');
$.jsonParam.registParaToJson($('#idm'));
$.jsonParam.registParaToJson($('#t_demo'));
//~$.jsonParam.ajaxJson("SecondServlet",
//~function(response){
//~$('#ret_table').empty();
//~varhtm='';
//~$.each(response,function(entryIdex,entry){
//~htm+='
' //~htm+='
'+entry['0']+' | ' //~htm+='
'+entry['1']+' | ' //~htm+='
'+entry['2']+' | ' //~htm+='
'
//~});
//~htm+=''
//~$('#ret_table').append(htm);
//~}
//~);
$("#param").attr("value",$.jsonParam.getParamFromJson());
$("#form1").attr("action","SecondServlet");
$("#form1").submit();
returntrue;
});
});
What'sforDinner?
...
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday