Java Web框架DIY.docx

上传人:b****6 文档编号:5675682 上传时间:2022-12-31 格式:DOCX 页数:16 大小:19.70KB
下载 相关 举报
Java Web框架DIY.docx_第1页
第1页 / 共16页
Java Web框架DIY.docx_第2页
第2页 / 共16页
Java Web框架DIY.docx_第3页
第3页 / 共16页
Java Web框架DIY.docx_第4页
第4页 / 共16页
Java Web框架DIY.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Java Web框架DIY.docx

《Java Web框架DIY.docx》由会员分享,可在线阅读,更多相关《Java Web框架DIY.docx(16页珍藏版)》请在冰豆网上搜索。

Java Web框架DIY.docx

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

 

 

 

 

 

   

     No.

     content

     select

     chk

   

   

     

     

     

       

         ----

         Calico

         Tortie

         Siamese

         

       

       

 

   

   

     

     

     

       

         ----

         Calico

         Tortie

         Siamese

         

       

       

   

   

     

     

     

       

         ----

         Calico

         Tortie

         Siamese

         

       

       

   

 

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1