Ajax+Servlet realizes intelligent search prompt

Design ideas

-> 从搜索框获得输入字符串
-> 利用 $.get(url, args, function(data){...},"json") 方法
-> 将请求地址 url 以及 参数 args 发送给 url 中包含的后台的 Servlet程序
-> Servlet 对 url 中的请求参数与 list 中数据比对
-> 把其中以传入值为开头的数据放入一个新的 List 中,取名 values
-> 使用 jackson 中的 ObjectMapper 对象将 values 转为 json 数组返回给前端页面
-> 返回的 json 数组即 data,分别将其中的每个值添加到 li 中即可

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
    input{
        top:300px;
        height:40px;
    }
    #txt_search{
        position:absolute;
        width:600px;
        left:350px;
    }
    #txt_search:hover{
        box-shadow: 3px 3px 3px #888888;
    }
    #btn_search{
        position:absolute;
        width:100px;
        right:250px;
        background: #3366FF;
        boder-radius:50px;
    }
    #btn_search:hover{
    background: #6666FF;

    }

    ul{
        position:absolute;
        width:600px;
        height:40px;
        left:310px;
        top:323px;      
        }
    li{
        list-style: none;
        font-size:20px;
        line-height:40px;
        border-bottom: 1px solid rgba(0,0,0,0.1);
        transition:1s;
    }
    li a{
        display:block;
        width:100%;
    }
    /* 注意不要写成 li:hover 这样是没效果的 */
    li :hover{
        background:#3366FF;
    }

</style>
<script type="text/javascript" src = "${pageContext.request.contextPath}/scipts/jquery-2.1.0.js"></script>
<script type="text/javascript">
    $(function(){

        $(":input[name = 'search' ]").keyup(function(){

                        /* 每次用户释放按键时,将上次的提示内容清空 */
            $("#list li").remove();

            var $val = $(this).val();
            var url = "${pageContext.request.contextPath}/searchservlet?content="+$val;
            var args = {"time":new Date()};
            $.get(url, args, function(data){

                /* 响应回来的为 json 对象数组 */
                for(var i = 0; i < data.length; i++)
                    $("#list").append("<li><a>"+data[i].content+"</a></li>");

            },"json");

        });

    })



</script>
</head>
<body>
    <input type = "search"  id = "txt_search" name = "search"  placeholder = "请输入搜索文字.."/>
    <input type = "button"  id = "btn_search" value = "百度一下"/>

    <div>
        <ul id ="list">
        </ul>
    </div>
</body>
</html>

SearchServlet.java

package com.anqi.ajax.app.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import com.anqi.ajax.app2.beans.SearchItem;
import com.fasterxml.jackson.databind.ObjectMapper;
@WebServlet("/searchservlet")
public class SearchServlet extends HttpServlet {

    private  List<SearchItem> list;
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            list = new ArrayList<>();
            list.add(new SearchItem("anqi"));
            list.add(new SearchItem("ajax"));
            list.add(new SearchItem("anHua"));
            list.add(new SearchItem("lichen"));
            list.add(new SearchItem("baizhantang"));

        String keyword = request.getParameter("content");

        List<SearchItem>values = new ArrayList<>();

        for (SearchItem searchItem : list) {
            if(searchItem.getContent().startsWith(keyword))
                values.add(searchItem);
        }

        //将 List 转化为了 json 数组
        ObjectMapper mapper = new ObjectMapper();
        String result = mapper.writeValueAsString(values);

        // result 为 -> [{"content":"anqi"},{"content":"ajax"},{"content":"anHua"}]
        // result 为 -> [{"content":"baizhantang"}]


        //设置响应类型为 json 格式
        response.setContentType("text/javascript");
        response.getWriter().print(result);


    }

}

display effect

write picture description here

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325670307&siteId=291194637