<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    歡迎光臨郝學(xué)武的blog。

    JSON實例(AJAX+STRUTS )

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

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


    以下是例子中所用到的相關(guān)文件:
    /////////////////////////////////////// toolhxw.js
    /**
    @hxw  20080602
    */
    //回調(diào)函數(shù)  簡單回調(diào)函數(shù)
    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;
    }
    //回調(diào)函數(shù)  復(fù)雜回調(diào)函數(shù)
    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數(shù)據(jù)
    function getesay(){
     var url = 'test.do';
      var pars = 'method=getEasy';
      var ajax = new Ajax.Request(
       url,
       {method:'post',parameters:pars,onComplete:showesay}
      );  
    }
    //獲取對象級復(fù)雜數(shù)據(jù)
    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 {
     

     /**
      * 獲取簡單組合數(shù)據(jù)
      */
     public ActionForward getEasy(ActionMapping mapping, ActionForm form,
       HttpServletRequest request, HttpServletResponse response) {
      response.setContentType("text/html; charset=GBK");
      try
      {
       PrintWriter out = response.getWriter();
       //這里的數(shù)據(jù)拼裝一般是從數(shù)據(jù)庫查詢來的
       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;
      }
      }
     /**
      * 獲取復(fù)雜組合數(shù)據(jù)
      */
     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();
       //這里的數(shù)據(jù)拼裝一般是從數(shù)據(jù)庫查詢來的
        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("消費明細(xì)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練習(xí)</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()'>獲取簡單組合數(shù)據(jù)</a>
      <a href='javascript:getcomplex()'>獲取復(fù)雜組合數(shù)據(jù)</a>
      </div>
        <div id="content">
        正在獲取內(nèi)容...
        </div>
      </body>
    </html>
    大家將這幾個文件拷貝到你的myeclipse的web項目中,發(fā)布運行即可。

    Feedback

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

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

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

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

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

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

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

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

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

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

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

    2008-07-01 17:20 by young.jiandong
    我的環(huán)境: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");
    //到了這步,如果中文信息為單數(shù)時,最后一個漢字就花了。
    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 )  回復(fù)  更多評論   

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

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

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

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

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

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

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

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


    網(wǎng)站導(dǎo)航:
     

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

    Copyright © 陜西BOY

    主站蜘蛛池模板: 亚洲精彩视频在线观看| 亚洲日韩av无码| 亚洲最大的黄色网| 亚洲高清免费在线观看| 久久香蕉国产线看观看亚洲片| 黄页网址在线免费观看| 国产成人精品免费视频软件| 亚洲午夜精品一区二区麻豆| 成人黄页网站免费观看大全| 亚洲国产午夜精品理论片| 国产精品免费网站| 精品亚洲国产成人| 日韩电影免费在线观看视频| 亚洲AV无码一区二区三区电影 | 69影院毛片免费观看视频在线| 亚洲成在人天堂一区二区| 18禁止看的免费污网站| 久久精品国产亚洲AV蜜臀色欲| 18禁无遮挡无码网站免费| 美女黄频a美女大全免费皮| 国产午夜亚洲精品午夜鲁丝片| 久久久受www免费人成| 亚洲卡一卡2卡三卡4卡无卡三| 最近中文字幕国语免费完整| 亚洲中文字幕无码av| 亚洲成A人片77777国产| 日本道免费精品一区二区| 亚洲精品日韩专区silk| 好男人视频社区精品免费| 一区视频免费观看| 亚洲男人都懂得羞羞网站| 一二三四在线播放免费观看中文版视频| 亚洲中文字幕无码爆乳| 国产亚洲色视频在线| 91九色老熟女免费资源站| 亚洲成av人片在线天堂无| 亚洲中文字幕无码一久久区| 最近的中文字幕大全免费8| 黑人粗长大战亚洲女2021国产精品成人免费视频| 国产日产成人免费视频在线观看| 一级做a爱过程免费视|