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>
Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页的更多相关文章
- 使用Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页
步一:创建ArticleDao.java类 public class ArticleDao { public Integer getAllObjectNum(String keywords) thro ...
- jQuery EasyUI datagrid实现本地分页的方法
http://www.codeweblog.com/jquery-easyui-datagrid%e5%ae%9e%e7%8e%b0%e6%9c%ac%e5%9c%b0%e5%88%86%e9%a1% ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义分页
jQuery EasyUI 数据网格 - 自定义分页 数据网格(datagrid)内置一个很好特性的分页功能,自定义也相当简单.在本教程中,我们将创建一个数据网格(datagrid),并在分页工具栏上 ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 添加分页组件
jQuery EasyUI 数据网格 - 添加分页组件 本实例演示如何从服务器端加载数据,如何添加分页组件(pagination)到数据网格(datagrid). 创建数据网格(DataGrid) 为 ...
- 套用JQuery EasyUI列表显示数据、分页、查询
声明,本博客从csdn搬到cnblogs博客园了,以前的csdn不再更新,朋友们可以到这儿来找我的文章,更多的文章会发表,谢谢关注! 有时候闲的无聊,看到extjs那么肥大,真想把自己的项目改了,最近 ...
- ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询
一.说明: JQuery EasyUI下载地址:http://jquery-easyui.wikidot.com/download,最新版本1.2.2. 首先预览一下界面: 本例实现的功能: 1.多标 ...
- [js]jQuery EasyUI的linkbutton组件disable方法无法禁用jQuery绑定事件的问题分析
问题由来 linkbutton 是 jQuery EasyUI 中常用的一个控件,可以使用它创建按钮.用法很简单,使用 a 标签给一个easyui-linkbutton 的class就可以了. < ...
- 使用Jsp/Js/Ajax/Json/Jquery/Easyui + Servlet + JDBC + Lucene/Mysql/Oracle完成数据库分页
package loaderman.action; import java.io.IOException; import java.io.PrintWriter; import java.util.L ...
- jsp、jQuery、servlet交互实现登录功能
做一个web项目,往往需要有一个登录模块,验证用户名和密码之后跳转页面.为了实现更好的交互,往往需要用到 jQuery 等实现一些友好提示.比如用户名或者密码输入为空的时候提示不能为空:点击提交的时候 ...
随机推荐
- Ubuntu安装Python 3.6之编译安装+使用PPA源安装
下面分别详细介绍一下Ubuntu 14.04/16.04安装Python 3.6的两种方法: 方法一 自己编译安装: # 安装编译必需的软件包 sudo apt install build-essen ...
- Istio技术与实践04:最佳实践之教你写一个完整的Mixer Adapter
Istio内置的部分适配器以及相应功能举例如下: circonus:微服务监控分析平台. cloudwatch:针对AWS云资源监控的工具. fluentd:开源的日志采集工具. prometheus ...
- PAT Basic 1083 是否存在相等的差 (20 分)
给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...
- Mysql的mysqldump详解
一.导出 1.1 导出表结构及数据 mysqldump -uroot -p --set-gtid-purged=OFF database table1 table2 > mysqldump.sq ...
- 类的命名空间与卸载详解及jvisualvm使用
类的命名空间详解: 在上一次[https://www.cnblogs.com/webor2006/p/9108301.html]最后实验中有一个违背咱们理解的,这里回顾一下: 也就是说,"某 ...
- hdu3715 Go Deeper[二分+2-SAT]/poj2723 Get Luffy Out[二分+2-SAT]
这题转化一下题意就是给一堆形如$a_i + a_j \ne c\quad (a_i\in [0,1],c\in [0,2])$的限制,问从开头开始最多到哪条限制全是有解的. 那么,首先有可二分性,所以 ...
- [唐胡璐]Selenium技巧- IE浏览器Zoom和Protected Model Setting
Selenium Webdriver在IE下跑脚本的时候要保证页面大小为100%,且要在IE internet options, selectSecurity tab and uncheck “Ena ...
- list去重的四种方式
L=[1,2,3,3,5,5,5,8,4,6,9,7,2,'a','s','a','e','s','z'] def DelDupli(L): L1=[] for i in L: ...
- HDU 6049 - Sdjpx Is Happy | 2017 Multi-University Training Contest 2
思路来源于 FXXL - - 一个比较奇怪的地方就是第三步可以不做,也就是ans至少为1,听说场内有提问的,然后 admin 说可以不做- - (wa的我心烦) /* HDU 6049 - Sdjpx ...
- [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)
一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...