JSP分页实现(以留言板为例子)
2013-12-08 23:38
357 查看
主要基于JSP+Servlet+JavaBean+Dao模式
1、首先写个实体类Message:
2、接着写PageFind类,其中find方法查询指定页码中的数据,findCount查询总记录数:
3、写servlet类,主要的分页逻辑,此处显示的是首先展现给用户的页面,也就是分页导航栏为1的逻辑代码:
4、写Servlert类,关于回复之后,显示的分页页面逻辑代码,即显示最后一页的内容:
5、页面显示:
主要的代码都在上面了,回复的分页代码算法改写了一下,基本按照需求来修改代码即可,实现了简单的分页功能。
1、首先写个实体类Message:
public class Message { public static final int PAGE_SIZE=4;//分页当中每页记录数,不会经常修改,所以定义为final private int id; private String name; private String datetime; private String content; public String getContent() { return content; } public int getId() { return id; } public String getName() { return name; } public void setContent(String content) { this.content = content; } public String getDatetime() { return datetime; } public void setDatetime(String datetime) { this.datetime = datetime; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } }
2、接着写PageFind类,其中find方法查询指定页码中的数据,findCount查询总记录数:
package com.xuan.util; /* * find方法用于实现分页查询功能,此方法根据入口参数page传递的页码,查询指定页码中的记录 * * mysql数据库提供的limit关键字能够控制查询数据结果集的起始位置和返回记录的数量,使用方式:limit arg1,arg2; * 其中arg1用于指定查询记录的起始位置,arg2用于指定查询数据返回的记录数 * * */ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.xuan.vo.Message; /*分页查询方法find(),此方法包含一个page参数,用于传递要查询的页码*/ public class PageFind { public List<Message> find(int page){ List<Message> list=new ArrayList<Message>();//创建List Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; String sql="select * from message order by id asc limit ?,?"; try{ conn=DbUtil.getConn(); ps=DbUtil.getPreparedStatement(conn, sql); ps.setInt(1,(page-1)*Message.PAGE_SIZE);//对sql语句的第一个参数赋值,算法(page-1)*Message.PAGE_SIZE ps.setInt(2,Message.PAGE_SIZE);//对sql语句的第三个参数赋值 rs=ps.executeQuery();//执行查询操作 while(rs.next()){ Message message=new Message();//实例化Message message.setName(rs.getString("name"));//对name属性赋值 message.setContent(rs.getString("content")); message.setDatetime(rs.getString("datetime")); list.add(message);//将Message添加到List集合中 } }catch(SQLException e){ e.printStackTrace(); }finally{ DbUtil.closeRs(rs); DbUtil.closePs(ps); DbUtil.closeConn(conn); } return list; } public int findCount(){ int count=0;//总记录数 Connection conn=null; Statement stmt=null; ResultSet rs=null; String sql ="select count(*) from message"; try{ conn=DbUtil.getConn(); stmt=DbUtil.getStatement(conn); rs=stmt.executeQuery(sql); if(rs.next()){//光标向后移动,并判断是否有效;由于所获取的数据是单一的一个数值,所以实例中通过if(next())进行调用,而没有使用while count=rs.getInt(1);//对总记录数赋值,因为此sql语句查询出来的“表”只有一条记录,于是取下标为1的值 } }catch(SQLException e){ throw new RuntimeException("查询数据库总记录数的时候出错了"+e.getMessage()); }finally{ DbUtil.closeRs(rs); DbUtil.closeStmt(stmt); DbUtil.closeConn(conn); } return count;//返回总记录数 } }
3、写servlet类,主要的分页逻辑,此处显示的是首先展现给用户的页面,也就是分页导航栏为1的逻辑代码:
package com.xuan.controller; /*FindServlet类中的doPost()方法主要是获取查询结果集和构造分页导航条对象*/ import java.io.IOException; 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.xuan.dao.UserDao; import com.xuan.daoimpl.UserDaoImpl; import com.xuan.util.PageFind; import com.xuan.vo.Message; public class FindServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UserDao ud=new UserDaoImpl(); int currPage=1;//当前页码 if(request.getParameter("page")!=null){//判断传递的页码是否有效 currPage=Integer.parseInt(request.getParameter("page"));//对当前页码赋值 System.out.println(currPage); } PageFind pf=new PageFind(); List<Message> list=pf.find(currPage);//查询所有信息 request.setAttribute("list", list);//将list放置在request中 int pages;//总页数 int count=pf.findCount();//查询总记录数 if(count%Message.PAGE_SIZE==0){//计算总页数 pages=count/Message.PAGE_SIZE;//对总页数赋值 }else{ pages=count/Message.PAGE_SIZE+1;//对总页数赋值 } StringBuffer sb=new StringBuffer(); for(int i=1;i<=pages;i++){//通过循环构建分页导航条 if(i==currPage){ sb.append("["+i+"]"); }else{ //构建分页导航条 sb.append("<a href='FindServlet?page="+i+"'>"+i+"</a>"); } sb.append(" ");//构建分页导航条 } request.setAttribute("bar", sb.toString());//将分页导航条的字符串放置在request中 //转发显示页面 request.getRequestDispatcher("pages/login/FindSuccess.jsp").forward(request, response); } }
4、写Servlert类,关于回复之后,显示的分页页面逻辑代码,即显示最后一页的内容:
package com.xuan.controller; /*FindServlet类中的doPost()方法主要是获取查询结果集和构造分页导航条对象*/ import java.io.IOException; 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.xuan.dao.UserDao; import com.xuan.daoimpl.UserDaoImpl; import com.xuan.util.PageFind; import com.xuan.vo.Message; public class RplyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UserDao ud=new UserDaoImpl(); int currPage=1;//当前页码 if(request.getParameter("page")!=null){//判断传递的页码是否有效 currPage=Integer.parseInt(request.getParameter("page"));//对当前页码赋值 System.out.println(currPage); } PageFind pf=new PageFind(); int pages;//总页数 int count=pf.findCount();//查询总记录数 if(count%Message.PAGE_SIZE==0){//计算总页数 pages=count/Message.PAGE_SIZE;//对总页数赋值 }else{ pages=count/Message.PAGE_SIZE+1;//对总页数赋值 } List<Message> list=pf.find(pages);//查询所有信息 request.setAttribute("list", list);//将list放置在request中 StringBuffer sb=new StringBuffer(); for(int i=1;i<=pages-1;i++){//通过循环构建分页导航条 //构建分页导航条 sb.append("<a href='FindServlet?page="+i+"'>"+i+"</a>"); sb.append(" ");//构建分页导航条 } sb.append("["+pages+"]"); request.setAttribute("bar", sb.toString());//将分页导航条的字符串放置在request中 //转发显示页面 request.getRequestDispatcher("pages/login/FindSuccess.jsp").forward(request, response); } }
5、页面显示:
<div id="messageBoxs"> <% List<Message> list=(List<Message>)session.getAttribute("messageList"); System.out.print(list); if(list==null||list.size()<1){ out.print("没有任何留言!"); }else{ for(Message m :list){ %> <div id="item"><label > <% out.println("<div style='text-align:left;margin:0 auto;padding:0 auto'>"+" "+m.getContent()+"</div>"); out.println("<br/><br/><div style='float:right'>"+m.getName()+"<br/>"+m.getDatetime()+"</div>"); %> </label> </div> <% } } %> <div width="98%" align="center" style="padding-top:10px;"> <%=session.getAttribute("bar")%><!-- 用于输出分页导航条--> </div> </div>
主要的代码都在上面了,回复的分页代码算法改写了一下,基本按照需求来修改代码即可,实现了简单的分页功能。
相关文章推荐
- 实用ExtJS教程100例-005:自定义对话框Ext.MessageBox.show
- 解决js滑动菜单,卡顿的现象
- javascript中的一些偏门知识
- Javascript:void(0)和#在<a>标签中的区别
- JSF复合组件
- 40-JavaScript-折叠与显示-复选框的简单应用
- jsp学习1
- ExtJS拖拽效果
- jsf标签
- JSP页面跳转的几种实现方法
- jsp项目数据源多种配置
- js里==和===有什么区别
- js数组自定义函数,是否存在val、删除val、
- Extjs4 异步刷新书的情况下 保持树的展开状态
- JS对象属性是无序的
- 在JSP里使用CKEditor和CKFinder
- js判断手机号码归属地并是否有效
- 打开html页面执行js代码
- 李炎恢JS AJAX笔记
- javascript中的变量作用域