`
zjutsoft
  • 浏览: 460242 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

搜索提示 Suggest

    博客分类:
  • Ajax
阅读更多
    仿照 Goolge Suggest,主要用到的技术是ajax。定时的发送请求道数据库比对。
    
     基本原理分析,当用户输入关键字,便向服务器发送请求,服务器根据用户输入的关键字,在数据库中搜索相关的关键字信息,并返回给客户端。
    
     代码分析:java 根据输入关键字返回相应结果
   
 package book.suggest;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SearchSuggest extends HttpServlet {
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, java.io.IOException {

		String search = request.getParameter("search");//获得请求中cate的值
		System.out.println("哈哈  现在进的去了");
		//定义查询数据库的SQL语句
		String sql = "select title from suggest where title like '"+search+"%' order by title";

		Connection conn = null;//声明Connection对象
		Statement stmt = null;//声明Statement对象
		ResultSet rs = null;//声明ResultSet对象
		Vector vData = new Vector();
		//response.setContentType("text/xml");//设置返回数据类型为xml格式
		java.io.PrintWriter out = response.getWriter();

		try {
			// 加载数据库驱动类
			Class.forName("com.mysql.jdbc.Driver");
			// 访问数据库的地址
			String url = "jdbc:mysql://localhost/treeview";
			//创建Connection对象
			conn = DriverManager.getConnection(url, "root", "12345678");
			// 创建Statement对象
			stmt = conn.createStatement();
			// 执行SQL语句,返回记录集
			rs = stmt.executeQuery(sql);
			//定义AblumEO实体对象
			while (rs.next())
			{
				vData.add(rs.getString("TITLE"));
			}
			StringBuffer buf = new StringBuffer();
			for (int i=0;i<vData.size();i++)
			{
				String keyword = (String)vData.get(i);
				buf.append(keyword+"\n");
			}
			out.print(buf.toString());
			System.out.println(buf.toString());
//			out.print(parasToXML(vData));//调用parasToXML()方法
		} catch (Exception e) {

			e.printStackTrace();

		} finally {//最后关必记录集,Connection对象
			try {
				// this will close any associated ResultSets
				if (stmt != null)
					stmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException sqle) {
			}
		}
	
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, java.io.IOException {

		doPost(request, response);
	}
/*
	public String parasToXML(Vector v) {// 该方法将数据转化成XML格式输出
		StringBuffer buf = new StringBuffer();
		buf.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
		buf.append("<pictures>");
		for (int i = 0; i < v.size(); i++) {
			AlbumEO album = (AlbumEO) v.get(i);
			buf.append("<item>");
			buf.append("<name>" + album.getAlbumName() + "</name>");
			buf.append("<url>" + album.getAlbumURL() + "</url>");
			buf.append("<description>" + album.getAlbumDescription()
					+ "</description>");
			buf.append("</item>");
		}
		buf.append("</pictures>");
		return buf.toString();
	}
*/
}

       
    ajax发送请求和处理返回信息

//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
	}
}
function createAjaxObj(){
  var httprequest=false
  if (window.XMLHttpRequest)
  { // if Mozilla, Safari etc
    httprequest=new XMLHttpRequest()
    if (httprequest.overrideMimeType)
      httprequest.overrideMimeType('text/xml')
   }
   else if (window.ActiveXObject)
   { // if IE
     try {
       httprequest=new ActiveXObject("Msxml2.XMLHTTP");
     }
     catch (e){
       try{
          httprequest=new ActiveXObject("Microsoft.XMLHTTP");
       }
       catch (e){}
     }
   }
   return httprequest
}
//Our XmlHttpRequest object to get the auto suggest
var searchReq = createAjaxObj();

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest() {
	if (searchReq.readyState == 4 || searchReq.readyState == 0) {
		var str = escape(document.getElementById('txtSearch').value);
		searchReq.open("GET", 'search?search=' + str, true);
		searchReq.onreadystatechange = handleSearchSuggest; 
		searchReq.send(null);
	}		
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById('search_suggest')
		ss.innerHTML = '';
		var str = searchReq.responseText.split("\n");
		for(i=0; i < str.length - 1; i++) {
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
			var suggest = '<div onmouseover="javascript:suggestOver(this);" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
			suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
			suggest += 'class="suggest_link">' + str[i] + '</div>';
			ss.innerHTML += suggest;
		}
	}
}

//Mouse over function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(value) {
	document.getElementById('txtSearch').value = value;
	document.getElementById('search_suggest').innerHTML = '';
}
    

当输入框出发Onkeyup事件就发送请求
              <html>
	<head>
		<style type="text/css" media="screen">
			body {
				font: 11px arial;
			}
			.suggest_link {
				background-color: #FFFFFF;
				padding: 2px 6px 2px 6px;
			}
			.suggest_link_over {
				background-color: #E8F2FE;
				padding: 2px 6px 2px 6px;
			}
			#search_suggest {
				position: absolute; 
				background-color: #FFFFFF; 
				text-align: left; 
				border: 1px solid #000000;			
			}		
		</style>
		<script language="JavaScript" type="text/javascript" src="ajax_search.js"></script>
	</head>
	<body>
		<h3>Simple AJAX Search Suggest</h3>
		<div style="width: 500px;">
			<form id="frmSearch" action="">
				<input type="text" id="txtSearch" name="txtSearch" alt="Search Criteria" onkeyup="searchSuggest();" autocomplete="off" />
				<input type="submit" id="cmdSearch" name="cmdSearch" value="Search" alt="Run Search" /><br />
				<div id="search_suggest">
				</div>
			</form>
		</div>
	</body>
</html>

       xml配置文件:配置请求url
       <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
    <servlet-name>search</servlet-name>
    <servlet-class>book.suggest.SearchSuggest</servlet-class>
   </servlet>

   <servlet-mapping>
     <servlet-name>search</servlet-name>
     <url-pattern>/search</url-pattern>
   </servlet-mapping>
</web-app>

  
分享到:
评论
1 楼 桃花源记 2013-08-02  
你这服务器结果没有处理啊,不能用的!

相关推荐

    AJAX实现仿Google Suggest搜索提示效果

    在本文中,我们将深入探讨如何使用AJAX技术来实现一个仿Google Suggest的搜索提示功能。Google Suggest是Google搜索引擎中的一个特色功能,它在用户输入关键词时提供实时的搜索建议,极大地提高了搜索效率和用户体验...

    Suggest自动提示功能

    在IT领域,"Suggest自动提示功能"是一种常见的交互设计技术,主要应用于各种输入框,如搜索引擎、文本编辑器或在线表单等。这个功能旨在提高用户体验,通过预测和建议用户可能想要输入的内容来加快输入速度,从而...

    PHP搜索提示search-suggest.zip

    search-suggest 可快速创建你的搜索提示功能 /搜索自动补全功能。功能说明把句子分词后缓存转换成拼音缓存把句子分词后缓存当你输入英文 或者中文的时候,可以从缓存里获取匹配值返回使用 标签:search

    淘宝、有啊、Google下拉搜索提示Suggest插件实例

    内容索引:脚本资源,Ajax/JavaScript,输入提示 一款Suggest搜索提示插件,暗藏有淘宝首页、有啊首页、Google搜索首页、来点广告搜索的众多下拉提示,实际上演示效果与其真实网站上的相关无几,使用了Yahoo网站的一个...

    搜索提示仿google suggest提示效果

    AJAX实现类Google Suggest效果 *测试平台:Firefox2.0,IE6.0,IE7.0 *演示地址:http://www.okajax.com/demo/suggest/ *:文件结构: index.htm:首页,展现效果 ajax_result.asp:ajax调用后台返回结果文件 result.asp:...

    简易Google Suggest搜索提示

    【简易Google Suggest搜索提示】是一种基于JavaScript实现的搜索引擎优化技术,它允许用户在输入查询时获取实时的搜索建议。这种技术提高了用户体验,因为它减少了用户输入完整查询词的时间,同时也帮助用户更快地...

    类似google suggest 的搜索提示框

    标题中的“类似Google Suggest的搜索提示框”指的是在用户输入搜索关键词时,搜索引擎自动提供相关的建议词或短语,这种功能在许多网站上被广泛采用,以提高用户体验和搜索效率。Google Suggest是谷歌在其搜索框中...

    文本框Input文字自动完成Suggest提示插件.rar

    文本框Input文字自动完成Suggest提示插件,一款Suggest搜索提示插件,暗藏有淘宝首页、有啊首页、Google搜索首页、来点广告搜索的众多下拉提示,实际上演示效果与其真实网站上的相关无几,使用了Yahoo网站的一个搜索...

    Kissy Suggest 自动提示例子

    《Kissy Suggest 自动提示实现详解》 在IT领域,自动提示功能是提升用户体验、提高工作效率的重要手段,尤其在编程、搜索等场景下。Kissy Suggest 是一个基于 JavaScript 的开源库,专为实现自动提示功能而设计。...

    suggest 仿google提示

    从标签“suggest google提示”我们可以推断,这个项目的核心是实现一个与Google相似的搜索提示系统,可能包括以下关键组件: 1. **前端部分**:这可能涉及到HTML、CSS和JavaScript的使用。其中,`suggest.htm`可能...

    kissy源文件代码

    淘宝发布开源编辑器:...KISSY 目前基于 YUI 2.x 开发,目标是打造一系列小巧灵活、简洁实用、使用起来让人感觉愉悦的 UI 组件,目前已有 CSS 基础框架、搜索提示 Suggest 和 KISSY Editor 这个富文本编辑器等组件。

    Lucene5学习之Suggest关键字提示

    总之,Lucene5的Suggest技术为开发者提供了强大的关键词提示功能,通过理解其工作原理和应用场景,我们可以将其巧妙地融入到各种信息检索系统中,提升用户的搜索体验。通过持续学习和实践,我们可以更好地驾驭这一...

    仿Google Suggest提示效果

    【标题】"仿Google Suggest提示效果"是一个关于在网页中实现类似Google搜索框自动提示功能的技术分享。这种功能在现代网页应用中非常常见,它能够提升用户体验,帮助用户更快地找到他们想要输入的关键词。 【描述】...

    JavaScript Suggest自动补全的输入框下拉提示类

    JavaScript Suggest自动补全的输入框下拉提示类是一种常见的前端开发技术,广泛应用于各种Web应用,如搜索引擎、表单输入、代码编辑器等。它为用户提供了一个方便、高效的交互体验,通过预测用户可能要输入的内容,...

    Google搜索提示功能

    在压缩包文件"简易Google Suggest搜索提示"中,可能包含了实现这一功能的源代码和示例数据。通过学习和理解这些代码,开发者可以为自己的网站或应用构建类似的搜索提示功能,提升用户的搜索体验。这涉及到前端的Ajax...

    js实现仿Google Suggest搜索提示效果

    好东西能用,我经常用!大家共享!

    ajax自动完成 搜索提示(类似google) suggest

    该脚本功能很强大,类似google的自动完成。 使用了cache 功能,当敲入的字符数可以在cache中查到时,将不会向服务器发送请求。减轻服务器压力 使用空格匹配,一个空格字符相当于1个或多个字符(串),可以自己写简单...

    suggest 自动提示

    标题中的“suggest 自动提示”通常指的是在用户输入时提供自动补全或建议的功能,常见于搜索框、编程IDE或各种在线输入场景。这个功能提高了用户体验,减少了输入错误,并且帮助用户快速找到他们想要的内容。 在...

    ajax搜索提示js搜索提示

    在给出的例子中,创建了一个名为 `suggest` 的 MySQL 表,包含 `id`(主键)、`title`(搜索提示内容)和 `hits`(点击次数)字段。这些数据将用于生成搜索提示列表,其中 `hits` 字段用于排序,显示最热门的建议。 ...

Global site tag (gtag.js) - Google Analytics