Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ajax+servlet实现百度智能提示搜索框--来自慕课课程

ajax+servlet实现百度智能提示搜索框--来自慕课课程

作者头像
xiaohejun
发布于 2020-02-17 15:33:02
发布于 2020-02-17 15:33:02
60000
代码可运行
举报
运行总次数:0
代码可运行

查看Demo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @author xiaohejun
 * Man Always Remember Love Because of Romance Only.
 * 
 */

一.实现效果:

1.serach.jsp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>搜索</title>
    <style type="text/css">
        #myDiv {
            position:absolute;
            left: 50%;
            top: 50%;
            margin-left: -200px;
            margin-top: -50px;
        }
        .mouseOver{
            background: #708090;
            color: #FFFAFA;
        }
        .mouseOut{
            background: #FFFAFA;
            color: #000000;
        }
    </style>

    <script type="text/javascript">
        var xmlHttp;
        /*获得用户关联信息*/
        function getMoreContents() {
            // 首先获得用户输入
            var content = document.getElementById("keyword");
            if(content.value == ""){
                return;
            }
            // 然后给服务器发送用户输入类容,用ajax异步发送请求,获得一个对象,骄傲做xmlHttp
            xmlHttp = createXmlHttp();
            // 要给服务器发送数据,escape()方法对字符串进行编码
            var url="search?keyword=" + decodeURI(content.value);
            // 和服务器建立链接,true参数表示javascript脚本会在send()方法之后继续执行,而且不会等待来自服务器的响应
            xmlHttp.open("GET",url);
            // 绑定一个回调方法,这个会调方法会在xmlHttp状态改变0-4,我们只关心4(complete)这个状态,完成之后,调用回调方法
            xmlHttp.onreadystatechange=callback;
            xmlHttp.send(null);
        }

        // 清空之前的数据
        function clearContent() {
            var tbody = document.getElementById("content_table_body");
            var size = tbody.childNodes.length;
            for (var i = size-1; i >= 0;i--) {
                tbody.removeChild(tbody.childNodes[i]);
            }
            document.getElementById("popDiv").style.border = "none";
        }

        //回调函数
        function callback() {

            if(xmlHttp.readyState==4){
                // 服务器响应成功
                if(xmlHttp.status==200){
                    // 交互成功,获得响应数据
                    var result = xmlHttp.responseText;
                    // 解析成JSON格式
                    var json = eval("("+result+")");
                    // 获得数据之后,就可以动态显示这些数据,把这些数据展示到输入框的下面
                    setContent(json);
                }
            }
        }
        // 设置关联数据的展示
        function setContent(contents) {

            clearContent();
            setLocation();
            var size = contents.length;
            for (var i = 0; i < size; i++) {
                var nextNode = contents[i];
                var tr = document.createElement("tr");
                var td = document.createElement("td");
                td.setAttribute("border","0");
                td.bgColor = "white";
                td.onmouseover = function () {
                    this.className = 'mouseOver';
                };
                td.onmouseout = function () {
                    this.className = 'mouseOut';
                }
                td.onmousedown = function() {
                    document.getElementById("keyword").value = this.innerHTML;
                }
                var text = document.createTextNode(nextNode);
                td.appendChild(text);
                tr.appendChild(td);
                document.getElementById('content_table_body').appendChild(tr);
            }
        }
        // 获得xmlHttp对象
        function createXmlHttp() {
            // 对于大多数浏览器适用的
            var xmlHttp;
            if (window.XMLHttpRequest) {
                xmlHttp = new XMLHttpRequest();
            }
            // 要考虑浏览器的兼容
            if (window.ActiveXObiect) {
                xmlHttp = new ActiveXObiect("Microsoft.XMLHTTP");
                if (!xmlHttp) {
                    xmlHttp = new ActiveXObiect("Msxml2.XMLHTTP");
                }
            }
            return xmlHttp;
        }

        function keywordBlur() {
            clearContent();
        }

        // 设置显示的位置
        function setLocation() {
            // 关联信息的显示位置要和输入框一致
            var content = document.getElementById("keyword");
            // 输入框的宽度
            var width = content.offsetWidth;
            // 到左边框的距离
            var left = content["offsetLeft"];
            // 到顶部的距离
            var top = content["offsetTop"] + content.offsetHeight;
            // 获得显示数据的div
            var popDiv = document.getElementById("popDiv");
            popDiv.style.border = "black 1px solid";
            popDiv.style.left = left + "px";
            popDiv.style.top = top + "px";
            popDiv.style.width = width + "px";
            document.getElementById("content_table").style.width = width + "px";
        }
    </script>
</head>
<body>
<div id="myDiv">
    <!-- 输入框 -->
    <input type="text" size="50" id="keyword" onkeyup="getMoreContents()" onblur="keywordBlur()" onfocus="getMoreContents()"/>
    <input type="button" value="百度一下" width="50px"/>
    <!-- 内容展示的区域 -->
    <div id="popDiv">
        <table id="content_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0">
            <tbody id="content_table_body">

            </tbody>
        </table>
    </div>
</div>
</body>
</html>

2.SearchServlet.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.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 search
 */
@WebServlet("/search")
public class SearchServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private static List<String> datas;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public SearchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
    static {
    	datas  = new ArrayList<String>();
    	datas.add("ajax");
    	datas.add("ajax post");
    	datas.add("b啊哈");
    	datas.add("b哈");
    	datas.add("这是ajax");
    	datas.add("你全家都是ajax");
    }
    public List<String> getData(String keyword) {
		List<String> list = new ArrayList<String>();
		for (String data : datas) {
			if (data.contains(keyword)) {
				list.add(data);
			}
		}
    	return list;
	}
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ 
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");;
		String keyword = request.getParameter("keyword");
		List<String> listData = getData(keyword);
		response.getWriter().write(JSONArray.fromObject(listData).toString());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

注意:不可以使用escape()函数编码,已经过时

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-08-082,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ajax+Servlet实现智能搜索框
前端代码: <%@ 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=
技术从心
2019/08/06
9560
Ajax+Servlet实现智能搜索框
Ajax异步验证登陆或者注册
首先介绍一个不错的学习Ajax的中文网站:http://www.w3school.com.cn/ajax/index.asp AJAX = 异步 JavaScript 和 XML。详细介绍见上面的网址
别先生
2018/01/02
3.9K0
Ajax异步验证登陆或者注册
Ajax的基础使用
简介:Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
GeekLiHua
2025/01/21
960
Ajax的基础使用
【前端开发系列】—— 别说你不会Ajax
之前一直都是用封装好的Ajax,所以一直很好奇它是如何使用和实现的。这里正好就进行一下学习,下面是Ajax的一个时间图。 设置触发条件   这里模拟一个使用场景,就是在用户登陆时,异步的对用户名以
用户1154259
2018/01/18
6480
【前端开发系列】—— 别说你不会Ajax
day16_ajax学习笔记
JavaScript 中 XMLHttpRequest对象是整个Ajax技术的核心,它提供了异步发送请求的能力。
黑泽君
2018/10/11
1.1K0
day16_ajax学习笔记
开发一定要看的Ajax编程
Ajax编程入门 1.web交互的2种模式对比 ①:2种交互模式的流程 ②:2种交互模式用户体验 同步交互模式:客户端提交请求,等待,在响应回到客户端前,客户端无法进行其他操作 异步交互模型:客户端将
Java帮帮
2018/03/19
1.4K0
开发一定要看的Ajax编程
java从入门到精通二十三(Servlet)
就那我么部署的项目来说。我们开启服务后。然后我们通过一段链接来访问我们的服务器然后得到响应数据。
兰舟千帆
2022/07/16
9460
java从入门到精通二十三(Servlet)
jquery和ajax实战教程_ajax可以跨域吗
主要的效果是使用ajax来实现书籍的价格随着书籍的数量变化,有一个增加按钮和一个减少按钮
全栈程序员站长
2022/09/22
7650
jquery和ajax实战教程_ajax可以跨域吗
fastjson +ajax 使用教程
JSON数据和Java对象转换 导入坐标 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> ``` Java对象转JSON ```java String jsonStr = JSON.toJS
ruochen
2022/03/08
3K0
Java Web项目 慧心人力资源管理系统[通俗易懂]
人力资源公司为了提高管理效率,需开发一套B/S结构人力资源管理系统,对员工信息进行管理,主要功能如下:
全栈程序员站长
2022/09/02
7610
Servlet实现一个简单的登录【验证码】功能
最新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接) ●【新】HTML5知识点视频更新了!(回复【前端资料】获取下载链接) ●答案公布时间:为每期发布题目的第二天 ★【新】回复“测试题”获取昨天发布的软件工程师初级阶段测试题答案 ★【新】回复“学习资料”获取java学习电子文档 ★【新】需要求职简历模板的可以加小编微信xxf960513 ★【新】回复“聊天系统”获取java多人聊天系统项目源码! ●我希望大家积极参与答题!有什么不懂可以加小编微信进
Java学习
2018/04/16
1.8K0
Servlet实现一个简单的登录【验证码】功能
AJAX应用【股票案例、验证码校验】
股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据。当鼠标移动到具体的股票中,它会显示具体的信息。 我们首先来看一下要做出来的效果: 服务器端分析 首先,从效果图我们可以看见很多股票基本信
Java3y
2018/03/16
2.1K0
AJAX应用【股票案例、验证码校验】
JavaScript : 浅讲ajax1.ajax入门案例
1478763627140018779.jpg 1.ajax入门案例 1.1 搭建Web环境 ajax对于各位来说,应该都不陌生,正因为ajax的产生,导致前台页面和服务器之间的数据传输变得非常容易,同时还可以实现页面的局部刷新。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 对于JavaWeb项目而言,ajax主要用于浏览器和服务器之间数据的传输。 如果是单单地堆砌知识点,会显得比较无聊,那么根据惯例,我先不继续介绍
剽悍一小兔
2018/05/17
7160
【JavaWeb】学习笔记——Ajax、Axios
AJAX(Asynchronous JavaScript And XML):异步的JavaScript 和 XML
鸡先生
2022/10/29
8900
【JavaWeb】学习笔记——Ajax、Axios
servlet+jsp/js二种实现方式:三级联动(附加demo代码)
V_1.0 准备工作: #1.创建表 [城市信息表] [行政区信息表] create table city( cid int, cname varchar(200), pid int ); create table qu( qid int, qname varchar(200), cid int ); 2.制造测试数据 insert into city values(1,"北京市",
挑战者
2018/06/29
2.9K0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
刚刚学完了MVC,根据自己的感悟和理解写了一个小项目。 完全按照MVC模式,后面有一个MVC的理解示意图。
谙忆
2021/01/21
4370
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
JavaWeb核心篇(6)——Ajax
Ajax(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML。
秋落雨微凉
2022/10/25
8.8K0
JavaWeb核心篇(6)——Ajax
JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一、AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术、改善用户体验,实现无刷新效
张果
2018/01/04
3.7K0
JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
文件上传---动作条
  利用Apache commons fileupload上传文件,直接显示其完成的进度条。----示例代码源自《JAVA WEB王者归来》   1 首先要显示动作条要利用Ajax的异步请求,使得在没有完成时,不会刷新本页,而是局部的刷新。如果没有指定form的定向页面,默认是刷新本页,正常我们提交一个form刷新本页,在没有完成请求前是显示空白的网页,这里我们指定他刷新一个不显示的区域,就要用到form的属性target。 <iframe name=uploadiframe width=0 height=
用户1154259
2018/01/18
1K0
文件上传---动作条
Servlet实现注册登录列表页面及其相互跳转功能
需求 注册页面添加登录链接 登录页面添加注册链接 注册成功跳转到登录页面 注册失败跳转到注册页面 登录成功跳转到用户列表页面 登录失败跳转到登录页面 分析 建库建表 一个连接数据库的DBUtil工具类 一个用户列表的model包 注册,登录,用户列表三个.java代码页面 三个.jsp页面 一个web.xml文件 代码实现 1. 创建DBUtil工具类 增删改查共同代码 package top.gaojc; import java.sql.Connection; import java.sql.Drive
是阿超
2021/10/15
1.9K0
推荐阅读
相关推荐
Ajax+Servlet实现智能搜索框
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验