Servlet+Ajax实现百度智能搜索
来源:互联网 发布:淘宝的潘多拉是真的吗 编辑:程序博客网 时间:2024/05/21 07:03
通常在一个form表单的搜索输入框中我们输入想要搜索的数据时,无任何提示或者提示我们曾经输入过的数据,这并没有什么用处。我们可以看看诸如百度的搜索框,我们每次在输入框中输入数据时,都会在下面出现一个下拉列表,提示我们想要搜索的值,这些都是百度搜索引擎中从数据库里面读取出来的数据。现在我们实现一个模拟百度智能搜索的操作
1.建立前端模板 index.jsp<%@page language="java" contentType="text/html;charset=UTF-8" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>百度一下,你就知道</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="viewport" content="width=devide-width,initial-scale=1.0" /> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="CSS/style.css" /> <script type="text/javascript" src="JS/search.js"></script> </head> <body> <img src="Images/logo.png" title="百度一下" /> <form action="#" method="get"> <input type="text" name="inform" id="inform" placeholder="百度一下,你就知道" /> <button type="submit">百度一下</button> </form> <table id="content-table"> <tbody id="content-body"> </tbody> </table> </body></html>
2.编写简单的CSS布局效果 CSS/style.cssbody{padding: 0px;margin: 0px;}img{margin-left: 450px;margin-top: 10px;}form{position: absolute;left: 450px;top: 300px;}input{width: 540px;height: 35px;}input:hover{border: 1px solid grey;}button{width: 100px;height: 35px;background-color: rgb(51,133,255);margin-left: -10px; }button:hover{background-color: rgb(49,126,243);cursor: pointer;}table{margin-left: 450px;margin-top: 68px;border: 1px solid rgba(128,128,128,0.5); border-radius: 2px; width: 540px; height: 35px; visibility: hidden;}table tr:hover{background-color: rgb(240,240,240); cursor: pointer;}
3.编写核心JS操作 JS/search.jswindow.onload = function(){ //1.获取输入的值 var content, inform; function getSearchValue(){ inform = document.getElementById("inform"); content = inform.value; }; getSearchValue(); //2.获取Ajax对象 var ajax = null; function getAjaxObject(){ if(window.XMLHttpRequest) return new XMLHttpRequest(); if(window.ActiveXObject) return new ActiveXObject(Microsoft.XMLHTTP); return new ActiveXObject(Msxml.XMLHTTP); }; ajax = getAjaxObject(); //3.定义输入框的keyup事件 var table = document.getElementById("content-table"); var tbody = document.getElementById("content-body"); inform.onkeyup = function(){ getSearchValue(); if(content == ""){ tbody.innerHTML = ""; table.style.visibility = "hidden"; return ; } //4.发送Ajax异步请求 var url = "search?keyword="+encodeURI(encodeURI(content)); ajax.open("GET", url, true); //5.获得服务器返回的JSON数据 ajax.onreadystatechange = function(){ if((ajax.readyState == 4 && ajax.status == 200)){ var result = ajax.responseText; //解析获得的json数据 var json = eval("(" + result + ")"); //6.对传回来的数据进行table显示 showData(json); } }; ajax.send(null); }; //显示传回来的json数据 function showData(json){ var length = json.length; tbody.innerHTML = ""; if(length == 0){ table.style.visibility = "hidden"; return; } table.style.visibility = "visible"; for(var i=0; i<length; i++){ var tr = document.createElement("tr"); var td = document.createElement("td"); var text = document.createTextNode(json[i]); td.appendChild(text); tr.appendChild(td); tbody.appendChild(tr); } }; //7.当输入框失去焦点时隐藏提示框 inform.onblur = function(){ table.style.visibility = "hidden"; }; //8.当输入框重新获得焦点时如果之前提示框有数据则继续显示 inform.onclick = function(){ if(tbody.innerHTML == "" || table.rows.length == 0) return ; table.style.visibility = "visible"; }; };
4.编写Servlet处理ajax响应 com.imooc.SearchServletpackage com.imooc;import java.io.IOException;import java.net.URLDecoder;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONArray;public class SearchServlet extends HttpServlet { private static final long serialVersionUID = 1L; //事先定义静态数据模拟数据库操作 private static List<String> datas = new ArrayList<String>() ; static{ datas.add("ajax api"); datas.add("ajax编程中文版"); datas.add("ajax教程"); datas.add("轩辕剑之天之痕"); datas.add("天上人间"); datas.add("从此有你不寒冷"); datas.add("孤芳不自赏"); datas.add("中国传媒大学"); datas.add("湖南工业大学"); datas.add("陈思诚出轨"); datas.add("当红小鲜肉"); datas.add("当浪漫也是一种罪"); datas.add("回家的诱惑"); datas.add("UFO的由来"); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //进行数据编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String keyword = request.getParameter("keyword"); keyword = URLDecoder.decode(keyword, "utf-8"); String result[] = new String[5]; int index = 0; //与datas集合对象模拟数据库检索 for(String data: datas){ if(data.indexOf(keyword) < 0) continue ; result[index++] = data; if(index == 5) break; } String data[] = new String[index]; for(int i=0; i<index; i++){ data[i] = result[i]; } //将JSON数据传回给浏览器 response.getWriter().write(JSONArray.fromObject(data).toString()); }}
5.在web.xml配置文件中配置Servlet web.xml <!-- 配置Servlet --> <servlet> <servlet-name>search</servlet-name> <servlet-class>com.imooc.SearchServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>search</servlet-name> <url-pattern>/search</url-pattern> </servlet-mapping>
实现效果图:
参考出处:慕课网->Servlet+Ajax实现智能化搜索视频教程
1 0
- Servlet+Ajax实现百度智能搜索
- Servlet+Ajax实现搜索框智能提示
- Ajax+Servlet实现智能搜索框
- Servlet+Ajax实现搜索框智能提示
- Js+ajax实现智能百度搜索框
- Servlet+Ajax实现简易的仿百度搜索框智能提示
- ajax+servlet实现百度智能小搜索框———慕课课程
- Ajax+Servlet实现搜索框的智能提示
- Servlet+Ajax实现简单的搜索框智能提示
- servlet+ajax智能搜索框智能提示
- 基于Servlet百度搜索效果的Ajax的实现实例
- ajax(2)实现智能输入提示(类似百度搜索框智能输入)
- Ajax+Servlet+jsp仿百度搜索效果
- Servlet+ajax实现模糊搜索
- ajax实现百度搜索建议
- servlet+ajax搜索智能提示demo(原生js)
- AJAX实现百度搜索栏效果
- 超级简单的实现搜索框智能提示 JQuery+Servlet
- JavaWeb总结二十五、jsp简单标签开发(一)
- 常见的排序算法的比较
- 传统优化算法与遗传算法之间的优缺点和特点比较
- StackOverflowError:android.view.View.jumpDrawablesToCurrentState
- 算法提高 9-3摩尔斯电码
- Servlet+Ajax实现百度智能搜索
- 大王叫我来巡山~(数据库 for update 锁表相关问题~)
- C# this关键字用法
- JS中的!=、== 、!==、===的用法和区别。
- Java Timer详解
- JavaWeb总结二十六、jsp简单标签标签库开发(二)
- 随笔------->2017
- Linux下SSH代理
- elasticsearch-自定义分析器