AJax实现的搜索提示

 

AJax实现的搜索提

google进行搜索时,当在文本框中输入数据时,会马上在下面给出搜索提示:

下面是利用Ajax实现的类似功能:

开发工具: MyEclipse

务器技术: JSP

数据库: SQL Server 2005

开发步骤:

1.

/************************************************************************************************
: SuggestDB,搜索提示

作 者:
: 2008119
************************************************************************************************/
create database SuggestDB
go
use SuggestDB  
go

create table SUGGEST
(
suggest_id int primary key identity, --ID,
动编号

title nvarchar(255) default null         --title,
被搜索的
)
go


insert into suggest values('AJAX & JSP')
insert into suggest values('AJAX & ASP.NET')
insert into suggest values('AJAX & PHP')
insert into suggest values('AJAX & Struts 2')
insert into suggest values('Java & JSP')
insert into suggest values('Java & JSF')
insert into suggest values('Java & Struts 2')
insert into suggest values('Java & Struts 1')
insert into suggest values('SQLServer2005 & JSP')
insert into suggest values('SQLServer2005 & ASP.NET')
insert into suggest values('SQLServer2005 & PHP')
insert into suggest values('SQLServer2005 & Struts 2')

2. WebSuggestAjax,录结构如下:

http://hiphotos.baidu.com/j2ee_cn/abpic/item/92ad6ee76af22321b9382010.jpg

3. ConnectDB:

/******************************************************
*
: ConnectDB,

*
作者:
*
时间 2008120
*
主要方法:
* getConnection :
库连

* close :
关闭连
******************************************************/
package cn.sunfengwei.suggest.database;

import java.sql.*;

public class ConnectDB {

private static Connection con = null;

private static String url = "jdbc:sqlserver://localhost:1433;databaseName=suggestDB";

public static Connection getConnection() {
   try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    con = DriverManager.getConnection(url, "xxxx", "xxxx");
   } catch (ClassNotFoundException e) {

    e.printStackTrace();
   } catch (SQLException e) {

    e.printStackTrace();
   }
   return con;

} // end of getConnection

public static void close() {

   try {
    if (!con.isClosed())
     con.close();
   } catch (SQLException e) {

   }
} // end of close
} // end of ConnectDB

4. 访问对SearchDAO.java

/******************************************************
*
: SearchDAO 访问对

*
作者:
*
时间 2008120
*
主要方法:
* getSearch :
据搜索

* close     :
关闭连
******************************************************/
package cn.sunfengwei.suggest.model;
import java.util.*;
import java.sql.*;

import cn.sunfengwei.suggest.database.*;
public class SearchDAO {
private Connection con;
private PreparedStatement pstmt;
private ResultSet rs;
public SearchDAO()
{
con=ConnectDB.getConnection();
}
/*************************************************
* @author

* @param userName
要注的新用
* @return String ,
据中搜索到的相关数,使用/n分隔
*
前置件:
*************************************************/
public String getSearch(String search)
{
StringBuilder searches=new StringBuilder();
try {
   pstmt=con.prepareStatement("select * from suggest where title like ? order by title");
   pstmt.setString(1,search+"%" );
   rs=pstmt.executeQuery();
   while(rs.next())
   {
    searches.append(rs.getString("title")+"/n");
   }
   rs.close();
   pstmt.close();
} catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
return searches.toString();
}

public void close()
{
ConnectDB.close();
}
}

5. 建控制器SearchServlet.java

/******************************************************
*
:SearchServlet, 控制器,URL映射
search
*
作者:

*
时间 2008120
*
主要方法:
* doGet :
检查名是否存在

******************************************************/
package cn.sunfengwei.suggest.controller;

import java.io.IOException;
import java.io.PrintWriter;

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

import cn.sunfengwei.suggest.model.*;
public class SearchServlet extends HttpServlet {


/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
   String search=request.getParameter("search");
   response.setContentType("text/html");
   PrintWriter out = response.getWriter();
   SearchDAO searchDAO=new SearchDAO();
   out.print(searchDAO.getSearch(search));
   searchDAO.close();
   out.flush();
   out.close();
}
}

6. WEB目配置文件 web.xml

<?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>
   
<description>user</description>
    <display-name>user of ajax</display-name>
    <servlet-name>SearchServlet</servlet-name>
    <servlet-class>cn.sunfengwei.suggest.controller.SearchServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>SearchServlet</servlet-name>
    <url-pattern>/search</url-pattern>
</servlet-mapping>

</web-app>

7. 式表文件css.css

body{font:12px 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;
}

8. AJAX步提交程序suggest.js

//create XMLHttpRequest object
function getXmlHttpRequestObject()
{
   var xmlhttp=false;
   try{
   xmlhttp= new ActiveXObject('Msxml2.XMLHTTP');
}catch(e){
   try{
    xmlhttp= new ActiveXObject('Microsoft.XMLHTTP');
   }catch(e){
    try{
     xmlhttp= new XMLHttpRequest();
    }catch(e){}
   }
}
return xmlhttp;
}

var searchXmlRequest=getXmlHttpRequestObject();
function searchSuggest()
{

var str = escape(document.getElementById('txtSearch').value);
searchXmlRequest.open("get","search?search="+str,true);
searchXmlRequest.onreadystatechange=handleSearchSuggest;
searchXmlRequest.send(null);

} // end function searchSuggest


function handleSearchSuggest()
{
if(searchXmlRequest.readyState==4)
{
var divSearch=document.getElementById("search_suggest");
divSearch.innerHTML="";
var str=searchXmlRequest.responseText.split("/n");
for(i=0;i<str.length-1;i++)
{
   var suggest="<div οnmοuseοver='javascript:suggestOver(this);'";
   suggest+=" οnmοuseοut='javascript:suggestOut(this);'";
   suggest+=" οnclick='javascript:setSearch(this.innerHTML);'";
   suggest+=" class='suggest_link'>"+str[i]+"</div>";
   divSearch.innerHTML+=suggest;
} //end of for

}// end of if
} //end function handleSearchSuggest

function suggestOver(div_value)
{
div_value.className="suggest_link_over";
}

function suggestOut(div_value)
{
div_value.className="suggest_link";
}

function setSearch(value)
{
   document.getElementById("txtSearch").value=value;
   document.getElementById("search_suggest").innerHTML="";
}

9. 程序主index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
   <title>
搜索引擎</title>

   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
   <meta http-equiv="description" content="this is my page">
   <meta http-equiv="content-type" content="text/html; charset=UTF-8">
   <link rel="stylesheet" href="css/css.css" type="text/css"></link>
   <script type="text/javascript" src="js/suggest.js"></script>
</head>

<body>
    <h2>
基于AJAX的搜索提示
</h2>
     <hr>
     <div style="width:500px;">
     <form id="form1" action="">
     <input type="text" id="txtSearch" name="txtSearch" οnkeyup="searchSuggest();" autocomplete="off"/>
     <input type="submit" id="btnSubmit" name="btnSubmit" value='
搜索
'/>
     <div id="search_suggest"></div>
     </form>
     </div>
</body>
</html>


10.

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值