一、ajax接收来自后台的text、HTML、xml、json数据
indexData.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function getXMLHttpRequest() {
var xmlReq;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlReq = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlReq;
}
//返回文本数据测试
function ajaxText() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "TextData", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //提交表单必须
oReq.send("name=我是文本&pwd=123");
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
document.getElementById("myDiv").innerHTML = oReq.responseText; //Text文本形式接收
}
}
}
//返回XML文档测试
function ajaxXML() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "XmlData", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //提交表单必须
oReq.send("name=我是xml&pwd=111");
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var xmlObj=oReq.responseXML; //xml形式接收, 返回xml的Document对象
var names=xmlObj.documentElement.getElementsByTagName("name"); //xml的Document对象的documentElement属性可返回文档的根节点<user>
var name=names[0].firstChild.nodeValue;
var pwds=xmlObj.documentElement.getElementsByTagName("pwd");
var pwd=pwds[0].firstChild.nodeValue;
document.getElementById("myDiv").innerHTML=name+","+pwd;
}
}
}
//返回json文档测试
function ajaxJSON() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "JsonData", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //提交表单必须
oReq.send("name=我是json&pwd=111");
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var resObj=oReq.responseText; //json字符串用文本形式接收
var jsonObj1=eval('('+resObj+')'); //注释:JSON.parse(字符串) 与 eval('('+字符串+')') 都是将json字符串解析为json对象(反序列化)
var name1=jsonObj1.name; //注释:JSON.stringify(json对象) 是将json对象解析为json字符串(序列化)
var pwd1=jsonObj1.pwd;
document.getElementById("myDiv").innerHTML=name1+","+pwd1;
}
}
}
//返回html
function ajaxHTML() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "HtmlData", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //提交表单必须
oReq.send("name=我是html&pwd=111");
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var resObj=oReq.responseText; //html用文本形式接收
document.getElementById("myDiv").innerHTML=resObj;
}
}
}
</script>
</head>
<body>
<p style="color: red;">ajax接收来自servlet的文本/xml/json/html</p><hr>
<button οnclick="ajaxText()">请求文本</button>
<button οnclick="ajaxXML()">请求XML文档</button>
<button οnclick="ajaxJSON()">请求json字符串</button>
<button οnclick="ajaxHTML()">请求html</button>
<div id="myDiv"></div>
</body>
</html>
TextDataServlet:
package ServletDataType;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TextData")
public class TextDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("in text");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
System.out.println("name:"+name+",pwd:"+pwd);
//返回文本数据
response.setContentType("text/plain;charset=utf-8");
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(name.getBytes("utf-8"));
outputStream.write(pwd.getBytes("utf-8"));
outputStream.flush();
outputStream.close();
}
}
HtmlDataServlet:
package ServletDataType;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/HtmlData")
public class HtmlDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("in html");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
System.out.println("name:"+name+",pwd:"+pwd);
//返回html文档
response.setContentType("text/html;charset=utf-8");
response.setHeader("Cache-control", "no-cache");
ServletOutputStream outputStream = response.getOutputStream();
String res="<font size='2' color='blue'>"+name+pwd+"</font>";
System.out.println(res);
outputStream.write(res.getBytes("utf-8"));
outputStream.flush();
outputStream.close();
}
}
XmlDataServlet:
package ServletDataType;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/XmlData")
public class XmlDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("in xml");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
System.out.println("name:"+name+",pwd:"+pwd);
//返回xml文档
response.setContentType("text/xml;charset=utf-8");
response.setHeader("Cache-control", "no-cache");
ServletOutputStream outputStream = response.getOutputStream();
StringBuffer sb=new StringBuffer();
sb.append("<?xml version='1.0' encoding='utf-8'?>");
sb.append("<user><name>"+name+"</name><pwd>"+pwd+"</pwd></user>");
System.out.println(sb);
outputStream.write(sb.toString().getBytes("utf-8"));
outputStream.flush();
outputStream.close();
}
}
JsonDataServlet:
package ServletDataType;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/JsonData")
public class JsonDataServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("in json");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String pwd=request.getParameter("pwd");
System.out.println("{'name':"+name+",'pwd':"+pwd+"}");
//返回json字符串数据
response.setContentType("application/json;charset=utf-8");
ServletOutputStream outputStream = response.getOutputStream();
String res="{'name':'"+name+"','pwd':'"+pwd+"'}"; //json字符串要写成"{'name':'tom'}"的形式,里面的key和value也要加''写成字符串的形式
System.out.println(res);
outputStream.write(res.getBytes("utf-8"));
outputStream.flush();
outputStream.close();
}
}
二、ajax接收来自后台的text、HTML、xml、json文件数据
导入的jar包:
indexFile.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" >
function getXMLHttpRequest() {
var xmlReq;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlReq = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
}
return xmlReq;
}
//返回文本数据测试 ------------------------------------------------------------------------
function ajaxText() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "TextFile", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(null);
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
document.getElementById("myDiv").innerHTML = oReq.responseText;
}
}
}
//返回XML文档测试 ---------------------------------------------------------------------
function ajaxXML() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "XmlFile", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(null);
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var xmlObj = oReq.responseXML; //返回xml的Document对象
/* document.getElementById("myDiv").innerHTML += xmlObj.firstChild.nodeName+"--"+xmlObj.firstChild.textContent+"<br>"; *///文档注释
var root = xmlObj.documentElement; //返回文档对象的根节点<books>
document.getElementById("myDiv").innerHTML += root.nodeName+"<br>"; //等价于tagName属性
document.getElementById("myDiv").innerHTML += root.lastChild.nodeName+" "+root.lastChild.textContent+"<br>"; //user
var bookList = root.childNodes;
for(var i=0; i<bookList.length; i++){
var book = bookList[i];
var attr = book.getAttributeNode("show");
document.getElementById("myDiv").innerHTML += book.nodeName+" "+attr.name+"="+attr.value+"<br>";
var childList = book.childNodes;
for(var j=0; j<childList.length; j++){
var child = childList[j];
document.getElementById("myDiv").innerHTML += child.nodeName+" "+child.textContent+"<br>";
}
}
}
}
}
//返回json文档测试 -------------------------------------------------------------------------
function ajaxJSON() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "JsonFile", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(null);
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var resObj=oReq.responseText;
var jsonObj=JSON.parse(resObj); //注释:JSON.parse(字符串) 与 eval('('+字符串+')') 都是将json字符串解析为json对象(反序列化)
//注释:JSON.stringify(json对象) 是将json对象解析为json字符串(序列化)
for(i in jsonObj){
document.getElementById("myDiv").innerHTML += i+"<br>";
if(i == "user"){
alert(jsonObj.user.name);
var user = jsonObj.user;
for(j in user){
document.getElementById("myDiv").innerHTML += j+":"+user[j]+"<br>"; //j是user的属性, user[j]是user的属性值 。
}
}
if(i == "array"){
alert(jsonObj.array[1]);
var arrayObj = jsonObj.array;
for(j in arrayObj){
document.getElementById("myDiv").innerHTML += j+"<br>";
}
}
if(i == "arraylist"){
alert(jsonObj.arraylist[1].name1);
var arraylistObj = jsonObj.arraylist;
for(j in arraylistObj){ //arraylistObj是数组, 包含多个对象元素 。
var obj = arraylistObj[j];
for(k in obj){ //obj对象元素, 含有多个属性 。
document.getElementById("myDiv").innerHTML += k+":"+obj[k]+"<br>";
}
}
}
}
}
}
}
//返回html ---------------------------------------------------------------------------------
function ajaxHTML() {
var oReq = getXMLHttpRequest();
oReq.open("POST", "HtmlFile", true);
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(null);
oReq.onreadystatechange = function() {
if (oReq.readyState == 4 && oReq.status == 200) {
var resObj=oReq.responseText;
document.getElementById("myDiv").innerHTML=resObj;
}
}
}
</script>
</head>
<body>
<p style="color: blue;">ajax接收来自servlet的文本/xml/json/html文件数据</p><hr>
<button οnclick="ajaxText()">ajax请求文本</button>
<button οnclick="ajaxXML()">ajax请求XML</button>
<button οnclick="ajaxJSON()">ajax请求json</button>
<button οnclick="ajaxHTML()">ajax请求html</button>
<div id="myDiv"></div>
</body>
</html>
E:/MyEclipse/AjaxAcceptServletData/book.txt:
静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
TextFileServlet:
package ServletFileType;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TextFile")
public class TextFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
response.setContentType("text/plain;charset=utf-8");
//从文件读取
BufferedReader reader = null;
String s = "";
String str = "";
try{
reader = new BufferedReader(new FileReader("E:/MyEclipse/AjaxAcceptServletData/book.txt"));
while((s=reader.readLine()) != null){ //每调用一次readLine(), 就读取一行数据(有数据的话)。
str += s;
}
System.out.println(str);
}catch(FileNotFoundException e){
e.printStackTrace();
}finally {
reader.close();
}
//发送数据
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(str.getBytes());
outputStream.flush();
outputStream.close();
}
}
E:/MyEclipse/AjaxAcceptServletData/message.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>HTML Demo</title>
</head>
<body>
<form action="表单验证.html" method="post" id="f">
<input class="i" type="text" name="name" value="赵凯鹏">
<input class="i" type="password" name="pass" value="123456">
<input class="i" type="submit" value="注册">
</form>
<div>
<img src="https://www.baidu.com/img/bd_logo1.png" width="100px" height="50px">
<a href="https://www.baidu.com/" target="_blank">百度</a>
</div>
<table border="2" width="400px" cellpadding="10" cellspacing="0" bgcolor="aqua">
<tbody>
<tr>
<td colspan="3" align="center">星期一菜谱</td>
</tr>
<tr>
<td rowspan="2" align="center">荤菜</td>
<td id="y" align="center">鱼香肉丝</td>
<td id="c" align="center">油焖大虾</td>
</tr>
<tr>
<td align="center">海参鲍鱼</td>
<td align="center">龙肝凤胆</td>
</tr>
</tbody>
</table>
</body>
</html>
HtmlFileServlet:
package ServletFileType;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
@WebServlet("/HtmlFile")
public class HtmlFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
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.setContentType("text/html;charset=utf-8");
response.setHeader("Cache-control", "no-cache");
//读文件
File input = new File("E:/MyEclipse/AjaxAcceptServletData/message.html");
Document doc = null;
try {
doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
} catch (IOException e) {
e.printStackTrace();
}
//发送
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(doc.toString().getBytes("utf-8"));
System.out.println(doc.toString());
outputStream.flush();
outputStream.close();
}
}
E:/MyEclipse/AjaxAcceptServletData/book.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!--文档注释 -->
<books>
<book show="yes">
<!--元素注释 -->
<name>西游记</name>
<price>66</price>
</book>
<book show="yes">
<name>红楼梦</name>
<price>88</price>
</book>
<book show="no">
<name>三国志</name>
<price>99</price>
</book>
<user>赵凯鹏</user>
</books>
XmlFileServlet:
package ServletFileType;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
@WebServlet("/XmlFile")
public class XmlFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
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.setContentType("text/xml;charset=utf-8");
response.setHeader("Cache-control", "no-cache");
//读取XML文件,获得document对象
SAXReader reader = new SAXReader();
String xmlString = null;
try {
reader.setEncoding("utf-8");
Document document = reader.read(new File("E:/MyEclipse/AjaxAcceptServletData/book.xml"));
xmlString = document.asXML(); //document ==> String
} catch (DocumentException e) {
e.printStackTrace();
}
ServletOutputStream outputStream = response.getOutputStream();
StringBuffer sb=new StringBuffer();
sb.append(xmlString);
System.out.println(sb);
outputStream.write(sb.toString().getBytes("utf-8"));
outputStream.flush();
outputStream.close();
}
}
E:/MyEclipse/AjaxAcceptServletData/book.json:
{
"user":{
"name":"赵凯鹏",
"age":23,
"birth":"1991-10-28 00:00:00",
"address":"北京"
},
"array":[
10,
20,
30
],
"arraylist":[
{
"name0":"赵0",
"age0":10,
"addr0":"科技0路"
},
{
"name1":"赵1",
"age1":11,
"addr1":"科技1路"
},
{
"name2":"赵2",
"age2":12,
"addr2":"科技2路"
}
]
}
JosnFileServlet:
package ServletFileType;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSONReader;
@WebServlet("/JsonFile")
public class JosnFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
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.setContentType("text/html;charset=utf-8");
response.setHeader("Cache-control", "no-cache");
//读取json文件的json字符串
JSONReader reader = null;
try {
reader = new JSONReader(new FileReader("E:/MyEclipse/AjaxAcceptServletData/book.json"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
StringBuffer sb=new StringBuffer();
sb.append("{");
reader.startObject();
while(reader.hasNext()){
String name = reader.readString();
String value = reader.readObject().toString();
sb.append("\""+name+"\":"+value+","); //最后一个,是多余的
}
reader.endObject();
reader.close();
sb.deleteCharAt(sb.length()-1); //删除最后一个,
sb.append("}");
//发送到ajax
ServletOutputStream outputStream = response.getOutputStream();
System.out.println(sb);
outputStream.write(sb.toString().getBytes("utf-8"));
/*
{"user":{"address":"北京","name":"赵凯鹏","birth":"1991-10-28 00:00:00","age":23},
"array":[10,20,30],
"arraylist":[{"addr0":"科技0路","age0":10,"name0":"赵0"},{"addr1":"科技1路","name1":"赵1","age1":11},{"addr2":"科技2路","name2":"赵2","age2":12}]}
*/
outputStream.flush();
outputStream.close();
}
}
参考:zzz