zoukankan      html  css  js  c++  java
  • 智能提示框---bai

    input.jsp
    
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <style>
    ul
    {
    	list-style: none
    }
    
    
    </style>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<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="styles.css">
    	-->
      </head>
      <script>
       var xmlHttpRequest = null;
      	//ajax的服务器验证
    	function send_ajax_request()
    	{
    		var word = document.getElementById("word").value; //获得控件的输入值
    		if(word.length==0) //如果搜索词为空,则不发送请求
    			return;
    			
    	   //a js中创建ajax请求对象
    	   xmlHttpRequest = new XMLHttpRequest();
    	   //b 通过open方法连接服务器
    
    	   var url = "HotWordServlet";
    	   xmlHttpRequest.open("post",url,true);
    	   xmlHttpRequest.
    	   setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
    	
    	   //c 通过onreadystatechange注册“回调函数”   
    	   xmlHttpRequest.onreadystatechange = doreceive;
    	   
    	   //d 通过send发送请求数据
    	   	     
    	   xmlHttpRequest.send("word="+word)//请求报文的body,即post的参数。   
    	}
    	
    	//ajax响应后自动回调的方法!
    	function doreceive()
    	{
    		if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200) 
      		{
      			//将div变为可见
      			document.getElementById("tip").style.display = "";
      			
      			//将div的内部html替换成服务器响应的内容
      			document.getElementById("tip").innerHTML = xmlHttpRequest.responseText; 
    	  	}
    	}
      
      	//将该id对应li进行高亮,其他的li变为正常
      	function highlight(id)
      	{
      	   //获取所有的li标签
      	   var lis = document.getElementsByTagName("li");
      	   for(var i=0;i<lis.length;i++)
      	   {
      	   		lis[i].style.backgroundColor = "white";
      	   }
      	   var li = document.getElementById(id);
      	   li.style.backgroundColor = "yellow";
      	}
      	//点击id对应的提示行
      	function doclick(id)
      	{	
      		//1 将该li的文字放到输入框中
      		var li = document.getElementById(id);
      		document.getElementById("word").value = li.innerText;
      		//2 隐藏提示框
      		document.getElementById("tip").style.display = "none";
      	}
      </script>
      <body>
        <input id="word" name="word" style="position: absolute; left: 200px;top: 200px; 200px;height: 20px;"   onkeyup="send_ajax_request()">
        <input type="button" style="position: absolute; left: 400px;top: 200px; 50px;height: 20px;" 
        value="搜索"/>
        <div id="tip" style="position: absolute; left: 200px;top: 220px; 200px;height: 100px;background-color:white;border-color: gray;border-style: solid;display: none">
            
        </div>
      </body>
    </html>
    

      

    HotWordServlet:
    
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeSet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class HotWordServlet extends HttpServlet {
    	
    	//模拟“热词表”,key为关键词,value为搜索次数
    	private Map<String,Integer> hotwords = new HashMap<String,Integer>();
    	
    	
    	
    	/**
    	 * Constructor of the object.
    	 */
    	public HotWordServlet() {
    		initHotWords();
    	}
    	//初始化热词
    	private void initHotWords()
    	{
    		hotwords.put("马尔代夫", 10000);
    		hotwords.put("马云", 9000);
    		hotwords.put("马云的老婆", 8000);
    		hotwords.put("马蓉", 12000);
    		hotwords.put("王宝强", 8000);
    		hotwords.put("王者荣耀", 7500);
    		hotwords.put("王欧", 7000);
    		hotwords.put("王思聪", 6000);
    		hotwords.put("王子文", 5000);
    	}
    	
    	//内部类,自定义比较器,实现对热词的字符串按照搜索次数进行倒序
    	class MyHotWordComparator implements Comparator<String>
    	{
    
    		public int compare(String o1, String o2) {
    			//只要热词1的搜索次数比热词2大,认为在set中是“大的”
    			if(hotwords.get(o1)>hotwords.get(o2))
    				return 1;
    			else
    				return -1;
    		}
    
    		
    	}
    	//从热词库中,查找以指定搜索词开头的热词。并按热度排序
    	private Set<String> findHotWords(String begin)
    	{
    		//"abcd".indexOf("b")  ==》1
    		//"abcd".indexOf("a")  ==》0
    		
    		Set<String> result = new TreeSet<String>(new MyHotWordComparator());		
    		//按遍历热词库
    		for(String key:hotwords.keySet())
    		{
    			if(key.indexOf(begin)==0) //子串的位置是0
    			{
    				result.add(key); //由于使用自定义比较器,所以"索引"是有序的
    			}
    		}
    		return result;
    	}
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    
    	/**
    	 * 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 {
    
    		doPost(request,response);
    	}
    
    	/**
    	 * The doPost method of the servlet. <br>
    	 *
    	 * This method is called when a form has its tag value method equals to post.
    	 * 
    	 * @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 doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		request.setCharacterEncoding("utf-8");
    		response.setContentType("text/html;charset=utf-8");
    		//1 读取请求参数的中“搜索词"
    		String word = request.getParameter("word");
    		//2 去热词库匹配,获得满足的所有热词set
    		Set<String> result = findHotWords(word);
    		//3 组成div中的子html并返回		
    		String html = "<ul>";
    		int i = 1;
    		for(String str:result)
    		{
    			//给li的id进行编号,并且制定鼠标移入和点击事件
    			html += "<li id='t"+i+"' onmouseover='highlight(this.id)' " +
    					"onclick = 'doclick(this.id)'>"+str+"</li>";
    			i++;
    		}
    		html+="</ul>";
    		PrintWriter out = response.getWriter();
    		out.print(html);		
    		out.flush();
    		out.close();
    	}
    
    	/**
    	 * Initialization of the servlet. <br>
    	 *
    	 * @throws ServletException if an error occurs
    	 */
    	public void init() throws ServletException {
    		// Put your code here
    	}
    
    }
    

      

  • 相关阅读:
    Android Studio遇到了“No USB devices or running emulators detected”
    (转)Android Studio启动AVD遇到的问题 ( HAXM安装失败)
    (转)秒懂,Java 注解 (Annotation)你可以这样学 ---- 重要 注解定义与反射解析
    DSL简介(转)
    有什么软件可以让手机使用卫星通信吗?
    Openfire调整成自己的IM部署到LInux系统上
    cpu和gpu的区别
    (转)OpenFire源码学习之二十七:Smack源码解析
    (转)OpenFire源码学习之十八:IOS离线推送
    (转)openfire插件开发(三)通过http方式向openfire客户端发信息
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6261897.html
Copyright © 2011-2022 走看看