AJAX Servlet實(shí)現(xiàn)數(shù)據(jù)異步交互的方法
在慕課網(wǎng)上看了AJAX的一些教程,自己參考著實(shí)現(xiàn)一下!
首先,導(dǎo)入json所需要的6個(gè)包

總的目錄:

前端頁(yè)面:
首先是一個(gè)輸入框:
<input type="text" id="keyword" name="keyword" onkeyup="getContents()">
onkeyup表示按下鍵盤時(shí)的操作
javascript:
<script type="text/javascript">
//全局xmlHttp對(duì)象
var xmlHttp;
//獲得xmlHttp對(duì)象
function createXMLHttp() {
//對(duì)于大多數(shù)瀏覽器適用
var xmlHttp;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
//考慮瀏覽器的兼容性
if (window.ActiveXObject) {
xmlHttp = new ActiveXOject("Microsoft.XMLHTTP");
if (!xmlHttp) {
xmlHttp = new ActiveXOject("Msxml2.XMLHTTP");
}
}
return xmlHttp;
}
//回調(diào)函數(shù)
function callback() {
//4代表完成
if(xmlHttp.readyState == 4){
//200代表服務(wù)器響應(yīng)成功,404代表資源未找到,500服務(wù)器內(nèi)部錯(cuò)誤
if(xmlHttp.status == 200){
//交互成功獲得響應(yīng)的數(shù)據(jù),是文本格式
var result = xmlHttp.responseText;
//解析獲得的數(shù)據(jù)
var json = eval("("+ result +")");
//獲得數(shù)據(jù)之后,就可以動(dòng)態(tài)的顯示數(shù)據(jù)了,把數(shù)據(jù)顯示到輸入框下面
alert(json);
}
}
}
//獲得輸入框的內(nèi)容
function getContents(){
//首先獲得用戶的輸入內(nèi)容,這里獲得的是一個(gè)結(jié)點(diǎn)
var content = document.getElementById("keyword");
if(content.value ==""){
return;
}
//向服務(wù)器發(fā)送內(nèi)容,用到XmlHttp對(duì)象
xmlHttp = createXMLHttp();
//給服務(wù)器發(fā)送數(shù)據(jù),escape()不加中文會(huì)有問(wèn)題
var url = "search?keyword=" + escape(content.value);
//true表示js的腳本會(huì)在send()方法之后繼續(xù)執(zhí)行而不會(huì)等待來(lái)自服務(wù)器的響應(yīng)
xmlHttp.open("GET",url,true);
//xmlHttp綁定回調(diào)方法,這個(gè)方法會(huì)在xmlHttp狀態(tài)改變的時(shí)候調(diào)用,xmlHttp狀態(tài)有0-4,
//我們只關(guān)心4,4表示完成
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
</script>
總的index.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">
//全局xmlHttp對(duì)象
var xmlHttp;
//獲得xmlHttp對(duì)象
function createXMLHttp() {
//對(duì)于大多數(shù)瀏覽器適用
var xmlHttp;
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
//考慮瀏覽器的兼容性
if (window.ActiveXObject) {
xmlHttp = new ActiveXOject("Microsoft.XMLHTTP");
if (!xmlHttp) {
xmlHttp = new ActiveXOject("Msxml2.XMLHTTP");
}
}
return xmlHttp;
}
//回調(diào)函數(shù)
function callback() {
//4代表完成
if(xmlHttp.readyState == 4){
//200代表服務(wù)器響應(yīng)成功,404代表資源未找到,500服務(wù)器內(nèi)部錯(cuò)誤
if(xmlHttp.status == 200){
//交互成功獲得響應(yīng)的數(shù)據(jù),是文本格式
var result = xmlHttp.responseText;
//解析獲得的數(shù)據(jù)
var json = eval("("+ result +")");
//獲得數(shù)據(jù)之后,就可以動(dòng)態(tài)的顯示數(shù)據(jù)了,把數(shù)據(jù)顯示到輸入框下面
alert(json);
}
}
}
//獲得輸入框的內(nèi)容
function getContents(){
//首先獲得用戶的輸入內(nèi)容,這里獲得的是一個(gè)結(jié)點(diǎn)
var content = document.getElementById("keyword");
if(content.value ==""){
return;
}
//向服務(wù)器發(fā)送內(nèi)容,用到XmlHttp對(duì)象
xmlHttp = createXMLHttp();
//給服務(wù)器發(fā)送數(shù)據(jù),escape()不加中文會(huì)有問(wèn)題
var url = "search?keyword=" + escape(content.value);
//true表示js的腳本會(huì)在send()方法之后繼續(xù)執(zhí)行而不會(huì)等待來(lái)自服務(wù)器的響應(yīng)
xmlHttp.open("GET",url,true);
//xmlHttp綁定回調(diào)方法,這個(gè)方法會(huì)在xmlHttp狀態(tài)改變的時(shí)候調(diào)用,xmlHttp狀態(tài)有0-4,
//我們只關(guān)心4,4表示完成
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}
</script>
</head>
<body>
<input type="text" id="keyword" name="keyword" onkeyup="getContents()">
</body>
</html>
后端:
AjaxServlet.java
package com.loger.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
/**
* Servlet implementation class AjaxServlet
*/
@WebServlet("/search")
public class AjaxServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
static List<String> list = new ArrayList<>();
static{
list.add("chenle");
list.add("陳樂");
}
/**
* @see HttpServlet#HttpServlet()
*/
public AjaxServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//設(shè)置編碼
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//首先獲得客戶端發(fā)送來(lái)的數(shù)據(jù)
String keyword = request.getParameter("keyword");
System.out.println(keyword);
//返回json數(shù)據(jù)
response.getWriter().write(JSONArray.fromObject(list).toString());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
運(yùn)行結(jié)果:

這就是AJAX的實(shí)現(xiàn)步驟,其他在頁(yè)面上把內(nèi)容顯示出來(lái),如輸入驗(yàn)證碼時(shí)在旁邊實(shí)時(shí)提示是否正確等操作,通過(guò)JS實(shí)現(xiàn)即可,由于本人沒怎么學(xué)過(guò)js,就這樣子吧?。?!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java如何使用elasticsearch進(jìn)行模糊查詢
這篇文章主要介紹了Java如何使用elasticsearch進(jìn)行模糊查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Java實(shí)現(xiàn)word轉(zhuǎn)pdf并在關(guān)鍵字位置插入圖片
這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)word轉(zhuǎn)pdf,并在word中關(guān)鍵字位置插入圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
Java的JSON轉(zhuǎn)換庫(kù)GSON的基本使用方法示例
GSON是Google制作的一個(gè)可以讓Java對(duì)象與JSON互相轉(zhuǎn)換的類庫(kù),下面我們就來(lái)看一下Java的JSON轉(zhuǎn)換庫(kù)GSON的基本使用方法示例:2016-06-06
MyBatis中操作類對(duì)象的實(shí)現(xiàn)
在MyBatis框架中,操作類對(duì)象是用于執(zhí)行數(shù)據(jù)庫(kù)操作的核心對(duì)象,本文主要介紹了MyBatis中操作類對(duì)象的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
MyBatis-Plus 分頁(yè)插件配置的兩種方式實(shí)現(xiàn)
本文主要介紹了MyBatis-Plus 分頁(yè)插件配置的兩種方式實(shí)現(xiàn),包括使用PaginationInterceptor和MybatisPlusInterceptor兩種方式,具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03

