1.首先要在前端把要发送的东西(这里是一个实例化的car对象)都准备好,利用Ajax发送到服务器端,代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JSON Example</title>
<script type="text/javascript" src="json.js"></script>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function doJSON() {
var car = getCarObject();//得到实例化的对象
//Use the JSON JavaScript library to stringify the Car object
var carAsJSON = JSON.stringify(car);
alert("Car object as JSON:\n " + carAsJSON);
//发送到服务器端的时候会去找lib/web,xml下的映射,通过映射来调用对应的servlet
var url = "hello";
createXMLHttpRequest();
xmlHttp.open("POST", url, true);
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;");
xmlHttp.send(carAsJSON);
}
//回调函数
function handleStateChange() {
alert("xmlHttp.readyState"+xmlHttp.readyState);
if(xmlHttp.readyState == 4) {
alert("xmlHttp.status"+xmlHttp.status);
if(xmlHttp.status == 200) {
parseResults();
}
}
} function parseResults() {
var responseDiv = document.getElementById("serverResponse");
if(responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}
//实例化car
function getCarObject() {
return new Car("Dodge", "Coronet R/T", 1968, "yellow");
}
//先要定义一个car类,才能实例化
function Car(make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
</script>
</head>
<body> <form action="#">
<input type="button" value="Click here to send JSON data to the server" onclick="doJSON();"/>
</form>
<h2>Server Response:</h2>
<div id="serverResponse"></div>
</body>
</html>

2.以上的代码是把数据发送到服务器了,下面服务器要接收,处理发送过来的数据了,通过lib/web.xml来找到处理的对应的servlet,服务器端嘛,肯定要用servlet来处理的
web.xml的映射如下:即通过映射调用JSONExample这个servlet来处理

 <servlet>
<servlet-name>JSONExample</servlet-name>
<servlet-class>JSONExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSONExample</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>

3.要使JSONExample能工作还需要导入如下包:

4. 请求到来后先调用doPost方法,用readJSONStringFromRequestBody获得发送过来的字符串,再把字符串变为json对象jsonObject = new JSONObject(json),

然后调用writeXMLFile("C:\\hello.xml")来建立xml文档并写到C盘上一个叫做hello.xml的xml的格式的文件(自动生成的,不用自己创建,如果C盘本来就有这个相同的文件名在,则会删掉里面原来的内容并更新新的内容)

import java.io.*;
import java.net.*;
import java.text.ParseException;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.crimson.tree.XmlDocument;
import org.w3c.dom.Attr;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.json.JSONException;
import org.json.JSONObject; public class JSONExample extends HttpServlet {
private static final long serialVersionUID = 1L;
JSONObject jsonObject = null; public JSONExample() {
super();
// TODO Auto-generated constructor stub
} public void writeXMLFile(String outFile) throws Exception
{
//为解析XML作准备,创建DocumentBuilderFactory实例,指定DocumentBuilder
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException pce) {
System.err.println(pce);
System.exit(1);
} Document doc = null;
doc = db.newDocument();
//下面是建立XML文档内容的过程,建立根节点car
Element root = doc.createElement("car");
//把car这个根节点放到doc里面去
doc.appendChild(root);
//建立一个节点叫make,其中element1 表示这是root下面的第一个节
Element element1 = doc.createElement("make");
//把节点名为make的这个节点插入到root这个根节点后面
root.appendChild(element1 );
//获得make这个节点的具体内容
Text tName = doc.createTextNode(jsonObject.getString("make"));
//把make这个节点的具体内容插入到节点名为make的下面
element1 .appendChild(tName);
//创建第二个节点
Element element2= doc.createElement("model");
//把第二个节点插入到root后面和第一个节点是兄弟关系
root.appendChild(element2);
Text tAge = doc.createTextNode(jsonObject.getString("model"));
element2.appendChild(tAge);
//把第三个节点插入到root后面和第一个节点是兄弟关系
Element element3= doc.createElement("year");
root.appendChild(element3);
Text tPhone = doc.createTextNode(jsonObject.getString("year"));
element3.appendChild(tPhone);
//把第四个节点插入到root后面和第一个节点是兄弟关系
Element element4= doc.createElement("color");
root.appendChild(element4);
Text tColor = doc.createTextNode(jsonObject.getString("color"));
element4.appendChild(tColor);
System.out.println(2);
//把XML文档输出到指定的文件
FileOutputStream outStream = new FileOutputStream(outFile);
OutputStreamWriter outWriter = new OutputStreamWriter(outStream);
((XmlDocument) doc).write(outWriter, "GB2312");
outWriter.close();
outStream.close();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
private String readJSONStringFromRequestBody(HttpServletRequest request){
StringBuffer json = new StringBuffer();
String line = null;
try {
BufferedReader reader = request.getReader();
while((line = reader.readLine()) != null) {
json.append(line);
}
}
catch(Exception e) {
System.out.println("Error reading JSON string: " + e.toString());
}
return json.toString();
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String json = readJSONStringFromRequestBody(request);
//Use the JSON-Java binding library to create a JSON object in Java try {
jsonObject = new JSONObject(json); } catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//----------------------------------
System.out.println(3);
try {
System.out.println(4);
writeXMLFile("C:\\hello.xml");
System.out.println(5);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

利用Ajax把前端的数据封装成JSON格式发送到服务器端并写成XML格式在服务器的硬盘上的更多相关文章

  1. [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)

    点击下载 ConvertJson.rar 本类实现了 C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json|等功能大家先预 ...

  2. leaflet 利用ajax 将前端地图上的数据post到后台

    生成Google地图,在地图上单击后,将该点的经纬度反馈给后台. 前端HTML代码: <!DOCTYPE html> <html> <head> <meta ...

  3. 利用Ajax实现前端与.net后端实现数据交互

    使用场景和需求:用户在地址栏输入请求地址,先.net服务器发送页面请求,该页面包含Echart图表,在页面中向.net后端发送数据请求,获取数据后,将数据填充到Echart图表中.其中包含带参与不带参 ...

  4. JavaScript中利用Ajax 实现客户端与服务器端通信(九)

    一:Ajax (Asynchronous JavaScript and XML)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更加强大的方式整合在一起 Ajax的关键技术: 1.使用X ...

  5. JS数组转成json字符串的注意事项

    在js中常常会将一个数组转成json字符串发送给后端. 这时候在定义数组数据结构的时候需要格外注意,意味json中是有集合和对象的区别的. 集合的定义是[];对象的的定义是{}. 这时候,在创建数组时 ...

  6. 接口测试xml格式转换成json

    未经允许,禁止转载!!!! 接口测试一般返回的是xml和json,现在大多数时候是返回成json的格式,但是有时候也会出现xml格式, 由于xml格式的文件阅读起来不是很容易懂,所以尽量将xml转换成 ...

  7. 利用Ajax和JSON实现关于查找省市名称的二级联动功能

    功能实现的思路:我们经常碰见网上购物时候填写收件地址会用到这个查找省市县的三级联动查找功能,我们可以利用Ajax和JSON技术模拟这个功能,说白了同样是使用Ajax的局部数据更新功能这个特性.因为省市 ...

  8. 前端数据交互之json&ajax

    1.json json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据 ...

  9. JSON.stringify实例应用—将对象转换成JSON类型进行AJAX异步传值

    在上一篇中,对JSON.stringify()方法有了初步的认识,并且做了一些简单的例子.本篇将进一步将JSON.stringify用在复杂些的实例中,例如如下需求: 在进jQuery AJAX异步传 ...

随机推荐

  1. STM32的GPIO

    一.I/O端口位的基本结构 二.端口位配置表 参考:STM32芯片参考手册

  2. APNs-远程推送

    一.开发iOS程序的推送功能, iOS端需要做的事 1.请求苹果获得deviceToken 2.得到苹果返回的deviceToken 3.发送deviceToken给公司的服务器 4.监听用户对通知的 ...

  3. IT专业人士如何更有效的学习专业知识

    查看: http://www.cnblogs.com/suizhouqiwei/archive/2010/05/17/1737265.html 书:http://www.cnblogs.com/wxi ...

  4. java版 正文抽取 基于文字连接比

    package cn.tdt.crawl.jdbc; import java.util.regex.Matcher; import java.util.regex.Pattern; import or ...

  5. Cordova 设置全屏及退出全屏切换

    设置全屏在super.init();之前 最后才退出全屏. 以下为具体代码: package com.agile.ittm; import android.os.Bundle; import andr ...

  6. hdu 1269

    强连通分量题,用tarjin算法: 这是一道很简单的tarjin算法题,基本上就是套模板: 贴代码: #include<cstdio> #include<vector> #in ...

  7. FFMPEG之TimeBase成员理解

    http://blog.csdn.net/supermanwg/article/details/14521869

  8. 17.1.2 Replication Formats

    17.1.2 Replication Formats 复制格式 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Bas ...

  9. 1.linux下Kconfig编写规范

    http://www.linuxidc.com/Linux/2011-10/44721.htm

  10. 【CF】3B Lorry

    这道题目网上有几个题解,均有问题.其实就是简单的贪心+排序,没必要做的那么复杂.一旦tot+curv > v时,显然curv==2, 有三种可能:(1)取出最小的curv==1的pp,装入当前的 ...