Java Web框架DIY.docx
- 文档编号:5675682
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:16
- 大小:19.70KB
Java Web框架DIY.docx
《Java Web框架DIY.docx》由会员分享,可在线阅读,更多相关《Java Web框架DIY.docx(16页珍藏版)》请在冰豆网上搜索。
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+='
//~htm+='
//~htm+='
//~htm+='
//~});
//~htm+=''
//~$('#ret_table').append(htm);
//~}
//~);
$("#param").attr("value",$.jsonParam.getParamFromJson());
$("#form1").attr("action","SecondServlet");
$("#form1").submit();
returntrue;
});
});
...
SecondServlet.java,后台Servlet,注意jreq.GetParameterFromJson中的参数,他的命名就是jsp中dom的id名,约定大于配置。
packageorg.demo;
importjava.io.*;
importjava.util.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importmon.*;
/**
*Thesimplestpossibleservlet.
*
*@authorchengj
*/
publicclassSecondServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{
Stringparam=request.getParameter("param");
JsonRequestjreq=newJsonRequest(param);
StringresWrite="";
SecondEntyenty=newSecondEnty();
if("idm".equals((String)jreq.GetParameterFromJson("passEvent")))
{
Stringkey=(String)jreq.GetParameterFromJson("idm");
resWrite=enty.getDish(key);
response.setContentType("application/json;charset=utf-8");
PrintWriterout=response.getWriter();
out.println(resWrite);
}
elseif("b_pass".equals((String)jreq.GetParameterFromJson("passEvent"))){
resWrite=enty.getDetail((ArrayList)jreq.GetParameterFromJson("t_demo"));
request.setAttribute("param",resWrite);
RequestDispatcherrd=request.getRequestDispatcher("/jsp/second.jsp");
rd.forward(request,response);
}
}
}
SecondEnty.java,SecondServlet的业务相关类。
packageorg.demo;
importjava.io.*;
importjava.util.*;
importjava.sql.*;
importmon.*;
/**
*Thesimplestpossibleservlet.
*
*@authorchengj
*/
publicclassSecondEntyextendsDBAccess{
privateConnectionconn=null;
publicStringgetDish(Stringkey){
StringretJson=null;
try{
PreparedStatementprep=super.conn.prepareStatement("SELECTday,main_dishFROMmenuwhereqsid=?
");
prep.setString(1,key);
retJson=JsonResponse.GetQuery(prep.executeQuery());
returnretJson;
}catch(Exceptione){
System.out.println(e.toString());
returnnull;
}
}
publicStringgetDetail(ArrayListtable){
ArrayListretTable=newArrayList();
for(inti=0;i
ArrayListarrRow=(ArrayList)table.get(i);
if(arrRow.get(3).equals("true")){
retTable.add(table.get(i));
}
}
returnJsonResponse.GetTable(retTable);
}
}
下面是两个公共类,负责request到json,以及json到response的转换任务
packagemon;
importjava.util.*;
importorg.json.*;
/**
*
*
*@authorchengj
*/
publicclassJsonRequest{
privateJSONObjectdata;
publicJsonRequest(Stringparam){
try{
this.data=newJSONObject(param);
}catch(JSONExceptione){
System.out.println(e.toS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java Web框架DIY Web 框架 DIY