Google Suggest的实现

 客服端代码:

suggest.html

  1. <html>
  2.     <head>
  3.         <style type="text/css" media="screen">
  4.             body {
  5.                 font: 11px arial;
  6.             }
  7.             .suggest_link {
  8.                 background-color: #FFFFFF;
  9.                 padding: 2px 6px 2px 6px;
  10.             }
  11.             .suggest_link_over {
  12.                 background-color: #E8F2FE;
  13.                 padding: 2px 6px 2px 6px;
  14.             }
  15.             #search_suggest {
  16.                 position: absolute; 
  17.                 background-color: #FFFFFF; 
  18.                 text-align: left; 
  19.                 border: 1px solid #000000;          
  20.             }       
  21.         </style>
  22.         <script language="JavaScript" type="text/javascript" src="ajax_search.js"></script>
  23.     </head>
  24.     <body>
  25.         <h3>Hello ajax</h3>
  26.         <div style="width: 500px;">
  27.             <form id="frmSearch" action="">
  28.                 <input type="text" id="txtSearch" name="txtSearch" alt="Search Criteria" onkeyup="searchSuggest();" autocomplete="off" />
  29.                 <input type="submit" id="cmdSearch" name="cmdSearch" value="Search" alt="Run Search" /><br />
  30.                 <div id="search_suggest">
  31.                 </div>
  32.             </form>
  33.         </div>
  34.     </body>
  35. </html>

ajax_search.js

  1. //Gets the browser specific XmlHttpRequest Object
  2. function getXmlHttpRequestObject() {
  3.     if (window.XMLHttpRequest) {
  4.         return new XMLHttpRequest();
  5.     } else if(window.ActiveXObject) {
  6.         return new ActiveXObject("Microsoft.XMLHTTP");
  7.     } else {
  8.         alert("Your Browser Sucks!/nIt's about time to upgrade don't you think?");
  9.     }
  10. }
  11. function createAjaxObj(){
  12.   var httprequest=false
  13.   if (window.XMLHttpRequest)
  14.   { 
  15.     httprequest=new XMLHttpRequest()
  16.     if (httprequest.overrideMimeType)
  17.       httprequest.overrideMimeType('text/xml')
  18.    }
  19.    else if (window.ActiveXObject)
  20.    { 
  21.      try {
  22.        httprequest=new ActiveXObject("Msxml2.XMLHTTP");
  23.      }
  24.      catch (e){
  25.        try{
  26.           httprequest=new ActiveXObject("Microsoft.XMLHTTP");
  27.        }
  28.        catch (e){}
  29.      }
  30.    }
  31.    return httprequest
  32. }
  33. var searchReq = createAjaxObj();
  34. function searchSuggest() {
  35.     if (searchReq.readyState == 4 || searchReq.readyState == 0) {
  36.         var str = escape(document.getElementById('txtSearch').value);
  37.         searchReq.open("GET", 'search?search=' + str, true);
  38.         searchReq.onreadystatechange = handleSearchSuggest
  39.         searchReq.send(null);
  40.     }       
  41. }
  42. function handleSearchSuggest() {
  43.     if (searchReq.readyState == 4) {
  44.         var ss = document.getElementById('search_suggest')
  45.         ss.innerHTML = '';
  46.         var str = searchReq.responseText.split("/n");
  47.         for(i=0; i < str.length - 1; i++) {
  48.             //Build our element string.  This is cleaner using the DOM, but
  49.             //IE doesn't support dynamically added attributes.
  50.             var suggest = '<div οnmοuseοver="javascript:suggestOver(this);" ';
  51.             suggest += 'onmouseout="javascript:suggestOut(this);" ';
  52.             suggest += 'onclick="javascript:setSearch(this.innerHTML);" ';
  53.             suggest += 'class="suggest_link">' + str[i] + '</div>';
  54.             ss.innerHTML += suggest;
  55.         }
  56.     }
  57. }
  58. //Mouse over function
  59. function suggestOver(div_value) {
  60.     div_value.className = 'suggest_link_over';
  61. }
  62. //Mouse out function
  63. function suggestOut(div_value) {
  64.     div_value.className = 'suggest_link';
  65. }
  66. //Click function
  67. function setSearch(value) {
  68.     document.getElementById('txtSearch').value = value;
  69.     document.getElementById('search_suggest').innerHTML = '';
  70. }

服务端代码:

web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4" 
  3.     xmlns="http://java.sun.com/xml/ns/j2ee" 
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7.     
  8.     <filter>
  9.         <filter-name>response-filter</filter-name>
  10.         <filter-class>book.filter.SetResponseFilter</filter-class>
  11.     </filter>
  12.     <filter-mapping>
  13.         <filter-name>response-filter</filter-name>
  14.         <url-pattern>/*</url-pattern>
  15.     </filter-mapping>
  16.     
  17.     <servlet>
  18.     <servlet-name>search</servlet-name>
  19.     <servlet-class>book.suggest.SearchSuggest</servlet-class>
  20.    </servlet>
  21.    <servlet-mapping>
  22.      <servlet-name>search</servlet-name>
  23.      <url-pattern>/search</url-pattern>
  24.    </servlet-mapping>
  25. </web-app>

SearchSuggest.java

  1. package book.suggest;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.Vector;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. public class SearchSuggest extends HttpServlet {
  13.     private static final long serialVersionUID = 1L;
  14.     public void doGet(HttpServletRequest request, HttpServletResponse response)
  15.             throws ServletException, java.io.IOException {
  16.         
  17.         request.setCharacterEncoding("GBK");
  18.                 
  19.         String search = (String)request.getParameter("search");
  20.         
  21.         response.setContentType("text/html;charset=GBK");
  22.         //search = new String(search.getBytes("ISO8859_1"));//出现空指针完全是这个原因
  23.         
  24.         //((ServletResponse) request).setContentType("text/xml;charset=UTF-8");
  25.         //response.setContentType("text/html;charset=GBK");
  26.         response.setHeader("Cache-Control""no-cache");
  27.         //request.setCharacterEncoding("GBK");
  28.         //response.setCharacterEncoding("GBK");
  29.         
  30.         String sql = "select distinct(title) from suggest where title like '%%"+search+"%%' order by title";
  31.         //String sql = "select distinct(title) from suggest";
  32.         Connection conn = null;
  33.         Statement stmt = null;
  34.         ResultSet rs = null;
  35.         Vector<String> vData = new Vector<String>();
  36.         
  37.         java.io.PrintWriter out = response.getWriter();
  38.         try {
  39.             
  40.             Class.forName("com.mysql.jdbc.Driver");
  41.         
  42.             String url = "jdbc:mysql://localhost:3306/search";
  43.             
  44.             conn = DriverManager.getConnection(url, "root""root");
  45.             
  46.             stmt = conn.createStatement();
  47.             
  48.             rs = stmt.executeQuery(sql);
  49.             
  50.             while (rs.next())
  51.             {
  52.                 vData.add(rs.getString("TITLE"));
  53.             }
  54.             
  55.             StringBuffer buf = new StringBuffer();
  56.             for (int i=0;i<vData.size();i++)
  57.             {
  58.                 String keyword = (String)vData.get(i);
  59.                 buf.append(keyword+"/n");
  60.             }
  61.             out.println(buf.toString());
  62.         } catch (Exception e) {
  63.             e.printStackTrace();
  64.         } finally {
  65.             try {
  66.                 
  67.                 if (stmt != null)
  68.                     stmt.close();
  69.                 if (conn != null)
  70.                     conn.close();
  71.             } catch (SQLException sqle) {
  72.             }
  73.         }
  74.     }
  75.     public void doPost(HttpServletRequest request, HttpServletResponse response)
  76.             throws ServletException, java.io.IOException {
  77.         doPost(request, response);
  78.     }
  79. }

SetResponseFilter.java

  1. package book.filter;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. public class SetResponseFilter implements Filter {
  10.     public void init(FilterConfig arg0) throws ServletException {
  11.     }
  12.     public void doFilter(ServletRequest req, ServletResponse rep,
  13.             FilterChain chain) throws IOException, ServletException {
  14.         
  15.         chain.doFilter(req, rep);
  16.         rep.setContentType("text/html;charset=UTF-8");
  17.     }
  18.     public void destroy() {
  19.     }
  20. }

中文问题没得到解决…………

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值