AJAX Servlet實現(xiàn)數(shù)據(jù)異步交互的方法
在慕課網(wǎng)上看了AJAX的一些教程,自己參考著實現(xiàn)一下!
首先,導(dǎo)入json所需要的6個包
總的目錄:
前端頁面:
首先是一個輸入框:
<input type="text" id="keyword" name="keyword" onkeyup="getContents()">
onkeyup表示按下鍵盤時的操作
javascript:
<script type="text/javascript"> //全局xmlHttp對象 var xmlHttp; //獲得xmlHttp對象 function createXMLHttp() { //對于大多數(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)部錯誤 if(xmlHttp.status == 200){ //交互成功獲得響應(yīng)的數(shù)據(jù),是文本格式 var result = xmlHttp.responseText; //解析獲得的數(shù)據(jù) var json = eval("("+ result +")"); //獲得數(shù)據(jù)之后,就可以動態(tài)的顯示數(shù)據(jù)了,把數(shù)據(jù)顯示到輸入框下面 alert(json); } } } //獲得輸入框的內(nèi)容 function getContents(){ //首先獲得用戶的輸入內(nèi)容,這里獲得的是一個結(jié)點 var content = document.getElementById("keyword"); if(content.value ==""){ return; } //向服務(wù)器發(fā)送內(nèi)容,用到XmlHttp對象 xmlHttp = createXMLHttp(); //給服務(wù)器發(fā)送數(shù)據(jù),escape()不加中文會有問題 var url = "search?keyword=" + escape(content.value); //true表示js的腳本會在send()方法之后繼續(xù)執(zhí)行而不會等待來自服務(wù)器的響應(yīng) xmlHttp.open("GET",url,true); //xmlHttp綁定回調(diào)方法,這個方法會在xmlHttp狀態(tài)改變的時候調(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對象 var xmlHttp; //獲得xmlHttp對象 function createXMLHttp() { //對于大多數(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)部錯誤 if(xmlHttp.status == 200){ //交互成功獲得響應(yīng)的數(shù)據(jù),是文本格式 var result = xmlHttp.responseText; //解析獲得的數(shù)據(jù) var json = eval("("+ result +")"); //獲得數(shù)據(jù)之后,就可以動態(tài)的顯示數(shù)據(jù)了,把數(shù)據(jù)顯示到輸入框下面 alert(json); } } } //獲得輸入框的內(nèi)容 function getContents(){ //首先獲得用戶的輸入內(nèi)容,這里獲得的是一個結(jié)點 var content = document.getElementById("keyword"); if(content.value ==""){ return; } //向服務(wù)器發(fā)送內(nèi)容,用到XmlHttp對象 xmlHttp = createXMLHttp(); //給服務(wù)器發(fā)送數(shù)據(jù),escape()不加中文會有問題 var url = "search?keyword=" + escape(content.value); //true表示js的腳本會在send()方法之后繼續(xù)執(zhí)行而不會等待來自服務(wù)器的響應(yīng) xmlHttp.open("GET",url,true); //xmlHttp綁定回調(diào)方法,這個方法會在xmlHttp狀態(tài)改變的時候調(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ā)送來的數(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 } }
運行結(jié)果:
這就是AJAX的實現(xiàn)步驟,其他在頁面上把內(nèi)容顯示出來,如輸入驗證碼時在旁邊實時提示是否正確等操作,通過JS實現(xiàn)即可,由于本人沒怎么學(xué)過js,就這樣子吧?。?!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot啟動同時創(chuàng)建數(shù)據(jù)庫和表實現(xiàn)方法
這篇文章主要介紹了Springboot啟動同時創(chuàng)建數(shù)據(jù)庫和表,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01Java數(shù)據(jù)結(jié)構(gòu) 遞歸之迷宮回溯案例講解
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)遞歸之迷宮回溯案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08線程池之newFixedThreadPool定長線程池的實例
這篇文章主要介紹了線程池之newFixedThreadPool定長線程池的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決
這篇文章主要給大家介紹了關(guān)于java.io.IOException:?UT010029:?Stream?is?closed異常分析及解決辦法,文中通過代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-02-02java.sql.SQLException:?connection?holder?is?null錯誤解決辦法
這篇文章主要給大家介紹了關(guān)于java.sql.SQLException:?connection?holder?is?null錯誤的解決辦法,這個錯誤通常是由于連接對象為空或未正確初始化導(dǎo)致的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-02-02Spring中@Autowired與@Resource的區(qū)別詳析
@Autowired與@Resource都可以用來裝配bean,都可以寫在字段上,或?qū)懺趕etter方法上,下面這篇文章主要給大家介紹了關(guān)于Spring中@Autowired與@Resource區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-10-10