自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

學(xué)習(xí)JavaScript時(shí)注意的種種問題說明介紹

開發(fā)
經(jīng)過長時(shí)間學(xué)習(xí)學(xué)習(xí)JavaScript,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。學(xué)習(xí)JavaScript時(shí),這里將介紹學(xué)習(xí)JavaScript問題的解決方法,在這里拿出來和大家分享一下。

最近在學(xué)習(xí)JavaScript,發(fā)現(xiàn)不論是ext還是prototype都很推崇json這種通信協(xié)議的格式,但是這兩個(gè)框架都是比較偏前端的,和dwr不同,dwr是一個(gè)一站式的ajax框架,不僅提供了客戶端的工具方法,也包括服務(wù)端的配置和通信的處理。

而ext和prototype等僅僅設(shè)置好了json的接口并對(duì)ajax通信做了封裝,相對(duì)而言是一種比較“純粹”的AJAX實(shí)現(xiàn),當(dāng)然ext還包括了大量的圖形組件,這又是題外話了。
為了解決ext們的通信問題,如果單純的定義Servlet,實(shí)現(xiàn)起來比較原始,既復(fù)雜又不好管理。#t#

于是網(wǎng)上有好多人采用了dwr來管理通信,還有人用structs作為對(duì)學(xué)習(xí)JavaScript的映射配置管理,這樣一來不論是客戶端還是服務(wù)端,都有很多功能被切割掉了,顯得不夠“干凈”。于是我寫了下面的兩個(gè)響應(yīng)的Servlet處理類來解決這個(gè)問題。

代碼如下:

  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服務(wù)端    
  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對(duì)象,由參數(shù)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.             //在當(dāng)前線程環(huán)境中找當(dāng)前作用類的實(shí)例     
  44.             Object bean = findInstance(beanName);     
  45.             //作用類的原型的引用     
  46.             Class clazz;     
  47.                  
  48.             //如果當(dāng)前線程環(huán)境中有當(dāng)前作用類的實(shí)例,獲取其引用,否則實(shí)例化并返回引用,同時(shí)在線程中保存值     
  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.             //設(shè)置JSON值     
  58.             AbstractJsonAction aja = (AbstractJsonAction)bean;     
  59.             aja.initJson(jsonObject);     
  60.                  
  61.             //獲得要執(zhí)行的方法     
  62.             Method m = clazz.getMethod(methodName);     
  63.                  
  64.             //設(shè)置bean的其他參數(shù)     
  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.             //執(zhí)行方法     
  81.             Object retObj = m.invoke(bean);     
  82.                  
  83.             //此處的Object要進(jìn)行重寫toString方法,使其返回一個(gè)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. }   

以上描述的學(xué)習(xí)JavaScript的代碼充分說明了這點(diǎn)。

責(zé)任編輯:chenqingxiang 來源: 新浪科技
相關(guān)推薦

2010-01-07 17:17:19

處理JSON

2010-01-07 13:11:09

設(shè)置JSON

2010-01-11 13:31:03

C++語言

2010-01-13 10:37:55

C++開發(fā)

2010-01-26 16:54:58

學(xué)習(xí)C++

2010-01-06 16:41:40

解析JSON

2010-01-08 15:37:59

JSON數(shù)據(jù)

2010-01-05 16:18:17

學(xué)習(xí)JavaScrip

2010-01-06 10:49:54

PHP串行化JSON

2009-11-25 11:25:31

VS2003軟件

2010-01-05 16:26:33

Javascript

2010-02-05 18:09:12

Android

2010-03-03 14:06:38

2010-01-11 16:19:05

C++ Builder

2010-01-08 15:06:35

JSON功能

2009-12-28 09:19:21

ADO屬性

2010-01-04 15:37:41

ADO連接

2010-01-05 16:41:48

JSON 標(biāo)準(zhǔn)

2010-01-22 14:12:40

C++

2009-12-08 16:30:29

WCF程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)