歡迎光臨郝學武的blog。

          JSON實例(AJAX+STRUTS )

          Posted on 2008-06-02 13:11 陜西BOY 閱讀(14779) 評論(9)  編輯  收藏

          前段時間做項目用到了json,今天我抽時間寫了一個struts+ajax+json的例子.
          個人感覺ajax+json在很大程度上降低了網絡和服務器的IO,是一個很不錯的組合!
          1:json的lib我用的是json-lib-2.1-jdk15.jar,它可以在
          2:struts用的是1.2
          3:用到了js第三方prototype.js,主要用它包裝的ajax對象,大家也沒必要用這個,可以直接在js里用XMLHttpRequest。


          以下是例子中所用到的相關文件:
          /////////////////////////////////////// toolhxw.js
          /**
          @hxw  20080602
          */
          //回調函數  簡單回調函數
          function showesay(dataResponse)
          {
           var data = eval('(' + dataResponse.responseText + ')');
           var str='';
           str+='<ul>';
           str+='<li>'+data.param1;+'</li>';
           str+='<li>'+data.param2;+'</li>';
           str+='</ul>';
           document.getElementById("content").innerHTML=str;
          }
          //回調函數  復雜回調函數
          function showcomplex(dataResponse)
          {
           var data = eval('(' + dataResponse.responseText + ')');
           var str='';
           for(var i=0;i<data.js.length;i++)
           {
           str+='<ul>';
           str+='<li>'+data.js[i].id+'</li>';
           str+='<li>'+data.js[i].age+'</li>';
           str+='<li>'+data.js[i].name+'</li>';
           str+='<li>'+data.js[i].address+'</li>';
           str+='</ul>';
           }
           document.getElementById("content").innerHTML=str;
          }
          //獲取簡單的json數據
          function getesay(){
           var url = 'test.do';
            var pars = 'method=getEasy';
            var ajax = new Ajax.Request(
             url,
             {method:'post',parameters:pars,onComplete:showesay}
            );  
          }
          //獲取對象級復雜數據
          function getcomplex(){
           var url = 'test.do';
            var pars = 'method=getComplex';
            var ajax = new Ajax.Request(
             url,
             {method:'post',parameters:pars,onComplete:showcomplex}
            );  
          }

          ///////////////////////////////////////struts-config.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

          <struts-config>
            <data-sources />
            <form-beans />
            <global-exceptions />
            <global-forwards />
            <action-mappings >
              <action path="/test" parameter="method" type="com.json.struts.action.TestAction">
             </action>
             
            </action-mappings>

            <message-resources parameter="com.json.struts.ApplicationResources" />
          </struts-config>

           ////////////////////////////////TestAction.java

          /*
           * Generated by MyEclipse Struts
           * Template path: templates/java/JavaClass.vtl
           */
          package com.json.struts.action;

          import java.io.PrintWriter;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.actions.DispatchAction;
          import net.sf.json.*;

          /**
           * @author hxw
           *
           */
          public class TestAction extends DispatchAction {
           

           /**
            * 獲取簡單組合數據
            */
           public ActionForward getEasy(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response) {
            response.setContentType("text/html; charset=GBK");
            try
            {
             PrintWriter out = response.getWriter();
             //這里的數據拼裝一般是從數據庫查詢來的
             JSONObject jsonObject = new JSONObject();
                jsonObject.put("param1", "變量一");
                jsonObject.put("param2", "變量二");
             out.print(jsonObject.toString());
             out.flush();
             out.close();
             return null;
            }catch(Exception e)
            {
             e.printStackTrace();
             return null;
            }
            }
           /**
            * 獲取復雜組合數據
            */
           public ActionForward getComplex(ActionMapping mapping, ActionForm form,
             HttpServletRequest request, HttpServletResponse response) {
            response.setContentType("text/html; charset=GBK");
            try
            {
             PrintWriter out = response.getWriter();
             JSONObject obj = new JSONObject();
             JSONArray js = new JSONArray();
             //這里的數據拼裝一般是從數據庫查詢來的
              for(int i=0;i<3;i++)
              {
               JSONObject objtemp = new JSONObject();
               objtemp.put("id", i);
               objtemp.put("age", "23");
               objtemp.put("name", "test"+i);
               objtemp.put("address", "test");
               js.add(objtemp);
              }
             obj.put("js",js);
                   out.print(obj.toString());
            }catch(Exception e)
            {
             e.printStackTrace();
             System.out.print("消費明細json存儲異常");
            }
            return null;
           }
          }

          ////////////////////////////test.jsp
          <%@ page language="java" import="java.util.*" contentType="text/html;charset=gbk"%>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <title>json練習</title>
             
           <meta http-equiv="pragma" content="no-cache">
           <meta http-equiv="cache-control" content="no-cache">
           <meta http-equiv="expires" content="0">   
           <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
           <meta http-equiv="description" content="This is my page">
           <script type="text/javascript"  src="js/prototype.js"></script>
              <script type="text/javascript"  src="js/toolhxw.js"></script>
              </head>
           
            <body>
            <div id="func" >
            <a href='javascript:getesay()'>獲取簡單組合數據</a>
            <a href='javascript:getcomplex()'>獲取復雜組合數據</a>
            </div>
              <div id="content">
              正在獲取內容...
              </div>
            </body>
          </html>
          大家將這幾個文件拷貝到你的myeclipse的web項目中,發布運行即可。

          Feedback

          # re: JSON例子(struts+ajax+json)  回復  更多評論   

          2008-06-02 17:00 by 隔葉黃鶯
          請教個簡單的問題,當 Java 給 JS 生成的字符串中含有單引號或雙引號是如何處理的。

          比如:out.println("var str='"+name+"'");

          name 可能包含單引號也可能包含雙引號,這個要交給 js 的輸出一般如何寫的,單引號或雙引號怎么轉義更簡潔些。

          # re: JSON例子(struts+ajax+json)[未登錄]  回復  更多評論   

          2008-06-03 09:12 by 陜西boy
          json里面的數據全是鍵-值對,它和java有對應的數據類型。比如String,你在數據填裝的時候全是按照java的規則,json只不過做為一種包裝容器,暫時把你填裝的東西放進來,比如:
          JSONObject jsonObject = new JSONObject();
          jsonObject.put("param1", "\'變量一\"");
          jsonObject.put("param2", "變量二");
          out.print(jsonObject.toString());
          你可以看一下運行結果,和java中的輸出是一模一樣的,也就是說對于逗號等操作完全由你的業務類負責,滿足java語法。

          # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

          2008-06-27 15:38 by young.jiandong
          我現在碰到個問題,照你的代碼改寫我的程序時,如果中文信息是雙數的話,正常,單數時,最后一個字就花了。

          # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

          2008-06-30 16:12 by 陜西BOY
          不會哪樣的,我剛做了一個奇數和偶數漢字的例子,完全正常,你再看看你是否是其他設置而引起了這個問題~~~~~

          # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

          2008-07-01 17:20 by young.jiandong
          我的環境:tomcat5.5.23,struts1.2(采用了expresso5.5),jdk1.5,采用GBK過濾器。
          頁面:
          var p = $('theId').value;
          var pas = "theId=" + p;
          new Ajax.Request('<html:rewrite page="/util/namelookup.do?state=NameLookup"/>', {
          parameters: pas,
          method:'post',
          //encoding: 'GBK',
          onComplete: function(dataResponse){
          var data = eval('(' + dataResponse.responseText + ')');
          alert(data.fullName);
          $('fullName').value = data.fullName;
          }
          });

          程序處理部分:
          String theId = request.getParameter("theId");
          ServletControllerRequest sr = (ServletControllerRequest) request;
          HttpServletResponse hres = (HttpServletResponse) sr.getServletResponse();
          hres.setContentType("text/html;charset=GBK");
          try{
          String ss = new String(theId.getBytes("GBK"),"UTF-8");
          //到了這步,如果中文信息為單數時,最后一個漢字就花了。
          PrintWriter out = hres.getWriter();
          JSONObject json = new com.jsite.json.JSONObject();
          json.put("fullName", "Input : "+ss);
          out.print(json.toString());
          out.flush();
          out.close();
          }catch(Exception e){
          e.printStackTrace();
          }

          # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

          2008-07-01 17:23 by young.jiandong
          不好意思,我沒講明白,我的意思是通過ajax得到提交信息時才會出現這個情況。

          # re: JSON實例(AJAX+STRUTS )  回復  更多評論   

          2008-07-01 17:45 by young.jiandong
          參考 http://blog.csdn.net/zhangyunbo1116/archive/2007/04/29/1589684.aspx ,已解決。
          謝謝。

          # re: JSON實例(AJAX+STRUTS )[未登錄]  回復  更多評論   

          2008-07-21 22:55 by 陜西BOY
          哦,最近忙,沒時間上blog,解決了就好。

          # re: JSON實例(AJAX+STRUTS )[未登錄]  回復  更多評論   

          2009-03-31 15:41 by dada
          不知道為什么按這么操作在頁面上點了連接他跳不到action里面去

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 17, comments - 65, trackbacks - 0, articles - 28

          Copyright © 陜西BOY

          主站蜘蛛池模板: 会泽县| 大荔县| 正蓝旗| 汤原县| 彭阳县| 扶风县| 左权县| 探索| 尼勒克县| 巴马| 嘉黎县| 海南省| 灵川县| 宜阳县| 锡林浩特市| 凉城县| 衡阳县| 阳城县| 齐河县| 福海县| 如皋市| 炎陵县| 精河县| 遂昌县| 东兰县| 华池县| 化德县| 宾阳县| 五指山市| 长白| 台北县| 英吉沙县| 乌审旗| 平谷区| 静海县| 六枝特区| 色达县| 濉溪县| 铁岭县| 德昌县| 即墨市|