package loaderman.fy.action;import java.io.IOException;import java.io.PrintWriter;import java.util.LinkedHashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import loaderman.fy.entity.Page;import loaderman.fy.service.ArticleService;import net.sf.json.JSONArray;public class ArticleServlet extends HttpServlet { ???public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { ???????this.doPost(request,response); ???} ???public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { ???????try { ???????????request.setCharacterEncoding("UTF-8"); ???????????//获取关键字 ???????????String keywords = request.getParameter("keywords");//培训 ???????????if(keywords == null || keywords.trim().length()==0){ ???????????????keywords = "培训";//默认值 ???????????} ???????????//获取当前页号 ???????????String temp = request.getParameter("page");//核心 ???????????if(temp == null || temp.trim().length()==0){ ???????????????temp = "1";//默认值 ???????????} ???????????//调用业务层 ???????????ArticleService articleService = new ArticleService(); ???????????Page page = articleService.show(keywords,Integer.parseInt(temp)); ???????????//构造Map对象 ???????????Map<String,Object> map = new LinkedHashMap<String,Object>(); ???????????map.put("total",page.getAllRecordNO()); ???????????map.put("rows",page.getArticleList()); ???????????//第三方工具将Map转成JSON ???????????JSONArray jsonArray = JSONArray.fromObject(map); ???????????String jsonJAVA = jsonArray.toString(); ???????????//去掉二边的[]符号 ???????????jsonJAVA = jsonJAVA.substring(1,jsonJAVA.length()-1); ???????????//以IO的流方式响应到DataGrid组件 ???????????response.setContentType("text/html;charset=UTF-8"); ???????????PrintWriter pw = response.getWriter(); ???????????pw.write(jsonJAVA); ???????????pw.flush(); ???????????pw.close(); ???????} catch (Exception e) { ???????????e.printStackTrace(); ???????????throw new RuntimeException(e); ???????} ???}}
package loaderman.fy.dao;import java.util.ArrayList;import java.util.List;import loaderman.fy.entity.Article;import loaderman.util.LuceneUtil;import org.apache.lucene.document.Document;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;/** * 持久层 ?*/public class ArticleDao { ???/** ????* 根据关键字,获取总记录数 ????* @return 总记录数 ????*/ ???public int getAllRecord(String keywords) throws Exception{ ???????QueryParser queryParser = new QueryParser(LuceneUtil.getVersion(),"content",LuceneUtil.getAnalyzer()); ???????Query query = queryParser.parse(keywords); ???????IndexSearcher indexSearcher = new IndexSearcher(LuceneUtil.getDirectory()); ???????TopDocs topDocs = indexSearcher.search(query,2); ???????//返回符合条件的真实总记录数,不受2的影响 ???????return topDocs.totalHits; ???????//返回符合条件的总记录数,受2的影响 ???????//return topDocs.scoreDocs.length; ???} ???/** ????* 根据关键字,批量查询记录 ????* @param start 从第几条记录的索引号开始查询,索引号从0开始 ????* @param size ?最多查询几条记录,不满足最多数目时,以实际为准 ????* @return 集合 ????*/ ???public List<Article> findAll(String keywords,int start,int size) throws Exception{ ???????List<Article> articleList = new ArrayList<Article>(); ???????QueryParser queryParser = new QueryParser(LuceneUtil.getVersion(),"content",LuceneUtil.getAnalyzer()); ???????Query query = queryParser.parse(keywords); ???????IndexSearcher indexSearcher = new IndexSearcher(LuceneUtil.getDirectory()); ???????TopDocs topDocs = indexSearcher.search(query,100); ???????//小技巧 ???????int middle = Math.min(start+size,topDocs.totalHits); ???????for(int i=start;i<middle;i++){ ???????????ScoreDoc scoreDoc = topDocs.scoreDocs[i]; ???????????int no = scoreDoc.doc; ???????????Document document = indexSearcher.doc(no); ???????????Article article = (Article) LuceneUtil.document2javabean(document,Article.class); ???????????articleList.add(article); ???????} ???????return articleList; ???} ???public static void main(String[] args) throws Exception{ ???????ArticleDao dao = new ArticleDao(); ???????System.out.println(dao.getAllRecord("培训")); ???????System.out.println("------------------------------"); ???????System.out.println("第一页"); ???????List<Article> list = dao.findAll("培训",0,2); ???????for(Article a : list){ ???????????System.out.println(a); ???????} ???????System.out.println("第二页"); ???????list = dao.findAll("培训",2,2); ???????for(Article a : list){ ???????????System.out.println(a); ???????} ???????System.out.println("第三页"); ???????list = dao.findAll("培训",4,2); ???????for(Article a : list){ ???????????System.out.println(a); ???????} ???????System.out.println("第四页"); ???????list = dao.findAll("培训",6,2); ???????for(Article a : list){ ???????????System.out.println(a); ???????} ???}}
package loaderman.fy.entity;/** * 文章 */public class Article { ???private Integer id;//编号 ???private String title;//标题 ???private String content;//内容 ???public Article(){} ???public Article(Integer id, String title, String content) { ???????this.id = id; ???????this.title = title; ???????this.content = content; ???} ???public Integer getId() { ???????return id; ???} ???public void setId(Integer id) { ???????this.id = id; ???} ???public String getTitle() { ???????return title; ???} ???public void setTitle(String title) { ???????this.title = title; ???} ???public String getContent() { ???????return content; ???} ???public void setContent(String content) { ???????this.content = content; ???} ???@Override ???public String toString() { ???????return "编号:" + id+"\n标题:" + title + "\n内容:" + content; ???}}
package loaderman.fy.entity;import java.util.ArrayList;import java.util.List;/** * 用于Article的分页类 */public class Page { ???private Integer currPageNO;//当前页号OK ???private Integer perPageSize = 2;//每页显示记录数,默认为2条OK ???private Integer allRecordNO;//总记录数OK ???private Integer allPageNO;//总页数OK ???private List<Article> articleList = new ArrayList<Article>();//内容OK ???public Page(){} ???public Integer getCurrPageNO() { ???????return currPageNO; ???} ???public void setCurrPageNO(Integer currPageNO) { ???????this.currPageNO = currPageNO; ???} ???public Integer getPerPageSize() { ???????return perPageSize; ???} ???public void setPerPageSize(Integer perPageSize) { ???????this.perPageSize = perPageSize; ???} ???public Integer getAllRecordNO() { ???????return allRecordNO; ???} ???public void setAllRecordNO(Integer allRecordNO) { ???????this.allRecordNO = allRecordNO; ???} ???public Integer getAllPageNO() { ???????return allPageNO; ???} ???public void setAllPageNO(Integer allPageNO) { ???????this.allPageNO = allPageNO; ???} ???public List<Article> getArticleList() { ???????return articleList; ???} ???public void setArticleList(List<Article> articleList) { ???????this.articleList = articleList; ???}}
package loaderman.fy.service;import loaderman.fy.dao.ArticleDao;import loaderman.fy.entity.Article;import loaderman.fy.entity.Page;import java.util.List;/** * 业务层 */public class ArticleService { ???//持久层 ???private ArticleDao articleDao = new ArticleDao(); ???/** ????* 根据关键字和页号,查询内容 ????*/ ???public Page show(String keywords,int currPageNO) throws Exception{ ???????Page page = new Page(); ???????//封装当前页号 ???????page.setCurrPageNO(currPageNO); ???????//封装总记录数 ???????int allRecordNO = articleDao.getAllRecord(keywords); ???????page.setAllRecordNO(allRecordNO); ???????//封装总页数 ???????int allPageNO = 0; ???????if(page.getAllRecordNO() % page.getPerPageSize() == 0){ ???????????allPageNO = page.getAllRecordNO() / page.getPerPageSize(); ???????}else{ ???????????allPageNO = page.getAllRecordNO() / page.getPerPageSize() + 1; ???????} ???????page.setAllPageNO(allPageNO); ???????//封装内容 ???????int size = page.getPerPageSize(); ???????int start = (page.getCurrPageNO()-1) * size; ???????List<Article> articleList = articleDao.findAll(keywords,start,size); ???????page.setArticleList(articleList); ???????return page; ???} ???//测试 ???public static void main(String[] args) throws Exception{ ???????ArticleService test = new ArticleService(); ???????Page page = test.show("培训",4); ???????System.out.println(page.getCurrPageNO()); ???????System.out.println(page.getPerPageSize()); ???????System.out.println(page.getAllRecordNO()); ???????System.out.println(page.getAllPageNO()); ???????for(Article a : page.getArticleList()){ ???????????System.out.println(a); ???????} ???}}
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> ?<head> ???<title>使用Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页</title> ???<!-- 引入css文件,无顺序 --> ???<link rel="stylesheet" href="themes/icon.css" type="text/css"></link> ???<link rel="stylesheet" href="themes/default/easyui.css" type="text/css"></link> ?????<!-- 引入js文件,有顺序 --> ???<script type="text/javascript" src="js/jquery.min.js"></script> ???<script type="text/javascript" src="js/jquery.easyui.min.js"></script> ???<script type="text/javascript" src="js/easyui-lang-zh_CN.js"></script> ?</head> ?<body> ???<!-- 输入区 --> ???<form id="myformID"> ???????输入关键字:<input type="text" value="" id="keywordID"/> ???????<input type="button" value="站内搜索" id="findID"/> ???</form> ???<script type="text/javascript"> ???????//定位"站内搜索"按钮 ???????$("#findID").click(function(){ ???????????//获取关键字 ???????????var keyword = $("#keywordID").val(); ???????????//去空格 ???????????keyword = $.trim(keyword); ???????????//判断 ???????????if(keyword.length == 0){ ???????????????//提示 ???????????????alert("请输入关键字!!!"); ???????????????//清空文本框的内容 ???????????????$("#keywordID").val(""); ???????????????//定位于输入关键字文本框 ???????????????$("#keywordID").focus(); ???????????}else{ ???????????????//异步发送请求到服务器 ???????????????//load表示方法名 ???????????????//"keywords"表示需要发送的的参数名,后台收:request.getParameter("keywords") ???????????????//keyword表示参数值 ???????????????$("#dg").datagrid("load",{ ???????????????????????"keywords" : keyword ???????????????}); ?????????????} ???????}); ???</script> ???????????<!-- 显示区 --> ???<table id="dg"></table> ???<script type="text/javascript"> ???????$("#dg").datagrid({ ???????????url : "${pageContext.request.contextPath}/ArticleServlet?time="+new Date().getTime(), ???????????columns : ?[[ ???????????????????????????????????{field:‘id‘,title:‘编号‘,width:100}, ???????????????????????????????????{field:‘title‘,title:‘标题‘,width:100}, ???????????????????????????????????{field:‘content‘,title:‘内容‘,width:100} ???????????????????????]], ???????????fitColumns : true, ???????????singleSelect : true, ???????????pagination : true, ???????????pageSize : 2, ???????????pageList : [2] ???????????????????}); ???</script> ?????</body></html>
Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页
原文地址:https://www.cnblogs.com/loaderman/p/10059983.html