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

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

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

    fun

     

    JSON學(xué)習(xí)筆記之一

    首先,使用JavaScript的eval()函數(shù)實(shí)現(xiàn),將JSON數(shù)據(jù)串轉(zhuǎn)換成為一個(gè)JavaScript對(duì)象數(shù)組。這里,在Servlet中訪問數(shù)據(jù)庫(kù)取得記錄,并合成JSON串,發(fā)送到客戶端。

    一般,對(duì)于企業(yè)級(jí)應(yīng)用,使用JavaScript的eval()函數(shù),存在安全隱患問題。這個(gè)例子就是感受一下JSON數(shù)據(jù)串從服務(wù)器段被傳送到客戶端之后,將數(shù)據(jù)轉(zhuǎn)換成為對(duì)象數(shù)組或者對(duì)象,從而方便地使用JavaScript來實(shí)現(xiàn)遍歷。

    看一下我的Permission實(shí)體的Hibernate映射文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "

    <hibernate-mapping>
    <class name="model.xgb.vo.Permission" table="PERMISSION" lazy="false">
        <composite-id>
          <key-property name="id" column="ID" type="integer"/>
          <key-property name="term" column="TERM" type="string"/>
        </composite-id>
        <property name="endDate" column="ENDDATE" type="date"/>
        <property name="start" column="START" type="date"/>
        <many-to-one name="roles" class="model.xgb.vo.Role" lazy="false" unique="true" cascade="save-update">
          <column name="ROLE_ID"/>
        </many-to-one>
        <many-to-one name="org" class="model.xgb.vo.Org" lazy="false" unique="true" cascade="save-update">
          <column name="ORG_ID"/>
        </many-to-one>
        <many-to-one name="operator" class="model.xgb.vo.Operator" lazy="false" unique="true" cascade="save-update">
          <column name="OPERATOR_ID"/>
          <column name="OPERATOR_NAME"/>
          <column name="OPERATOR_TYPE"/>
        </many-to-one>
    </class>
    </hibernate-mapping>

    現(xiàn)在,就是在Servlet中讀取對(duì)應(yīng)的記錄,然后構(gòu)造JSON數(shù)據(jù),實(shí)現(xiàn)的Servlet為GetPermissions,如下所示:

    package org.shirdrn.servlet;

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import model.xgb.bo.ManagerService;
    import model.xgb.bo.impl.ManagerServiceImpl;
    import model.xgb.vo.Permission;
    import cn.edu.cust.levin.BusinessException;
    import cn.edu.cust.levin.business.BusinessFactory;

    /** author http://www.bt285.cn http://www.5a520.cn
    */

    public class GetPermissions extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
       static final long serialVersionUID = 1L;

    public GetPermissions() {
       super();
    }  

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       doPost(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       request.setCharacterEncoding("utf-8");
       response.setCharacterEncoding("utf-8");
       response.setHeader("Cache-Control", "no-cache");
       response.setContentType("text/json;charset=UTF-8");
       String semester = java.net.URLDecoder.decode(request.getParameter("semester"),"UTF-8");
       int orgId = Integer.parseInt(request.getParameter("orgId"));
       PrintWriter out = response.getWriter();
       try {
        ManagerService managerService = (ManagerService)BusinessFactory
         .getBusiness(ManagerServiceImpl.class);
        List permissionList = managerService.getPermissionByOrg(orgId, semester);
        String jsonString = "[";
        for(int i=0;i<permissionList.size();i++) {
         Permission permission = (Permission)permissionList.get(i);
         jsonString += "{";
         jsonString += "\"id\":" + permission.getId() +",";
         jsonString += "\"semester\":\"" + permission.getTerm() +"\",";
         jsonString += "\"startTime\":\"" + permission.getStart().toLocaleString() +"\",";
         jsonString += "\"endTime\":\"" + permission.getEndDate().toLocaleString() +"\",";
         jsonString += "\"orgId\":" + permission.getOrg().getId() +",";
         jsonString += "\"operatorId\":" + permission.getOperator().getId() +",";
         jsonString += "\"operatorName\":\"" + permission.getOperator().getName() +"\",";
         jsonString += "\"roleId\":" + permission.getRoles().getId();
         if(i != permissionList.size()-1) {
          jsonString += "},";
         }
         else {
          jsonString += "}]";
         }
        }
        out.print(jsonString);
        out.flush();
        out.close();
       } catch (BusinessException e) {
        e.printStackTrace();
       }
    }          
    }

    用于顯示記錄的JSP頁面如下所示:

    <%@ page language="java" import="java.util.*,model.xgb.vo.*" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Get Permissions</title>
    <script type="text/javascript" src="js/shirdrnPermission.js"></script>
    </head>
    <body onLoad="pageLoad();">
    <div id="list"></div>
    </body>
    </html>

    我通過使用onLoad事件,加載頁面的時(shí)候,調(diào)用pageLoad()函數(shù),該函數(shù)在js/shirdrnPermission.js中實(shí)現(xiàn)了,其中js/shirdrnPermission.js的實(shí)現(xiàn)如下所示:

    var xmlHttp = null;

    function pageLoad() {
    document.body.style.color = "yellow";
    showPermissions();
    }

    function createXMLHttp() {
    if (typeof XMLHttpRequest != "undefined") {
       return new XMLHttpRequest();
    } else {
       if (window.ActiveXObject) {
        var aVersions = ["MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp", "Microsoft.XMLHttp"];
        for (var i = 0; i < aVersions.length; i++) {
         try {
          return new ActiveXObject(aVersions[i]);
         }
         catch (e) {
          alert("error");
         }
        }
       }
    }
    }

    var permissionArray;
    var html = null;

    function showPermissions() {
    html = "<table bgcolor='green' border='1' width='100%'>"
       + "<tr>"
       + "<th>權(quán)限ID</th>"
       + "<th>學(xué)期</th>"
       + "<th>起始時(shí)間</th>"
       + "<th>截止時(shí)間</th>"
       + "<th>組織ID</th>"
       + "<th>操作ID</th>"
       + "<th>操作名稱</th>"
       + "<th>角色I(xiàn)D</th>"
       + "</tr>";
    if(xmlHttp == null) {
       xmlHttp = createXMLHttp();
    }
    var url = "&semester=" + "2008-2009學(xué)年第一學(xué)期"
        + "&orgId=" + 1;
    xmlHttp.open("GET","getPermissions.servlet?" + encodeURI(encodeURI(url)),true); // GetPermissions在web.xml中配置為<url-pattern>/getPermissions.servlet</url-pattern>
    xmlHttp.onreadystatechange = function() {
       if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
        permissionArray = eval("(" + xmlHttp.responseText + ")"); // 將從服務(wù)器請(qǐng)求得到的JSON串轉(zhuǎn)換為JavaScript的數(shù)組(這里是對(duì)象數(shù)組)
        for(var i=0;i<permissionArray.length;i++) {
         html += "<tr>";
         html += "<td>" + permissionArray[i].id +"</td>";
         html += "<td>" + permissionArray[i].semester +"</td>";
         html += "<td>" + permissionArray[i].startTime +"</td>";
         html += "<td>" + permissionArray[i].endTime +"</td>";
         html += "<td>" + permissionArray[i].orgId +"</td>";
         html += "<td>" + permissionArray[i].operatorId +"</td>";
         html += "<td>" + permissionArray[i].operatorName +"</td>";
         html += "<td>" + permissionArray[i].roleId +"</td>";
         html += "</tr>";
        }
        html += "</table>";
        var listContainer = document.getElementById("list");
        listContainer.innerHTML = html;
       }
    }
    xmlHttp.send(null);
    }

    啟動(dòng)WEB服務(wù)器,訪問鏈接http://www.5a520.cn  :8080/xgb/listPermissions.jsp可以看到頁面顯示的結(jié)果,如下所示:

    使用JSON進(jìn)行數(shù)據(jù)傳送,比之于XML自然有很大的優(yōu)勢(shì),至少JSON更加精簡(jiǎn),將無關(guān)緊要的數(shù)據(jù)盡量壓縮,所以速度比XML要快。

    另外,JSON上面的這種使用方式就是使用JavaScript中的eval()函數(shù)來實(shí)現(xiàn)數(shù)據(jù)到類型的轉(zhuǎn)換,使用JavaScript的數(shù)組或者對(duì)象就能遍歷數(shù)據(jù),而XML還要在JavaScript中使用XML DOM操作。

    posted on 2009-04-27 19:07 fun 閱讀(1841) 評(píng)論(0)  編輯  收藏

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(11)

    隨筆檔案

    友情鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: xxxx日本免费| 18成禁人视频免费网站| 国产精品免费视频一区| 亚洲乱码卡三乱码新区| 五月亭亭免费高清在线| 亚洲一区二区三区夜色| 久久久久免费精品国产小说| 国产亚洲一区二区三区在线观看 | 久久久国产亚洲精品| 91人人区免费区人人| 亚洲第一区视频在线观看| 久久黄色免费网站| 久久水蜜桃亚洲av无码精品麻豆| 少妇性饥渴无码A区免费| 亚洲热妇无码AV在线播放| 国产精品免费一区二区三区四区| 亚洲人成网www| 国产桃色在线成免费视频| 亚洲熟妇自偷自拍另欧美| 免费一级特黄特色大片在线| 一级毛片成人免费看a| 亚洲国产精品一区第二页| 日本免费xxxx| 亚洲AV无码XXX麻豆艾秋| 免费a在线观看播放| a级毛片毛片免费观看久潮| 久久99亚洲网美利坚合众国| AV免费网址在线观看| 国产一区二区三区亚洲综合| 亚洲日韩精品一区二区三区无码 | 狠狠色伊人亚洲综合成人| 99在线免费观看视频| 亚洲成人激情小说| 亚洲日本在线观看视频| 99久久久国产精品免费蜜臀| 亚洲大码熟女在线观看| 国产精一品亚洲二区在线播放| 国产在线jyzzjyzz免费麻豆| 国产精品亚洲一区二区三区| 久久亚洲精品中文字幕三区| 久久这里只有精品国产免费10|