注:本章内容都是在上一篇文章 通用分页后台显示:  的基础上进行改进,所以有许多的类都在上一篇,

带来不便请谅解!!!

通用分页的核心

.将上一次查询请求再发一次,只不过改变了页码。

本章重点:

1、改造上次PageBean里 的内容;

2、页面展示

3、创建控制层  servlet

4、自定义分页标签

5、助手类信息

1、补全后的PageBean:

package com.yuan.util;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;/**
* 分页工具类
**/
public classPageBean {private int page = 1;//页码
private int rows = 10;//页大小
private int total = 0;//总记录数
private boolean pagination = true;//是否分页
private Map paMap = new HashMap<>();privateString url;public voidsetRequest(HttpServletRequest req) {
Map parameterMap =req.getParameterMap();
StringBuffer url=req.getRequestURL();//保存上一次请求所携带的参数
this.setPaMap(req.getParameterMap());this.setUrl(req.getRequestURL().toString());//在jsp页面来控制是否分页//this.setPagination(req.getParameter("pagination"));//在jsp页面控制一页展示多少条信息//this.setRows(req.getParameter("rows"));
this.setPage(req.getParameter("page"));
}//setPage重载
private voidsetPage(String page) {this.page = StringUtils.isNotBlank(page) ? Integer.valueOf(page):this.page;
}//setPagination重载
public voidsetPagination(String pagination) {this.pagination = StringUtils.isNotBlank(pagination) ? !"false".equals(pagination):this.pagination;
}//setRows重载
public voidsetRows(String rows) {this.rows = StringUtils.isNotBlank(rows)?Integer.valueOf(rows):this.rows;
}public MapgetPaMap() {returnpaMap;
}public void setPaMap(MappaMap) {this.paMap =paMap;
}publicString getUrl() {returnurl;
}public voidsetUrl(String url) {this.url =url;
}publicPageBean() {
super();
}public intgetPage() {returnpage;
}public void setPage(intpage) {this.page =page;
}public intgetRows() {returnrows;
}public void setRows(introws) {this.rows =rows;
}public intgetTotal() {returntotal;
}public void setTotal(inttotal) {this.total =total;
}public voidsetTotal(String total) {this.total =Integer.parseInt(total);
}publicboolean isPagination() {returnpagination;
}public voidsetPagination(boolean pagination) {this.pagination =pagination;
}/**
* 获得起始记录的下标
*
* @return*/
public intgetStartIndex() {return (this.page - 1) * this.rows;
}
@OverridepublicString toString() {return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", pagination=" + pagination + "]";
}/**
* 获取最大页码数
* @return*/
public intgetMaxPage() {return this.total % this.rows == 0 ? this.total / this.rows : this.total / this.rows+1;
}/**
* 下一页
* @return*/
public intgetNexPage() {return this.page < this.getMaxPage() ? this.page+1 : this.page;
}/**
* 上一页
* @return*/
public intgetPreviousPage() {return this.page > 1 ? this.page-1 : this.page;
}
}

2、jsp页面展示,分页代码插入到了控制层的Servlet里面

Insert title here


小说目录

书名:


编号

名称

价格

${s.bid }

${s.bname }

${s.price}

3、创建控制层Servlet

packagecom.web;importjava.io.IOException;importjava.sql.SQLException;importjava.util.List;importjava.util.Map;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.yuan.dao.BookDao;importcom.yuan.entity.Book;importcom.yuan.util.PageBean;public class BookServlet extendsHttpServlet {/****/
private static final long serialVersionUID = 1L;private BookDao bookDao = newBookDao();
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {
doPost(req, resp);
}
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {
String bname= req.getParameter("bname");
Book book= newBook();
book.setBname(bname);//
PageBean bean = newPageBean();try{
bean.setRequest(req);
List list = this.bookDao.list(book,bean);
req.setAttribute("bookList", list);
req.setAttribute("pageBean", bean);
req.getRequestDispatcher("/BookList.jsp").forward(req, resp);
}catch (InstantiationException | IllegalAccessException |SQLException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
附:web.xml文件配置
Test_pagebean
bookServlet
com.web.BookServlet
bookServlet
/bookServlet.action

4、自定义分页标签

packagecom.tag;importjava.io.IOException;importjava.util.Map;importjava.util.Map.Entry;importjava.util.Set;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.JspWriter;importjavax.servlet.jsp.tagext.BodyTagSupport;importcom.yuan.util.PageBean;public class PageTag extendsBodyTagSupport {/****/
private static final long serialVersionUID = 1L;privatePageBean pageBean;publicPageBean getPageBean() {returnpageBean;
}public voidsetPageBean(PageBean pageBean) {this.pageBean =pageBean;
}
@Overridepublic int doStartTag() throwsJspException {
JspWriter out=pageContext.getOut();try{
out.print(toHTML());
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}return super.doStartTag();
}privateString toHTML() {
StringBuilder sb= newStringBuilder();//拼接下一次发送请求所要提交的隐藏的form表单
sb.append("
"); 
 
sb.append("");
Map paMap =pageBean.getPaMap();if(paMap != null && paMap.size()>0) {
Set> entrySet =paMap.entrySet();for (Entryentry : entrySet) {//上一次请求可能携带页码name=page的参数,但是改参数在前面已经单独赋值,//因为上一次请求是第一页的数据,下一次可能是第二页,一位这前后请求page对应的值是不一样的,需要单独赋值
if(!"page".equals(entry.getKey())) {for(String val:entry.getValue()) {
sb.append("");
}
}
}
}
sb.append("
");//拼接分页条 
 
sb.append("
 
 
sb.append("每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  
sb.append(" href='javascript:gotoPage(1)'>首页
sb.append(" href='javascript:gotoPage("+pageBean.getPreviousPage()+")'>上一页
sb.append(" href='javascript:gotoPage("+pageBean.getNexPage()+")'>下一页
sb.append(" href='javascript:gotoPage("+pageBean.getMaxPage()+")'>尾页
sb.append(" id='skipPage'");
sb.append(" style='text-align: center; font-size: 12px; width: 50px;'>  
sb.append(" href='javascript:skipPage()'>Go
 
  "); 
  
sb.append("
");//拼接分页所需要的js代码 
 
sb.append("
sb.append(" function gotoPage(page) {");
sb.append(" document.getElementById('pageBeanForm').page.value = page;");
sb.append(" document.getElementById('pageBeanForm').submit();");
sb.append(" }");
sb.append(" function skipPage() {");
sb.append(" var page = document.getElementById('skipPage').value;");
sb.append(" if(!page || isNaN(page) || parseInt(page)<1 || parseInt(page)>"+pageBean.getMaxPage()+"){");
sb.append(" alert('请输入1~N的数字');");
sb.append(" return;");
sb.append(" }");
sb.append(" gotoPage(page);");
sb.append(" }");
sb.append(" ");returnsb.toString();
}
}

.注意在append拼接时需要注意空格

将自定义标签的类配到tld文件中

/p>
PUBLIC"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
1.0
1.2
test
/zking
Page //标签库中的标签名
com.tag.PageTag//标签的助手类全路径名
JSP
pageBean//标签属性名 在配置的时候必须与助手类的属性一致
true//该属性是否必填
true//是否支持表达式(EL)

5、助手类信息

StringUtils :

packagecom.yuan.util;public classStringUtils {//私有的构造方法,保护此类不能在外部实例化
privateStringUtils() {
}/*** 如果字符串等于null或去空格后等于"",则返回true,否则返回false
*
*@params
*@return
*/
public static booleanisBlank(String s) {boolean b = false;if (null == s || s.trim().equals("")) {
b= true;
}returnb;
}/*** 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
*
*@params
*@return
*/
public static booleanisNotBlank(String s) {return !isBlank(s);
}
}
EncodingFiter :
packagecom.yuan.util;importjava.io.IOException;importjava.util.Iterator;importjava.util.Map;importjava.util.Set;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/*** 中文乱码处理
**/@WebFilter(urlPatterns=("/*"))public class EncodingFiter implementsFilter {private String encoding = "UTF-8";//默认字符集
publicEncodingFiter() {super();
}public voiddestroy() {
}public voiddoFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throwsIOException, ServletException {
HttpServletRequest req=(HttpServletRequest) request;
HttpServletResponse res=(HttpServletResponse) response;//中文处理必须放到 chain.doFilter(request, response)方法前面
res.setContentType("text/html;charset=" + this.encoding);if (req.getMethod().equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
}else{
Map map= req.getParameterMap();//保存所有参数名=参数值(数组)的Map集合
Set set = map.keySet();//取出所有参数名
Iterator it =set.iterator();while(it.hasNext()) {
String name=(String) it.next();
String[] values= (String[]) map.get(name);//取出参数值[注:参数值为一个数组]
for (int i = 0; i < values.length; i++) {
values[i]= new String(values[i].getBytes("ISO-8859-1"),this.encoding);
}
}
}
chain.doFilter(request, response);
}public void init(FilterConfig filterConfig) throwsServletException {
String s= filterConfig.getInitParameter("encoding");//读取web.xml文件中配置的字符集
if (null != s && !s.trim().equals("")) {this.encoding =s.trim();
}
}
}

jsp页面显示(首页):

Java 内存分页 java分页显示_jsp页面

下一页:

Java 内存分页 java分页显示_Java 内存分页_02

尾页:

Java 内存分页 java分页显示_Java 内存分页_03

上一页:

Java 内存分页 java分页显示_Java 内存分页_04

跳转:

Java 内存分页 java分页显示_java_05

如需要对另一个数据库表的信息进行分页,需修改dao层查询的语句,新建实体类;还有就是新建一个servlet和jsp页面。

完善上一篇后台显示对比的另一个实体类;

新建servlet和jsp页面。

jsp页面代码:

Insert title here


小说目录

书名:


编号

名称

${s.id }

${s.bookName }

控制层Servlet:

packagecom.web;importjava.io.IOException;importjava.sql.SQLException;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.yuan.dao.BlogDao;importcom.yuan.entity.Bookxyj;importcom.yuan.util.PageBean;
@WebServlet("/BlogServlet")public class BlogServlet extendsHttpServlet {/****/
private static final long serialVersionUID = 1L;private BlogDao blogDao = newBlogDao();
@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {
doPost(req, resp);
}
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {
Bookxyj xyj= newBookxyj();
xyj.setBookName(req.getParameter("bookName"));
PageBean pageBean= newPageBean();try{
pageBean.setRequest(req);
List list = this.blogDao.list(xyj, pageBean);
req.setAttribute("blogList", list);
req.setAttribute("pageBean", pageBean);
req.getRequestDispatcher("/blogList.jsp").forward(req, resp);
}catch (InstantiationException | IllegalAccessException |SQLException e) {
e.printStackTrace();
}super.doPost(req, resp);
}
}