`

JSON servlet实例 Ajax应用

    博客分类:
  • java
阅读更多

1.    jsonjava实现,下载:http://www.json.org/java/index.html

2.       jsonjavascript脚本,下载:http://www.json.org/js.html

配合使用客户端的JSON JavaScript脚本和服务器端的JSON Java实现,我们可以在客户端将JavaScript对象转换为JSON串发送到服务端,在服务端可以将Java对象转换为JSON串发送到客户端,从而简化数据的解析处理。

 

开发步骤:

1.  WebRoot目录下新建json子目录,将json2.js复制到该目录下。

2.JSONJava实现源文件连同所在的包一起复制到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 实例

    Ajax+Servlet 实例 如何创建IE7兼容的AJAX请求 乱码解决

    Ajax + JSON + Servlet + prototype.js(实现的一个Ajax实例)

    Ajax + JSON + Servlet + prototype.js(实现的一个Ajax实例) 很好的展示了Ajax与JSON的无缝连接与后台的交互。

    jquery+ajax+json+servlet实例源码

    jquery下的ajax向后台servlet传输数据并从后台获得数据源码实例且有详细注释

    Ajax JSON 实例For Java

    基于JSON2.O和Servlet的Ajax实例,快速入门的好例子

    JSON-RPC-Java实例

    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。...我们可以很方便的使用JSON-RPC-Java来开发我的们Ajax应用。

    ajax响应json字符串和json数组的实例(详解)

    最近上班太忙,晚上抽空整理一下ajax请求中,后台返回json字符串和json数组的场景,以及前台的处理示例。 直接看代码。 json字符串的后台响应 package com.ajax; import java.io.IOException; import java.io....

    ajax 三种实现方法实例代码

    ajax即异步的javascript and xml, 本文章向码农们介绍ajax的三种实现方法(prototype实现,jquery实现,XMLHttpRequest实现) ...package ajax.servlet; import java.io.IOException; import java.io.PrintWriter;

    ServletJqAjax

    Servlet+jqAjax+json jar包 异步传输实例

    汉字转拼音实例

    简单的Servlet小程序 1.jsp页面输入需要查询...2.jquery ajax获取到输入值传递为servlet 3.servlet 调用方法将值转换为拼音,并且模糊查询数据库并返回结果 4.将结果转换成json格式返回给jsp页面 5.jsp解析json并显示

    一个基于ext的ajax小例子

    顺便演示了一下用servlet来返回json数据给ext框架的方式。 &lt;br&gt;在grid的演示部分,包括了分页的数据调用和如何处理来自于dwr的数据(dwr的部分和官方网站公布的方法一样) 以及grid的事件处理。 &lt;br&gt;...

    jQuery解析返回的xml和json方法详解

    本文实例讲述了jQuery解析返回的xml和json方法。分享给大家供大家参考,具体如下: 一、jQuery 解析ajax请求返回的xml格式的数据 1、发送ajax请求 [removed] function jqxml(){ $.ajax({ url:...

    JAVA上百实例源码以及开源项目源代码

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    JAVA上百实例源码以及开源项目

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    JavaScript完全自学宝典 源代码

    示例描述:演示常用Ajax应用实例。 ajaxmodel.war Ajax实例应用的项目文件(可直接在Tomcat中发布运行)。 \ajaxmodel\amel\html\firstAjax.jsp 显示XMLHttpRequest对象状态。 \ajaxmodel\amel\...

    Ext+JS高级程序设计.rar

    第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 角色管理模块 ...

    jquery在启动页面时,自动加载数据的实例

    具体的ajax怎么使用,可以查看我的上一篇博客《浅谈ajax在jquery中的请求和servlet中的响应》 [removed] $(document).ready(function(){ var str = ""; var strA = ""; $.ajax({ type: "GET", url: "&...

    Java面试宝典2020修订版V1.0.1.doc

    6、实例化servlet有几种方式 32 7、谈谈你对http协议的理解 33 8、HTTP请求的GET与POST方式的区别 34 9、forward 和redirect的区别? 34 10、servlet中怎么定义forward 和redirect 35 11、过滤器有哪些作用? 35 12、...

    java开源包1

    jFastCGI 是一个可以让Tomcat 之类的Servlet容器支持运行PHP和其它fastcgi应用程序,将Servlet容器充当成一个FastCGI 的网关。 Java 绘图框架 JGraphEd JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java ...

Global site tag (gtag.js) - Google Analytics