package com.ajax;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class Pager extends TagSupport{
private String url; //请求URI
private int pageSize = 10; //每页要显示的记录数
private int pageNo = 1; //当前页号
private int recordCount; //总记录数
@SuppressWarnings("unchecked")
public int doStartTag() throws JspException {
int pageCount = (recordCount + pageSize - 1) / pageSize; //计算总页数
//拼写要输出到页面的HTML文本
StringBuilder sb = new StringBuilder();
sb.append("<style type=\"text/css\">");
sb.append(".pagination {padding: 5px;float:right;font-size:12px;}");
sb.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;border:1px solid #aaaadd;text-decoration:none;color:#006699;}");
sb.append(".pagination a:hover, .pagination a:active {border: 1px solid #ff0000;color: #000;text-decoration: none;}");
sb.append(".pagination span.current {padding: 2px 5px;margin: 2px;border: 1px solid #ff0000;font-weight: bold;background-color: #ff0000;color: #FFF;}");
sb.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}");
sb.append("</style>\r\n");
sb.append("<div class=\"pagination\">\r\n");
if(recordCount == 0){
sb.append("<strong>没有可显示的项目</strong>\r\n");
}else{
//页号越界处理
if(pageNo > pageCount){ pageNo = pageCount; }
if(pageNo < 1){ pageNo = 1; }
sb.append("<form method=\"post\" action=\"").append(this.url)
.append("\" name=\"qPagerForm\">\r\n");
//获取请求中的所有参数
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
Enumeration<String> enumeration = request.getParameterNames();
String name = null; //参数名
String value = null; //参数值
//把请求中的所有参数当作隐藏表单域
while (enumeration.hasMoreElements()) {
name = enumeration.nextElement();
value = request.getParameter(name);
// 去除页号
if (name.equals("pageNo")) {
if (null != value && !"".equals(value)) {
pageNo = Integer.parseInt(value);
}
continue;
}
sb.append("<input type=\"hidden\" name=\"")
.append(name)
.append("\" value=\"")
.append(value)
.append("\"/>\r\n");
}
// 把当前页号设置成请求参数
sb.append("<input type=\"hidden\" name=\"").append("pageNo")
.append("\" value=\"").append(pageNo).append("\"/>\r\n");
// 输出统计数据
sb.append(" 共<strong>").append(recordCount)
.append("</strong>项")
.append(",<strong>")
.append(pageCount)
.append("</strong>页: \r\n");
//上一页处理
if (pageNo == 1) {
sb.append("<span class=\"disabled\">« 上一页")
.append("</span>\r\n");
} else {
sb.append("<a href=\"javascript:turnOverPage(")
.append((pageNo - 1))
.append(")\">« 上一页</a>\r\n");
}
//如果前面页数过多,显示"..."
int start = 1;
if(this.pageNo > 4){
start = this.pageNo - 1;
sb.append("<a href=\"javascript:turnOverPage(1)\">1</a>\r\n");
sb.append("<a href=\"javascript:turnOverPage(2)\">2</a>\r\n");
sb.append("…\r\n");
}
//显示当前页附近的页
int end = this.pageNo + 1;
if(end > pageCount){
end = pageCount;
}
for(int i = start; i <= end; i++){
if(pageNo == i){ //当前页号不需要超链接
sb.append("<span class=\"current\">")
.append(i)
.append("</span>\r\n");
}else{
sb.append("<a href=\"javascript:turnOverPage(")
.append(i)
.append(")\">")
.append(i)
.append("</a>\r\n");
}
}
//如果后面页数过多,显示"..."
if(end < pageCount - 2){
sb.append("…\r\n");
}
if(end < pageCount - 1){
sb.append("<a href=\"javascript:turnOverPage(")
.append(pageCount - 1)
.append(")\">")
.append(pageCount - 1)
.append("</a>\r\n");
}
if(end < pageCount){
sb.append("<a href=\"javascript:turnOverPage(")
.append(pageCount)
.append(")\">")
.append(pageCount)
.append("</a>\r\n");
}
//下一页处理
if (pageNo == pageCount) {
sb.append("<span class=\"disabled\">下一页 »")
.append("</span>\r\n");
} else {
sb.append("<a href=\"javascript:turnOverPage(")
.append((pageNo + 1))
.append(")\">下一页 »</a>\r\n");
}
sb.append("</form>\r\n");
// 生成提交表单的JS
sb.append("<script language=\"javascript\">\r\n");
sb.append(" function turnOverPage(no){\r\n");
sb.append(" if(no>").append(pageCount).append("){");
sb.append(" no=").append(pageCount).append(";}\r\n");
sb.append(" if(no<1){no=1;}\r\n");
sb.append(" document.qPagerForm.pageNo.value=no;\r\n");
sb.append(" document.qPagerForm.submit();\r\n");
sb.append(" }\r\n");
sb.append("</script>\r\n");
}
sb.append("</div>\r\n");
//把生成的HTML输出到响应中
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
throw new JspException(e);
}
return SKIP_BODY; //本标签主体为空,所以直接跳过主体
}
public void setUrl(String url) {
this.url = url;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
}
package com.ajax;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class Personbean {
private Connection ct=null;
private PreparedStatement ps=null;
private ResultSet rs=null;
public List all(int pageNo,int pageSize){
List list=new ArrayList();
try{
ct=Conn.getinstance();
ps=ct.prepareStatement("select top "+pageSize+"* from Person where pid not in (select top "+pageSize*(pageNo-1)+" pid from Person ) ");
rs=ps.executeQuery();
Person p=null;
while(rs.next()){
p=new Person();
p.setPid(rs.getInt(1));
p.setMname(rs.getString(2));
list.add(p);
}
}catch(Exception e){
e.printStackTrace();
}finally{
DBclose.close(ct, ps, rs);
}
return list;
}
public int Count() {
int rowCount=0;
int pageSize=10;
int pageCount=0;
try{
ct=Conn.getinstance();
ps=ct.prepareStatement("select count(*) from Person ");
rs=ps.executeQuery();
if(rs.next()){
rowCount=rs.getInt(1);
}
if(rowCount%pageSize==0){
pageCount=rowCount/pageSize;
}else{
pageCount=rowCount/pageSize+1;
}
}catch(Exception e){
e.printStackTrace();
}finally{
DBclose.close(ct, ps, rs);
}
return pageCount;
}
public int reCount(){
int recordCount=0;
try{
ct=Conn.getinstance();
ps=ct.prepareStatement("select count(*) from Person");
rs=ps.executeQuery();
if(rs.next()){
recordCount=rs.getInt(1);
}
}catch(Exception e){
e.printStackTrace();
}finally{
DBclose.close(ct, ps, rs);
}
return recordCount;
}
}
package com.ajax2;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ajax.Personbean;
public class Temp extends HttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
Personbean pb=new Personbean();
int pageNo=Integer.parseInt((String)request.getParameter("pageNo"));
System.out.print(pageNo);
int pageSize=10;
ArrayList list=(ArrayList)pb.all(pageNo, pageSize);
int pageCount=pb.Count();
int recordCount=pb.reCount();
request.setAttribute("pageCount", pageCount+"");
request.setAttribute("recordCount", recordCount+"");
request.setAttribute("pageNo", pageNo+"");
request.setAttribute("pageSize", pageSize+"");
request.setAttribute("list", list);
request.getRequestDispatcher("/First.jsp").forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlib-version>0.9</tlib-version>
<!--标签头-->
<short-name>w</short-name>
<!--将来在页面用taglib引用时的uri属性,这部分的名字可以随便写,只要是符合HTTP网址形式的 -->
<uri>http://javacrazyer.iteye.com/tags/pager</uri>
<!-- 自定义标签的描述信息 -->
<tag>
<!-- 标签名 -->
<name>pager</name>
<!-- 对应的标签处理类全限定名 -->
<tag-class>com.ajax.Pager</tag-class>
<!-- 标签主体的类型 -->
<body-content>empty</body-content>
<!-- 当前页号属性的描述信息 -->
<attribute>
<!-- 属性名 -->
<name>pageNo</name>
<!-- 该属性是否为必要的 -->
<required>true</required>
<!-- 属性值是否可以在JSP运行时期动态产生 -->
<rtexprvalue>true</rtexprvalue>
<!-- 属性的数据类型 -->
<type>int</type>
</attribute>
<!-- 总记录数属性的描述信息 -->
<attribute>
<name>recordCount</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<!-- 总页数属性的描述信息 -->
<attribute>
<name>pageSize</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
<!-- 分页标签要跳转的URI属性的描述信息 -->
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>Show</servlet-name>
<servlet-class>com.ajax2.Show</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>temp</servlet-name>
<servlet-class>com.ajax2.Temp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Show</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>temp</servlet-name>
<url-pattern>/go</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<jsp-config> <taglib> <taglib-uri>/tld/lhp2012</taglib-uri> <taglib-location>/WEB-INF/pager.tld</taglib-location> </taglib> </jsp-config>
<filter>
<filter-name>encode</filter-name>
<filter-class>com.ajax.Chin</filter-class>
</filter>
<filter-mapping>
<filter-name>encode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<%@ page language="java" import="java.util.*,com.ajax.*" pageEncoding="utf-8"%>
<%@taglib uri="http://javacrazyer.iteye.com/tags/pager" prefix="q"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String a=(String)request.getAttribute("pageCount");
int pageCount=Integer.parseInt(a);
ArrayList list=(ArrayList)request.getAttribute("list");
int pageNo=Integer.parseInt((String)request.getAttribute("pageNo"));
int pageSize=Integer.parseInt((String)request.getAttribute("pageSize"));
int recordCount=Integer.parseInt((String)request.getAttribute("recordCount"));
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'First.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache" charset="utf-8">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<table>
<tr><th>编号</th><th>姓名</th></tr>
<%for(int i=0;i<list.size();i++){
Person p=(Person)list.get(i);
%>
<tr><td><%=p.getPid() %></td><td><%=p.getMname() %></td></tr>
<%} %>
</table>
<q:pager pageSize="${pageSize}" pageNo="${pageNo}" url="go" recordCount="${recordCount}"/>
</body>
</html>