基于Servlet和Ajax实现搜索框智能提示

基于Servlet和Ajax实现搜索框智能提示 前段时间自己项目需要实现智能提示功能,于是在网上搜索了相关技术,发现这一篇博文介绍得较为详细,故自己排了下版面

本文包含相关资料包-----> 点击直达获取<-------

基于Servlet和Ajax实现搜索框智能提示

前段时间自己项目需要实现智能提示功能,于是在网上搜索了相关技术,发现这一篇博文介绍得较为详细,故自己排了下版面,转载到此处,方便自己今后查阅。

一、简介

搜索框相信大家都不陌生,几乎每天都会在各类网站进行着搜索。有没有注意到,很多的搜索功能,当输入内容时,下面会出现提示。这类提示就叫做搜索框的智能提示,本次就为大家介绍如何使用Servlet和Ajax来实现。主要介绍实现原理和代码的前后台实现过程。

二、项目分析

  • 实现语言 :java

  • 实现方式 :Ajax异步传输

  • 案例 :比如百度的搜索框智能提示

理论分析

  • 在搜索框输入关键字

  • 浏览器将关键字 异步 发送给服务器

  • 服务器经过处理,将相应的数据以JSon(xml)格式返回给客户端

  • 客户端接收到服务器的响应数据,解析之后使用JS操作DOM显示数据

演示流程图分析

重点内容

  • 数据交互采用ajax方式

  • JavaScript解析数据动态展示

三、页面开发

3.1 HTML部分

body内容

```html

<%--动态查询出来的数据,显示在此--%>

```

3.2 CSS部分

样式代码

```css

```

3.3 JavaScript部分

获取用户输入内容的关联信息的函数

javascript function getMoreContents() { //首先获取用户的输入 var content = document.getElementById("keyword"); if (content.value == "") { clearContent(); return; } //然后给服务器发送用户输入的内容,因为采用ajax异步发送数据,所以使用XmlHttp对象 xmlHttp = creatXMLHttp(); //给服务器发送数据 var url = "search?keyword=" + escape(content.value); xmlHttp.open("GET", url, true); //xmlHttp绑定回调方法,这个回调方法会在xmlHttp状态改变的时候被调用 //xmlHttp 状态0-4,我们只关心4(complete),完成后再调用回调方法才有意义 xmlHttp.onreadystatechange = callback; xmlHttp.send(null); }

获取XmlHttp对象

javascript function creatXMLHttp() { //对于大多数浏览器都适用 var xmlHttp; if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } //要考虑浏览器的兼容性 if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); if (!xmlHttp) { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } } return xmlHttp; }

回调函数

javascript function callback() { //4代表成功 if (xmlHttp.readyState == 4) { //200代表服务器响应成功 if (xmlHttp.status == 200) { //交互成功 获得响应的数据 是文本格式 var result = xmlHttp.responseText; //解析数据 var json = eval("(" + result + ")"); //获取数据后动态显示 展示输入框下面 setContent(json); } } }

设置关联数据展示

javascript function setContent(contents) { clearContent(); setLocation(); //获取关联数据的长度,以此来确定生成的<tr> var size = contents.length; //设置内容 for (var i = 0; i < size; i++) { var nextNode = contents[i];//代表的是JSon数据的第i个元素 var tr = document.createElement("tr"); var td = document.createElement("td"); td.setAttribute("border", "0"); td.setAttribute("bgcolor", "#FFFAFA"); td.onmouseover = function () { this.className = 'mouseOver'; }; td.onmouseout = function () { this.className = 'mouseOut'; }; td.onmousedown=function(){ //当鼠标点击一个关联数据的时候,被选中的数据 自动填充到输入框里面 document.getElementById("keyword").value=this.innerHTML; //清除div边框 document.getElementById("popDiv").style.border="none"; }; var text = document.createTextNode(nextNode); td.appendChild(text); tr.appendChild(td); document.getElementById("content_table_body").appendChild(tr); } }

3.4 前后台程序联调

清空之前的数据

javascript function clearContent() { var contentTableBody = document.getElementById("content_table_body"); var size = contentTableBody.childNodes.length; for (var i = size - 1; i >= 0; i--) { contentTableBody.removeChild(contentTableBody.childNodes[i]); } document.getElementById("popdiv").style.border = "none"; }

输入框失去焦点 清空

javascript function keywordBlur() { clearContent(); }

设置显示关联信息

javascript 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"; }

3.5 编写SearchServlet.java

```java import net.sf.json.JSONArray; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*;

public class SearchServlet extends HttpServlet { static List datas = new ArrayList (); //模拟数据 static { datas.add("ajax"); datas.add("ajax post"); datas.add("becky"); datas.add("bill"); datas.add("james"); datas.add("jerry"); datas.add("hao"); }

@Override
protected  void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    System.out.print("123");
    //获取客户端数据
    String keyword = request.getParameter("keyword");
    //获取关键字
    List<String> listData = getData(keyword);
    //返回json格式
    response.getWriter().write(JSONArray.fromObject(listData).toString());

}
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;
}

} ```

四、最终效果图

输入搜索信息下面会智能提示,点击提示信息会自动输入到搜索框中:

五、项目地址

geekerstar/AjaxSearch


版权声明:本文(除特殊标注外)为原创文章,版权归 Geekerstar 所有。

本文链接:http://www.geekerstar.com/project/620.html

除了有特殊标注文章外欢迎转载,但请务必标明出处,格式如上,谢谢合作。

本作品采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。

参考文献

  • 利用Nutch研究与实现支持Ajax动态网页的网络爬虫系统(内蒙古师范大学·李松)
  • 基于个性化搜索推荐的技术论坛的设计与实现(吉林大学·赵佳慧)
  • ERP系统Java EE Web框架设计与实现(东华大学·邹安军)
  • 基于J2EE的企业信息系统框架研究与应用(国防科学技术大学·陈志平)
  • 基于查询结果的推荐干预管理平台的设计与实现(北京交通大学·孙昊)
  • 基于需求语义描述的多平台统一框架的研究与实现(中国海洋大学·辛灿灿)
  • 基于Ajax的Web框架设计与实现(大连交通大学·王春林)
  • 基于J2EE的企业信息系统框架研究与应用(国防科学技术大学·陈志平)
  • 基于Ajax的RSS阅读系统的研究与实现(北京邮电大学·张洪涛)
  • 商品搜索关键字智能提示技术的研究与实现(北方工业大学·王若飞)
  • 商品搜索关键字智能提示技术的研究与实现(北方工业大学·王若飞)
  • 基于ASP.NET AJAX技术的智能答疑系统(江南大学·徐晓)
  • 基于查询结果的推荐干预管理平台的设计与实现(北京交通大学·孙昊)
  • ASP.NET AJAX在VB项目教学系统的应用研究(浙江工业大学·郑传书)
  • 基于轻量级J2EE的Ajax Web框架的设计与实现(电子科技大学·陈思淼)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕业设计工坊 ,原文地址:https://m.bishedaima.com/yuanma/35382.html

相关推荐

发表回复

登录后才能评论