成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā)
經(jīng)過長(zhǎ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 13:11:09

設(shè)置JSON

2010-01-11 13:31:03

C++語言

2010-01-07 17:17:19

處理JSON

2010-01-13 10:37:55

C++開發(fā)

2010-01-26 16:54:58

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

2010-01-08 15:37:59

JSON數(shù)據(jù)

2010-01-06 10:49:54

PHP串行化JSON

2009-11-25 11:25:31

VS2003軟件

2010-01-06 16:41:40

解析JSON

2010-01-05 16:18:17

學(xué)習(xí)JavaScrip

2010-01-05 16:26:33

Javascript

2010-02-05 18:09:12

Android

2010-03-03 14:06:38

2010-01-08 15:06:35

JSON功能

2009-12-28 09:19:21

ADO屬性

2010-01-11 16:19:05

C++ Builder

2009-12-08 16:30:29

WCF程序

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++
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 美国a级毛片免费视频 | 九九热在线视频 | 日本中文字幕日韩精品免费 | 亚洲一区二区三区在线播放 | 成人久久久久 | 成人亚洲在线 | 日韩视频中文字幕 | 午夜天堂精品久久久久 | 天天操天天干天天曰 | 日韩在线欧美 | 青春草国产 | 亚洲精品在线播放 | avav在线看| 国产欧美在线观看 | 在线视频一区二区三区 | 91精品国产综合久久久久蜜臀 | 天天躁日日躁狠狠的躁天龙影院 | 在线观看a视频 | 国产在线一区二区 | 网站国产 | 亚洲男女视频在线观看 | 欧美456 | 日韩一区二区三区在线视频 | 久久免费高清视频 | 久久久国产精品 | 国产视频在线观看一区二区三区 | 久久久久久国产免费视网址 | 91资源在线 | 国产一级在线 | 91国产精品 | 求毛片 | 日韩精品在线免费观看 | 日韩福利在线观看 | 久久一二| 午夜色播 | 国精产品一品二品国精在线观看 | 国产精品福利一区二区三区 | 懂色av蜜桃av | 不卡的av一区 | 欧美高清视频一区 | 国产午夜精品久久久久 |