Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页

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>

原文地址:https://www.cnblogs.com/loaderman/p/10059983.html

时间: 2024-07-28 23:38:19

Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页的相关文章

jQuery EasyUI datagrid实现本地分页的方法

本文实例讲述了jQuery EasyUI datagrid实现本地分页的方法.分享给大家供大家参考.具体如下: 一般分页都是后台做,前端做无论从哪方面考虑都不合适.但是有的时候还是有这种需求. 这里重点用到了pagination的监听,以及JS数组的slice方法来完成.代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 3

ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询

一.说明: JQuery EasyUI下载地址:http://jquery-easyui.wikidot.com/download,最新版本1.2.2. 首先预览一下界面: 本例实现的功能: 1.多标签 2.分页列表显示数据 3.获取选中行的标识值,删除选中行 实现以上功能主要使用了: 1.layout:布局 2.tabs:多标签 3.datagrid:表格显示数据,并可以分页 4.messager:消息框 5.window:窗口 要了解用法,下载之后,参阅demo文件夹下的demo和官方文档.

套用JQuery EasyUI列表显示数据、分页、查询

声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近看到一款轻型的UI感觉不错,但是在网上找了好多教程,但是没有一个是完全是C#asp.net写的 无耐下,自己写了下,感觉效果不错,故拿出来和大学分享一下,希望可以抛砖引玉作用. 由于好多人都只是拷贝代码,故在此全用图片作说明. 图片效果图1 这个界面是上左右下结构 左边是一棵树 右边是一个表格 上部

ASP.NET网站权限设计实现——套用JQuery EasyUI列表显示数据、分页、查询

有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近看到一款轻型的UI感觉不错,但是在网上找了好多教程,但是没有一个是完全是C#asp.net写的 无耐下,自己写了下,感觉效果不错,故拿出来和大学分享一下,希望可以抛砖引玉作用. 由于好多人都只是拷贝代码,故在此全用图片作说明. 图片效果图1 这个界面是上左右下结构 左边是一棵树 右边是一个表格 上部是标题 最下部只是一个空的保留一部分空间 下面开始说下整体结构HTML代码如下 至于HTML代码不想在做多余的解说 下面开始左边的树,

基于JQuery easyui,gson的批量新增/修改和删除-servlet版

最近项目需要用到在页面进行批量操作,做了一些这方面的学习,参照网上的资料写了个小例子,记录一下: 准备 引入gson-2.6.2.jar,这里使用gson而不使用json-lib,原因是json-lib很老了,依赖的jar在后续与struts2整合时,会出现不兼容的警告.而gson很清爽. 引入jQuery EasyUI 1.4.4 文件结构: package com.tjd.study.easyui.entity; public class Bean { private String code

Jquery EasyUI的添加,修改,删除,查询等基本操作介绍

http://www.jb51.net/article/42016.htm 初识Jquery EasyUI看了一些博主用其开发出来的项目,页面很炫,感觉功能挺强大,效果也挺不错,最近一直想系统学习一套前台控件,于是在网上找了一些参考示例.写了一些基本的增删改查功能,算是对该控件的基本入门.后续有时间继续深入学习. 在学习jquery easyui前应该先到官网下载最新版本http://www.jeasyui.com/download/index.php 先看一下运行后的页面 1.列表展示 2.新

基于struts环境下的jquery easyui环境搭建

下载地址: http://download.csdn.net/detail/cyberzhaohy/7348451 加入了json包:jackson-all-1.8.5.jar,项目结构例如以下: 測试网址: http://localhost:9090/jquery-easyui-1.2.6BasedonStruts/layout.jsp 效果图例如以下: 配置文件web.xml: <?xml version="1.0" encoding="UTF-8"?&g

jquery.easyui代码详解,和遇到的问题,提供大家在使用的时候少走弯路(一)

初次使用jquery.easyui这个东东,虽然简单,但还是很费力的去研究了一下使用,在使用过程中遇到的问题,下面代码会详细的注释到 引用的文件jquery.min.js              jquery.easyui.min.js 样式:icon.css         easyui.css 页面初始化easy ui 插件 <html xmlns="http://www.w3.org/1999/xhtml"> <div class="cg-op&qu

Jquery easyui treegrid实现树形表格的行拖拽

前几天修改了系统的一个功能——实现树形列列表的行拖拽,以达到排序的目的.现在基本上功能实现,现做一个简单的总结. 1.拿到这个直接网上搜,有好多,但是看了后都觉得不是太复杂就是些不是特别想看的例子,自己太懒(对自己不是很熟悉的东西是不愿意第一去看的).结果选择良久,还是jquery easyui treegrid这个例子自己看起来比较熟悉.于是就专心研究了,从官方网站http://www.jeasyui.net/下载了demo,开始研读.先把jsp页面一些代码贴出 <link rel="s