最近的一切都堆在了一起,事情很多,真正学习的时间很少,每天都在四处奔波,哎,这和我想象的修仙一般的大学生活不一样(一毛都不一样),不说了,实现我自己的分页功能吧
先配置一个基本的文件
//一个基本的信息
public class pageInformation {
//当前页数
private int page;
//总页数
private int sumPage;
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getSumPage() {
return sumPage;
}
public void setSumPage(int sumPage) {
this.sumPage = sumPage;
}
}
再创建一个对象后,我们还需要运用SQL语句,SQL语句中存在一个limit 关键字,这个关键字后面跟两个参数,对一个参数表示的是起始位置,而后一个参数表示往后读取几个数据。此外,还需要明白,在MySQL中是从0开始的。
String sql="select * from user order by id limit 0,5";
这个语句表示从第一个开始,读取后面的五个数据。
因此我们可以得到一个公式,第N页的数据是从第(N-1)x Q 这宫里的Q是自己进行设计的,表示的是,往下读据几个数据,起使就是上面sql语句中的“5”。
在了解到这个特性后,我们开始进行对总页进行计算,但是我们得先知道数据的总数,方便后面的除法运算
select count(*) as count from user;
这是一个SQL语句,它的作用是查询你的这个表中的数据总量,可以通过JDBC来获取数据的总数量。
//这里的number就是总数
//ResultSet rs=null;
//PreparedStatement ps=null;
//int number =0;
String sql="select count(*) as count from data";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
if (rs.next()) {
//作用是通过强转,将其转化为int型
number=Integer.valueOf(rs.getString("count")) ;
}
通过上述方法我们便可以获取数据的总量。
在这里我们需要知道,当数据不能够整除的时候,需要将页数+1,否则,你会发现,当数据不能够整除的时候,你的数据展示总会少那么几个。
//这李就开始了对页数进行了计算,后面的3是我自己随手写的,主要是自
//己不想敲数据库,希望理解
if (number % 3 != 0) {
//当能够被3整除,则总页数就是整数,反之就是得到的整数+1
sumUser=number/3+1;
}else{
sumUser=number/3;
}
现在我们有了总页数、总数据量,那么剩下的就是在JSP页面进行展示了,那么怎么展示呢,我这里选择把部分代码写到了JSP页面上,这确实是我自己的错,因为一个合格的Java程序员不能在自己的JSP页面上出现一行Java代码 ,我反思,我检讨,下次就改
言归正传,我这里在运用了一个session,这个session的作用就是把你想要的页数给传进来,在完成他的任务之后就顺手把他给清除了,省的下次再访问页面时由于session的与原因访问的页面不是从第一页开始的。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//此处是一个注解,注解之后可不用去XML文件中进行配置了
@WebServlet("/paging")
public class paging extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
//获取想要访问的页数
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
pageInformation pageInformation=new pageInformation();
int page= Integer.parseInt(req.getParameter("page"));
sumPage sumPage=new sumPage();
//设置总页数
pageInformation.setSumPage(sumPage.sumPage());
if (page>=pageInformation.getSumPage()){
page=pageInformation.getSumPage()-1;
}
if (page<0){
page=0;
}
//Session的设置
HttpSession session=req.getSession(true);
session.setAttribute("page",page);
resp.sendRedirect(req.getContextPath()+"/Watch/show01.jsp");
}
}
在我们的JSP页面则有读取这个session、清空session的语句,线面的这行代码其实就是为了把这个页数按钮给打印出来
<form method="get" action="${pageContext.request.contextPath}/paging">
<table>
<tr>
<th>
<td>
<%--这个首页起使就是从0开始,我们直接设置为0--%>
<button name="page" value="0">首页</button>
</td>
<td>
<button name="page" value="<%=num-1%>">上一页</button>
</td>
<%
pageInformation pageInformation=new pageInformation();
sumPage sumPage=new sumPage();
pageInformation.setSumPage(sumPage.sumPage());
<%--这个for循环的作用就是输出咱们的页数按钮,省力得很--%>
for (int i = 0; i< pageInformation.getSumPage(); i++){
%>
<td>
<button name="page" value="<%=i%>"><%=i+1%></button>
</td>
<%
}
%>
<td>
<button name="page" value="<%=num+1%>">下一页</button>
</td>
<td>
<%--尾页运用了和首页相同的原理,无非就是这个是总页数-1--%>
<button name="page" value="<%=pageInformation.getSumPage()-1%>">尾页</button>
</td>
</th>
</tr>
</table>
</form>
在这个开头,我们需要从0开始(或者说从第一页开始),这时候我们没有这个session,即这个session为null;,根据这一特性,我们可以这样子判断
//这里的request 什么的不详细介绍了
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
int num=0;
//判断session是否为null;如果为null;则num的之没有改变
//切记补腰强转后再进行判断,否则会报错、会报错、会报错!!!
if (session.getAttribute("page")!=null){
num= (int) session.getAttribute("page");
session.removeAttribute("page");
}
在这里我们获取了我们的需要的页码,只需要在sql语句中传入即可
String sql="select * from filepath order by id limit ?,3";
ps=conn.prepareStatement(sql);
ps.setInt(1,num*3);
ps.executeQuery();
rs=ps.executeQuery();
好了好了就这么多了,其中该怎么填写,就靠自己了,我这里是一个信息的展示,不好意思去泄露信息2333