题外话:该分页显示是用 “表示层-控制层-DAO层-数据库”的设计思想实现的,有什么需要改进的地方大家提出来,共同学习进步。

思路:首先得在 DAO 对象中提供分页查询的方法,在控制层调用该方法查到指定页的数据,在表示层通过 EL 表达式和 JSTL 将该页数据显示出来。

重点:两个方法:(1)计算总的页数。 (2)查询指定页数据。

1.DAO层-数据库

JDBCUtils 类用于打开和关闭数据库,核心代码如下:

1 importjava.sql.Connection;2 importjava.sql.DriverManager;3 importjava.sql.PreparedStatement;4 importjava.sql.ResultSet;5 importjava.sql.SQLException;6
7 public classJDBCUtils {8 private Connection conn=null;9 private PreparedStatement pstmt=null;10
11
12 /**
13 * connect 连接数据库14 *@return
15 */
16 publicConnection connect(){17 String user="root";18 String password="1234";19 String driverClass = "com.mysql.jdbc.Driver";20 String jdbcUrl = "jdbc:mysql://localhost:3306/book";21
22 try{23 Class.forName(driverClass);24 conn =DriverManager.getConnection(jdbcUrl, user, password);25 } catch(Exception e) {26 //TODO Auto-generated catch block
27 e.printStackTrace();28 }29 returnconn;30
31 }32
33 /**
34 * close 关闭数据库35 *@paramconn36 *@parampstmt37 *@paramresu38 */
39 public voidclose(Connection conn,PreparedStatement pstmt,ResultSet result){40 if(conn != null){41 try{42 conn.close();43 } catch(SQLException e) {44 //TODO Auto-generated catch block
45 }46 }47 if(pstmt != null){48 try{49 pstmt.close();50 } catch(SQLException e) {51 //TODO Auto-generated catch block
52 e.printStackTrace();53 }54 }55 if(result != null){56 try{57 result.close();58 } catch(SQLException e) {59 //TODO Auto-generated catch block
60 e.printStackTrace();61 }62 }63 }64
65 }
UserDao 类中的方法 getPage() 和方法 listUser() 分别用来计算总页数和查询指定页的数据,核心代码如下:
1 importjava.sql.Connection;2 importjava.sql.PreparedStatement;3 importjava.sql.ResultSet;4 importjava.sql.SQLException;5 importjava.util.ArrayList;6 importjava.util.List;7
8 importcom.db.JDBCUtils;9
10 public classUserDao {11 /**
12 * 计算总的页数13 *@return
14 */
15 public intgetPage(){16 int recordCount=0,t1=0,t2=0;17 PreparedStatement pstmt=null;18 ResultSet result=null;19 JDBCUtils jdbc=newJDBCUtils();20 Connection conn=jdbc.connect();21 String sql="select count(*) from books";22 try{23 pstmt=conn.prepareStatement(sql);24 result=pstmt.executeQuery();25 result.next();26 recordCount=result.getInt(1);27 t1=recordCount%5;28 t2=recordCount/5;29 } catch(Exception e) {30 //TODO Auto-generated catch block
31 e.printStackTrace();32 }finally{33 jdbc.close(conn, pstmt, result);34 }35 if(t1 != 0){36 t2=t2+1;37 }38
39 returnt2;40 }41
42 /**
43 * 查询指定页的数据44 *@parampageNo45 *@return
46 */
47 public List listUser(intpageNo){48 PreparedStatement pstmt=null;49 ResultSet result=null;50 List list=new ArrayList();51 int pageSize=5;52 int page=(pageNo-1)*5;53 JDBCUtils jdbc=newJDBCUtils();54 Connection conn=jdbc.connect();55 String sql="select * from books order by id limit ?,?";56 try{57 pstmt=conn.prepareStatement(sql);58 pstmt.setInt(1, page);59 pstmt.setInt(2, pageSize);60 result=pstmt.executeQuery();61 while(result.next()){62 User user=newUser();63 user.setId(result.getInt(1));64 user.setName(result.getString(2));65 user.setNumber(result.getString(3));66 list.add(user);67
68 }69 } catch(Exception e) {70 //TODO Auto-generated catch block
71 e.printStackTrace();72 }finally{73 jdbc.close(conn, pstmt, result);74 }75 returnlist;76 }77
78 }

User 类用于存储查询到的数据,核心代码如下:

1 public classUser {2 private intid;3 privateString name;4 privateString number;5 public intgetId() {6 returnid;7 }8 public void setId(intid) {9 this.id =id;10 }11 publicString getName() {12 returnname;13 }14 public voidsetName(String name) {15 this.name =name;16 }17 publicString getNumber() {18 returnnumber;19 }20 public voidsetNumber(String number) {21 this.number =number;22 }23 }

2.控制层

ListUser 类内部调用 UserDao 对象查询数据并指派页面显示数据,核心代码如下:

1 importjava.io.IOException;2 importjava.io.PrintWriter;3 importjava.util.ArrayList;4 importjava.util.List;5
6 importjavax.servlet.ServletException;7 importjavax.servlet.http.HttpServlet;8 importjavax.servlet.http.HttpServletRequest;9 importjavax.servlet.http.HttpServletResponse;10
11 importcom.dao.User;12 importcom.dao.UserDao;13
14 public class ListUser extendsHttpServlet {15 publicListUser() {16 super();17 }18
19 public voiddestroy() {20 super.destroy(); //Just puts "destroy" string in log21 //Put your code here
22 }23
24 public voiddoGet(HttpServletRequest request, HttpServletResponse response)25 throwsServletException, IOException {26
27 doPost(request, response);28 }29
30 public voiddoPost(HttpServletRequest request, HttpServletResponse response)31 throwsServletException, IOException {32
33
34 response.setCharacterEncoding("utf-8");35 int pageNo = 1;36 UserDao userdao=newUserDao();37 List lists=new ArrayList();38 String pageno=request.getParameter("pageNos");39 if(pageno != null){40 pageNo=Integer.parseInt(pageno);41 }42 lists=userdao.listUser(pageNo);43 int recordCount=userdao.getPage();44 request.setAttribute("recordCount", userdao.getPage());45 request.setAttribute("listss", lists);46 request.setAttribute("pageNos", pageNo);47 request.getRequestDispatcher("userlist.jsp").forward(request, response);48 }49
50 public void init() throwsServletException {51 //Put your code here
52 }53
54 }

3.表示层

输出页面 userlist.jsp ,使用 EL 和 JSTL 输出查询结果,核心代码如下:

6 String path =request.getContextPath();7 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";8 %>
 
My JSP 'userlist.jsp' starting page 
 
 
26 th,td{width: 150px;border: 2px solid gray;text-align: center;}27 body{text-align: center;}28 a{text-decoration: none;}29 table {border-collapse: collapse;}30 
 
图书信

书号书名库存量

${person.id} 
  
${person.name }


4.效果图

java 手工分页计算公式 java分页显示_java