您的位置:首页 > 其它

Ajax+Servlet 实现智能搜索提示

2018-02-20 00:48 309 查看

设计思路

-> 从搜索框获得输入字符串
-> 利用 $.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(){

/* 每次用户释放按键时,将上次的提示内容清空 */
$(
4000
"#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);

}

}


显示效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: