Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分頁
阿新 • • 發佈:2018-12-03
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>