java中的fun_fun

首先,使用JavaScript的eval()函数实现,将JSON数据串转换成为一个JavaScript对象数组。这里,在Servlet中访问数据库取得记录,并合成JSON串,发送到客户端。

一般,对于企业级应用,使用JavaScript的eval()函数,存在安全隐患问题。这个例子就是感受一下JSON数据串从服务器段被传送到客户端之后,将数据转换成为对象数组或者对象,从而方便地使用JavaScript来实现遍历。

看一下我的Permission实体的Hibernate映射文件:

现在,就是在Servlet中读取对应的记录,然后构造JSON数据,实现的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;

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

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页面如下所示:

pageEncoding="utf-8"%>

Get Permissions

我通过使用onLoad事件,加载页面的时候,调用pageLoad()函数,该函数在js/shirdrnPermission.js中实现了,其中js/shirdrnPermission.js的实现如下所示:

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 = "

+ "

"

+ "

权限ID"

+ "

学期"

+ "

起始时间"

+ "

截止时间"

+ "

组织ID"

+ "

操作ID"

+ "

操作名称"

+ "

角色ID"

+ "

";

if(xmlHttp == null) {

xmlHttp = createXMLHttp();

}

var url = "&semester=" + "2008-2009学年第一学期"

+ "&orgId=" + 1;

xmlHttp.open("GET","getPermissions.servlet?" + encodeURI(encodeURI(url)),true); // GetPermissions在web.xml中配置为/getPermissions.servlet

xmlHttp.onreadystatechange = function() {

if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {

permissionArray = eval("(" + xmlHttp.responseText + ")"); // 将从服务器请求得到的JSON串转换为JavaScript的数组(这里是对象数组)    for(var i=0;i

html += "

";

html += "

" + permissionArray[i].id +"";

html += "

" + permissionArray[i].semester +"";

html += "

" + permissionArray[i].startTime +"";

html += "

" + permissionArray[i].endTime +"";

html += "

" + permissionArray[i].orgId +"";

html += "

" + permissionArray[i].operatorId +"";

html += "

" + permissionArray[i].operatorName +"";

html += "

" + permissionArray[i].roleId +"";

html += "

";

}

html += "

";

var listContainer = document.getElementById("list");

listContainer.innerHTML = html;

}

}

xmlHttp.send(null);

}

ae6fbb872aeddb9d2d7923a9fb59692f.png

使用JSON进行数据传送,比之于XML自然有很大的优势,至少JSON更加精简,将无关紧要的数据尽量压缩,所以速度比XML要快。

另外,JSON上面的这种使用方式就是使用JavaScript中的eval()函数来实现数据到类型的转换,使用JavaScript的数组或者对象就能遍历数据,而XML还要在JavaScript中使用XML DOM操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值