AJAX Servlet实现数据异步交互的方法

 更新时间:2017年07月06日 14:25:02   作者:Loger丶  
本篇文章主要介绍了AJAX Servlet实现数据异步交互的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

在慕课网上看了AJAX的一些教程,自己参考着实现一下!

首先,导入json所需要的6个包

下载链接:JSONObjectjar_jb51.rar

总的目录:

前端页面:

首先是一个输入框:

<input type="text" id="keyword" name="keyword" onkeyup="getContents()">

onkeyup表示按下键盘时的操作

javascript:

<script type="text/javascript">
  
  //全局xmlHttp对象
  var xmlHttp;

  //获得xmlHttp对象
  function createXMLHttp() {
    //对于大多数浏览器适用
    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;
  }
  
  //回调函数
  function callback() {
    //4代表完成
    if(xmlHttp.readyState == 4){
      //200代表服务器响应成功,404代表资源未找到,500服务器内部错误
      if(xmlHttp.status == 200){
        //交互成功获得响应的数据,是文本格式
        var result = xmlHttp.responseText;
        //解析获得的数据
        var json = eval("("+ result +")");
        //获得数据之后,就可以动态的显示数据了,把数据显示到输入框下面
        alert(json);
      }
    }
  }
  
  //获得输入框的内容
  function getContents(){
    //首先获得用户的输入内容,这里获得的是一个结点
    var content = document.getElementById("keyword");
    if(content.value ==""){
      return;
    }
    
    //向服务器发送内容,用到XmlHttp对象
    xmlHttp = createXMLHttp();
    //给服务器发送数据,escape()不加中文会有问题
    var url = "search?keyword=" + escape(content.value);
    //true表示js的脚本会在send()方法之后继续执行而不会等待来自服务器的响应
    xmlHttp.open("GET",url,true);
    //xmlHttp绑定回调方法,这个方法会在xmlHttp状态改变的时候调用,xmlHttp状态有0-4,
    //我们只关心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() {
    //对于大多数浏览器适用
    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;
  }
  
  //回调函数
  function callback() {
    //4代表完成
    if(xmlHttp.readyState == 4){
      //200代表服务器响应成功,404代表资源未找到,500服务器内部错误
      if(xmlHttp.status == 200){
        //交互成功获得响应的数据,是文本格式
        var result = xmlHttp.responseText;
        //解析获得的数据
        var json = eval("("+ result +")");
        //获得数据之后,就可以动态的显示数据了,把数据显示到输入框下面
        alert(json);
      }
    }
  }
  
  //获得输入框的内容
  function getContents(){
    //首先获得用户的输入内容,这里获得的是一个结点
    var content = document.getElementById("keyword");
    if(content.value ==""){
      return;
    }
    
    //向服务器发送内容,用到XmlHttp对象
    xmlHttp = createXMLHttp();
    //给服务器发送数据,escape()不加中文会有问题
    var url = "search?keyword=" + escape(content.value);
    //true表示js的脚本会在send()方法之后继续执行而不会等待来自服务器的响应
    xmlHttp.open("GET",url,true);
    //xmlHttp绑定回调方法,这个方法会在xmlHttp状态改变的时候调用,xmlHttp状态有0-4,
    //我们只关心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 {
    //设置编码
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    
    //首先获得客户端发送来的数据
    String keyword = request.getParameter("keyword");
    System.out.println(keyword);
    
    
    
    //返回json数据
    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
  }

}

运行结果:

这就是AJAX的实现步骤,其他在页面上把内容显示出来,如输入验证码时在旁边实时提示是否正确等操作,通过JS实现即可,由于本人没怎么学过js,就这样子吧!!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • IDEA中如何移除未使用的包

    IDEA中如何移除未使用的包

    这篇文章主要介绍了IDEA中如何移除未使用的包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Springboot启动同时创建数据库和表实现方法

    Springboot启动同时创建数据库和表实现方法

    这篇文章主要介绍了Springboot启动同时创建数据库和表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • maven的生命周期及常用命令介绍

    maven的生命周期及常用命令介绍

    maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。下面通过本文给大家分享maven的生命周期及常用命令介绍,需要的朋友参考下吧
    2017-11-11
  • Java中String类使用方法总结

    Java中String类使用方法总结

    这篇文章主要介绍了Java中String类的使用方法,文章简单易懂,结尾有实例代码帮助大家理解学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java数据结构 递归之迷宫回溯案例讲解

    Java数据结构 递归之迷宫回溯案例讲解

    这篇文章主要介绍了Java数据结构递归之迷宫回溯案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 线程池之newFixedThreadPool定长线程池的实例

    线程池之newFixedThreadPool定长线程池的实例

    这篇文章主要介绍了线程池之newFixedThreadPool定长线程池的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java.io.IOException: UT010029: Stream is closed异常分析及解决

    java.io.IOException: UT010029: Stream is closed异常分析及解决

    这篇文章主要给大家介绍了关于java.io.IOException: UT010029: Stream is closed异常分析及解决办法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-02-02
  • java.sql.SQLException: connection holder is null错误解决办法

    java.sql.SQLException: connection holder is null错误解决办法

    这篇文章主要给大家介绍了关于java.sql.SQLException: connection holder is null错误的解决办法,这个错误通常是由于连接对象为空或未正确初始化导致的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Spring中@Autowired与@Resource的区别详析

    Spring中@Autowired与@Resource的区别详析

    @Autowired与@Resource都可以用来装配bean,都可以写在字段上,或写在setter方法上,下面这篇文章主要给大家介绍了关于Spring中@Autowired与@Resource区别的相关资料,需要的朋友可以参考下
    2021-10-10
  • SpringBoot中使用Redis的完整实例

    SpringBoot中使用Redis的完整实例

    这篇文章主要给大家介绍了关于SpringBoot中使用Redis的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论