1. json的java实现,下载:http://www.json.org/java/index.html
2. json的javascript脚本,下载:http://www.json.org/js.html
配合使用客户端的JSON JavaScript脚本和服务器端的JSON Java实现,我们可以在客户端将JavaScript对象转换为JSON串发送到服务端,在服务端可以将Java对象转换为JSON串发送到客户端,从而简化数据的解析处理。
开发步骤:
1. 在WebRoot目录下新建json子目录,将json2.js复制到该目录下。
2.将JSON的Java实现源文件连同所在的包一起复制到src目录下。
3.编写jsonBook.jsp
4.编写JsonBookServlet.java
JsonBookServlet.java:
public class JsonBookServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String jsonStr=readJsonFromRequestBody(req);
System.out.print(jsonStr);
//保存请求数据的JSONArray对象
JSONArray jsonArray=null;
//用户选择的图书信息以JSONObject对象来表示
JSONObject jsonObject=null;
//用于保存响应数据的JSONAray对象
JSONArray jsonRespArray=new JSONArray();
try{
//以客户端发送的JSON串构造JSONAray对象
jsonArray=new JSONArray(jsonStr);
for(int i=0;i<jsonArray.length();i++){
jsonObject=jsonArray.getJSONObject(i);
int id=jsonObject.getInt("id");
Book book=BookManager.getBook(id);
jsonRespArray.put(new JSONObject(book));
}
}
catch(JSONException e){
e.printStackTrace();
}
resp.setContentType("text/json;charset=UTF-8");
PrintWriter out=resp.getWriter();
out.println(jsonRespArray.toString());
out.close();
}
/**
* 从请求体中读取客户端发送的JSON串
* @param request 请求对象
* @return String 类型,接收到的JSON串
*/
private String readJsonFromRequestBody(HttpServletRequest req){
StringBuffer jsonBuf=new StringBuffer();
char[] buf=new char[2048];
int len=-1;
try{
BufferedReader reader=req.getReader();
while((len=reader.read(buf))!=-1){
jsonBuf.append(new String(buf,0,len));
}
}
catch(IOException e){
e.printStackTrace();
}
return jsonBuf.toString();
}
}
jsonBook.jsp:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript" src="json/json2.js"></script>
<script type="text/javascript" src="js/commonBook.js"></script>
<script type="text/javascript" src="js/jsonBook.js"></script>
</head>
<body>
<form action="#">
<select id="books" size="5" multiple="multiple" onchange="sendBooks();">
<%
List books=BookManager.getBooks();
Iterator it=books.iterator();
while(it.hasNext()){
Book book=(Book)it.next();
%>
<option value="<%=book.getId() %>"><%=book.getTitle() %></option>
<% } %>
</select>
<span id="booksHeader"></span>
<table id="booksTable" border="0">
<tbody id="booksBody">
</tbody>
</table>
</form>
</body>
</html>
jsonBook.js:
var xmlHttp;
function createXMLHttpRequest(){
if(window.ActiveXObject)
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
else if(window.XMLHttpRequest)
xmlHttp=new XMLHttpRequest();
}
function createJson(){
var books=new Array();
var options=document.getElementById("books").options;
var option=null;
var j=0;
for(var i=0;i<options.length;i++){
option=options[i];
if(option.selected){
books[j]=new Book(option.value);
j++;
}
}
//将javascript 的数组转换为JSON串返回
return JSON.stringify(books);
}
function Book(id){
this.id=id;
}
//发送异步请求
function sendBooks(){
createXMLHttpRequest();
var jsonBook=createJson();
//这个文件是放在WebRoot下js目录,访问servlet时出现问题?
//var url="../jsonBookServlet?timeStamp="+new Date().getTime();
var url="/json-servlet/jsonBookServlet?timeStamp="+new Date().getTime(); //使用绝对路径
xmlHttp.open("POST",url,true);
xmlHttp.onreadystatechange=handleStateChange;
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send(jsonBook);
}
//处理响应数据
function handleStateChange(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
clearPreviousResult();
parseResults();
}
}
}
//解析服务器响应的json串
function parseResults(){
//将服务器发回的JSON串转换为javascript中的数组
var bookArray=eval('('+xmlHttp.responseText+')');
if(bookArray.length>0){
createTableHeader();
}
for(var i=0;i<bookArray.length;i++){
addTableRow(bookArray[i]);
}
var booksHeader=document.createElement("h2");
var booksHeaderText=document.createTextNode("你所选择的图书详细信息: ");
booksHeader.appendChild(booksHeaderText);
document.getElementById("booksTable").setAttribute("border", "1");
}
运行前把json2.js的第一行注释掉,否则报错。
相关推荐
Ajax+Servlet 实例 如何创建IE7兼容的AJAX请求 乱码解决
Ajax + JSON + Servlet + prototype.js(实现的一个Ajax实例) 很好的展示了Ajax与JSON的无缝连接与后台的交互。
jquery下的ajax向后台servlet传输数据并从后台获得数据源码实例且有详细注释
基于JSON2.O和Servlet的Ajax实例,快速入门的好例子
JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。...我们可以很方便的使用JSON-RPC-Java来开发我的们Ajax应用。
最近上班太忙,晚上抽空整理一下ajax请求中,后台返回json字符串和json数组的场景,以及前台的处理示例。 直接看代码。 json字符串的后台响应 package com.ajax; import java.io.IOException; import java.io....
ajax即异步的javascript and xml, 本文章向码农们介绍ajax的三种实现方法(prototype实现,jquery实现,XMLHttpRequest实现) ...package ajax.servlet; import java.io.IOException; import java.io.PrintWriter;
Servlet+jqAjax+json jar包 异步传输实例
简单的Servlet小程序 1.jsp页面输入需要查询...2.jquery ajax获取到输入值传递为servlet 3.servlet 调用方法将值转换为拼音,并且模糊查询数据库并返回结果 4.将结果转换成json格式返回给jsp页面 5.jsp解析json并显示
顺便演示了一下用servlet来返回json数据给ext框架的方式。 <br>在grid的演示部分,包括了分页的数据调用和如何处理来自于dwr的数据(dwr的部分和官方网站公布的方法一样) 以及grid的事件处理。 <br>...
本文实例讲述了jQuery解析返回的xml和json方法。分享给大家供大家参考,具体如下: 一、jQuery 解析ajax请求返回的xml格式的数据 1、发送ajax请求 [removed] function jqxml(){ $.ajax({ url:...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...
示例描述:演示常用Ajax应用实例。 ajaxmodel.war Ajax实例应用的项目文件(可直接在Tomcat中发布运行)。 \ajaxmodel\amel\html\firstAjax.jsp 显示XMLHttpRequest对象状态。 \ajaxmodel\amel\...
第14章 单页面应用实例——Java语言实现 410 14.1 技术选型 410 14.2 搭建开发环境 411 14.3 配置Ext.Direct 413 14.4 用户登录页面 417 14.5 系统主页面与动态菜单 421 14.6 用户管理模块 427 14.7 角色管理模块 ...
具体的ajax怎么使用,可以查看我的上一篇博客《浅谈ajax在jquery中的请求和servlet中的响应》 [removed] $(document).ready(function(){ var str = ""; var strA = ""; $.ajax({ type: "GET", url: "&...
6、实例化servlet有几种方式 32 7、谈谈你对http协议的理解 33 8、HTTP请求的GET与POST方式的区别 34 9、forward 和redirect的区别? 34 10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、...
jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...