DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 學習JavaScript時注意的種種問題說明介紹
學習JavaScript時注意的種種問題說明介紹
編輯:XML詳解     

最近在學習JavaScript,發現不論是ext還是prototype都很推崇JSon這種通信協議的格式,但是這兩個框架都是比較偏前端的,和dwr不同,dwr是一個一站式的AJax框架,不僅提供了客戶端的工具方法,也包括服務端的配置和通信的處理。

而ext和prototype等僅僅設置好了JSon的接口並對ajax通信做了封裝,相對而言是一種比較“純粹”的AJax實現,當然ext還包括了大量的圖形組件,這又是題外話了。
為了解決ext們的通信問題,如果單純的定義Servlet,實現起來比較原始,既復雜又不好管理。

  • 詳細分析JSon string的相關問題
  • 詳讀JSON對象標記的技巧及其困難
  • 解析JSON時注意的相關問題進行學習
  • 闡述JSon格式調用說明方法簡介
  • 安裝JSON插件時的主要學習研究

於是網上有好多人采用了dwr來管理通信,還有人用structs作為對學習JavaScript的映射配置管理,這樣一來不論是客戶端還是服務端,都有很多功能被切割掉了,顯得不夠“干淨”。於是我寫了下面的兩個響應的Servlet處理類來解決這個問題。

代碼如下:

  1. JSONServlet.Java:     
  2. package com.digitalchina.dcscm.service;     
  3.     
  4. import Java.io.*;     
  5. import Java.lang.reflect.Method;     
  6. import Java.util.Enumeration;     
  7. import Java.util.HashMap;     
  8.     
  9. import Javax.servlet.ServletException;     
  10. import Javax.servlet.http.HttpServletRequest;     
  11. import Javax.servlet.http.HttpServletResponse;     
  12. import org.JSon.*;     
  13.     
  14. /**    
  15.  * 通用JSON服務端    
  16.  *     
  17.  * @author 楊一    
  18.  */    
  19.     
  20. public class JSONServlet extends Javax.servlet.http.HttpServlet implements    
  21.         Javax.servlet.Servlet {     
  22.          
  23.     public JSONServlet() {     
  24.         super();     
  25.              
  26.     }     
  27.     
  28.     protected void doPost(HttpServletRequest request,     
  29.             HttpServletResponse response) throws ServletException, IOException {     
  30.         JSONObject JSonObject = null;     
  31.         String responseText = null;     
  32.         try {     
  33.             //JSON對象,由參數JSon定義     
  34.             JSonObject = new JSONObject(request.getParameter("JSon"));     
  35.                  
  36.             //訪問的類和方法,例如Object ExampleClass.exampleMethod()     
  37.             String action = (String)request.getParameter("action");     
  38.             int dotPos = action.lastIndexOf(".");     
  39.                  
  40.             String beanName = action.substring(0, dotPos);     
  41.             String methodName = action.substring(dotPos + 1);     
  42.                  
  43.             //在當前線程環境中找當前作用類的實例     
  44.             Object bean = findInstance(beanName);     
  45.             //作用類的原型的引用     
  46.             Class clazz;     
  47.                  
  48.             //如果當前線程環境中有當前作用類的實例,獲取其引用,否則實例化並返回引用,同時在線程中保存值     
  49.             if(bean == null){     
  50.                 clazz = Class.forName(beanName);     
  51.                 bean = clazz.newInstance();     
  52.                 storeInstance(beanName, bean);     
  53.             } else{     
  54.                 clazz = bean.getClass();     
  55.             }     
  56.     
  57.             //設置JSON值     
  58.             AbstractJSonAction aja = (AbstractJSonAction)bean;     
  59.             aja.initJson(JSonObject);     
  60.                  
  61.             //獲得要執行的方法     
  62.             Method m = clazz.getMethod(methodName);     
  63.                  
  64.             //設置bean的其他參數     
  65.             Enumeration e = request.getParameterNames();     
  66.             Method setM;     
  67.             while(e.hasMoreElements()){     
  68.                 String str = (String)e.nextElement();     
  69.                 if(str.equals("JSon") || str.equals("action")){     
  70.                     continue;     
  71.                 }     
  72.                 StringBuffer sb = new StringBuffer();     
  73.                 sb.append("set");     
  74.                 sb.append(upperFirstChar(str));     
  75.                 String tempMName = sb.toString();     
  76.                 setM = clazz.getMethod(tempMName, new Class[]{String.class});     
  77.                 setM.invoke(bean, (String)request.getParameter(str));     
  78.             }     
  79.                  
  80.             //執行方法     
  81.             Object retObj = m.invoke(bean);     
  82.                  
  83.             //此處的Object要進行重寫toString方法,使其返回一個JSon串給客戶端     
  84.             responseText = retObj.toString();     
  85.         } catch (Exception e) {     
  86.             e.printStackTrace();     
  87.         }      
  88.         response.setCharacterEncoding("UTF-8");     
  89.         response.setContentType("application/x-JSon");     
  90.         response.getWriter().print(responseText);     
  91.     }     
  92.          
  93.     private String upperFirstChar(String fIEldName) {     
  94.         char ch = fIEldName.charAt(0);     
  95.         ch = Character.toUpperCase(ch);     
  96.         StringBuffer sb = new StringBuffer();     
  97.         sb.append(ch);     
  98.         sb.append(fIEldName.substring(1));     
  99.         fIEldName = sb.toString();     
  100.         return fIEldName;     
  101.     }     
  102.          
  103.     private Object findInstance(String beanName){     
  104.         HashMap hm = (HashMap)tl.get();     
  105.         return hm.get(beanName);     
  106.     }     
  107.          
  108.     private void storeInstance(String beanName, Object bean){     
  109.         HashMap hm = (HashMap)tl.get();     
  110.         hm.put(beanName, bean);     
  111.     }     
  112.          
  113.     private static ThreadLocal tl = new ThreadLocal(){     
  114.         protected Object initialValue() {return new HashMap();};     
  115.     };     
  116. }   

以上描述的學習JavaScript的代碼充分說明了這點。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved