使用Struts2实现分页显示

使用Struts2实现分页显示trutsJSPSQLWebMySQL 

在开发web程序时,从数据库中取出来的数据一般都要分页显示在页面上,分页显示的方法非常多,有人写自定义标签,用自己写的标签进行分页显示,我个人觉得这是一种比较好的方法。下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2action里面定义一个List属性,用这个List来接收从数据库中查询出来并进行了封装的那些对象,然后通过Struts2的标签遍历List里的每个对象,并把这些对象里所包含的属性取出来展现在页面上。

 

下面是具体的步骤:

所用工具:JDK1.6 + MyEclipse6.0 + Tomcat6.0 + MySQL5.0 + struts 2.0.11

1、新建一个web工程,导入struts2中相应的jar包和mysql数据库驱动包。

2、编写web.xml文件,其代码如下:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.   
  7.     <filter>  
  8.         <filter-name>struts2</filter-name>  
  9.         <filter-class>  
  10.             org.apache.struts2.dispatcher.FilterDispatcher  
  11.         </filter-class>  
  12.     </filter>  
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.     <welcome-file-list>  
  18.         <welcome-file>index.jsp</welcome-file>  
  19.     </welcome-file-list>  
  20. </web-app>  

3、建一个数据库表,用于保存学员信息:

Sql代码  

  1. drop database if exists page;  
  2. create database page ;  
  3. use page;  
  4. create table student (  
  5.    stu_id integer auto_increment,  
  6.    stuName varchar(30) not null,  
  7.    address varchar(50) not null,  
  8.    stuPhone varchar(15)not null,  
  9.    primary key(stu_id)  
  10. );  
  11.   
  12. insert into student(stuName,address,stuPhone) values('杨华林','长沙','13787825190');  
  13. insert into student(stuName,address,stuPhone) values('李明清','天津','13787525190');  
  14. insert into student(stuName,address,stuPhone) values('李小华','大连','13788451190');  
  15. insert into student(stuName,address,stuPhone) values('郑小明','苏州','13787052188');  
  16. insert into student(stuName,address,stuPhone) values('杨一新','西安','13787851190');  
  17. insert into student(stuName,address,stuPhone) values('王新任','广州','13787056460');  
  18. insert into student(stuName,address,stuPhone) values('谢小华','深圳','13787075550');  
  19. insert into student(stuName,address,stuPhone) values('王建明','厦门','13788853690');  
  20. insert into student(stuName,address,stuPhone) values('秦一生','北京','13788689236');  
  21. insert into student(stuName,address,stuPhone) values('田翠林','杭州','13787655150');  
  22. insert into student(stuName,address,stuPhone) values('陈小明','广州','13787623668');  

4、编写PageDAO类,该类用于从数据库中取出所有的学员信息,把这些学员信息封装成一个Student对象并将其放入List中。

Java代码  

  1. package org.hnylj.util;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. public class PageDAO {  
  12.     private Connection conn ;  
  13.     private PreparedStatement pstmt ;  
  14.     private ResultSet rs ;  
  15.     private static final String DRIVER = "com.mysql.jdbc.Driver" ;  
  16.     private static final String URL = "jdbc:mysql://localhost:3306/page" ;  
  17.     private static final String USERNAME = "root" ;  
  18.     private static final String PASSWORD = "123" ;  
  19.       
  20.     private Student student ;  
  21.       
  22.     //数据库连接  
  23.     public synchronized Connection getConnection () {  
  24.         try {  
  25.             Class.forName (DRIVER) ;  
  26.             conn = DriverManager.getConnection (URL,USERNAME,PASSWORD) ;  
  27.         } catch (ClassNotFoundException e) {  
  28.             e.printStackTrace () ;  
  29.             return null ;  
  30.         } catch (SQLException e) {  
  31.             e.printStackTrace () ;  
  32.             return null ;  
  33.         }   
  34.         return conn ;  
  35.     }  
  36.     
  37.   //分页查询  
  38.   public List<Student> queryByPage (int pageSize, int pageNow) {  
  39.     List<Student> list = new ArrayList<Student> () ;  
  40.     try {  
  41.       if (this.getConnection()!=null && pageSize>0 && pageNow>0) {  
  42.           pstmt = this.getConnection().prepareStatement(  
  43.             "select * from student order by stu_id limit "+(pageNow*pageSize-pageSize)+","+pageSize  
  44.           );  
  45.           rs = pstmt.executeQuery () ;  
  46.             
  47.           while (rs.next()) {  
  48.               student = new Student () ;  
  49.               student.setStu_id (rs.getInt(1)) ;  
  50.               student.setStuName (rs.getString(2)) ;  
  51.               student.setAddress (rs.getString(3)) ;  
  52.               student.setStuPhone (rs.getString(4)) ;  
  53.               list.add (student) ;  
  54.           }  
  55.       }  
  56.     } catch(SQLException e) {  
  57.         e.printStackTrace() ;  
  58.     }  
  59.     return list ;  
  60.   }  
  61. }  

5、由于要对数据库中的学员信息进行封装,所以需要编写一个JavaBean,Student类:

Java代码  

  1. package org.hnylj.util;  
  2.   
  3. public class Student {  
  4.     private int stu_id ;  
  5.     private String stuName ;  
  6.     private String address ;  
  7.     private String stuPhone ;  
  8.       
  9.     public Student () {  
  10.     }  
  11.       
  12.     public int getStu_id () {  
  13.         return stu_id ;  
  14.     }  
  15.       
  16.     public void setStu_id (int stu_id) {  
  17.         this.stu_id = stu_id ;  
  18.     }  
  19.       
  20.     public String getStuName () {  
  21.         return stuName ;  
  22.     }  
  23.       
  24.     public void setStuName (String stuName) {  
  25.         this.stuName = stuName ;  
  26.     }  
  27.       
  28.     public String getAddress () {  
  29.         return address ;  
  30.     }  
  31.       
  32.     public void setAddress (String address) {  
  33.         this.address = address ;  
  34.     }  
  35.       
  36.     public String getStuPhone () {  
  37.         return stuPhone ;  
  38.     }  
  39.       
  40.     public void setStuPhone (String stuPhone) {  
  41.         this.stuPhone = stuPhone ;  
  42.     }  
  43. }  

至此底层的代码就写好了。接下来我们需要编写web层的代码。

6、编写web层的jsp文件,分别有index.jsp,show.jsperror.jsp,其代码分别如下:

Java代码  

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s"%>  
  3.   
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.     <head>  
  7.         <title>Struts2实现分页显示</title>  
  8.     </head>  
  9.     <body>  
  10.        <div align="center">  
  11.           <s:a href="show.action">进入查看学员列表</s:a>  
  12.        </div>  
  13.     </body>  
  14. </html>  

Java代码  

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s"%>  
  3.   
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.   <head>  
  7.     <title>Struts2实现分页显示</title>  
  8.   </head>  
  9.   <body>  
  10.   <div align="center">  
  11.   <table border="1">  
  12.     <tr>  
  13.        <th>学号</th>  
  14.        <th>姓名</th>  
  15.        <th>地址</th>  
  16.        <th>电话</th>  
  17.     </tr>  
  18.     <s:iterator value="students">  
  19.        <tr>  
  20.           <td><s:property value="stu_id"/></td>  
  21.           <td><s:property value="stuName"/></td>  
  22.           <td><s:property value="address"/></td>  
  23.           <td><s:property value="stuPhone"/></td>  
  24.        </tr>  
  25.     </s:iterator>  
  26.   </table>  
  27.      <s:url id="url_pre" value="show.action">  
  28.          <s:param name="pageNow" value="pageNow-1"></s:param>  
  29.      </s:url>  
  30.   
  31.      <s:url id="url_next" value="show.action">  
  32.          <s:param name="pageNow" value="pageNow+1"></s:param>  
  33.      </s:url>    
  34.   
  35.      <s:a href="%{url_pre}">上一页</s:a>  
  36.        
  37.      <s:iterator value="students" status="status">  
  38.         <s:url id="url" value="show.action">  
  39.             <s:param name="pageNow" value="pageNow"/>  
  40.         </s:url>  
  41.      </s:iterator>  
  42.   
  43.      <s:a href="%{url_next}">下一页</s:a>   
  44.   </div>  
  45.   </body>  
  46. </html>  

Java代码  

  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2.   
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>发生错误</title>  
  7.   </head>  
  8.     
  9.   <body>  
  10.       业务逻辑发生异常,请稍候再试。。。。。。  
  11.   </body>  
  12. </html>  

7、编写struts2action来拦截用户的请求:

 

Java代码  

  1. package org.hnylj.web;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.hnylj.util.PageDAO;  
  6. import org.hnylj.util.Student;  
  7.   
  8. import com.opensymphony.xwork2.ActionSupport;  
  9.   
  10. public class ShowAction extends ActionSupport {  
  11.       
  12.     private List<Student> students ;  
  13.     private int pageNow = 1 ; //初始化为1,默认从第一页开始显示  
  14.     private int pageSize = 5 ; //每页显示5条记录  
  15.       
  16.     private PageDAO pageDAO = new PageDAO () ;  
  17.       
  18.     public List<Student> getStudents() {  
  19.         return students;  
  20.     }  
  21.   
  22.     public void setStudents(List<Student> students) {  
  23.         this.students = students;  
  24.     }  
  25.       
  26.     public int getPageNow() {  
  27.         return pageNow;  
  28.     }  
  29.   
  30.     public void setPageNow(int pageNow) {  
  31.         this.pageNow = pageNow;  
  32.     }  
  33.   
  34.     public int getPageSize() {  
  35.         return pageSize;  
  36.     }  
  37.   
  38.     public void setPageSize(int pageSize) {  
  39.         this.pageSize = pageSize;  
  40.     }  
  41.   
  42.     public String execute() throws Exception {  
  43.         students = pageDAO.queryByPage(pageSize, pageNow) ;  
  44.         return SUCCESS ;  
  45.     }  
  46. }  

8、配置struts.xml文件,即action和响应结果页面之间的映射:

Java代码  

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.     <package name="struts2" namespace="/" extends="struts-default">  
  8.         <action name="show" class="org.hnylj.web.ShowAction">  
  9.             <result name="success">show.jsp</result>  
  10.             <result name="error">error.jsp</result>  
  11.         </action>  
  12.     </package>  
  13. </struts>  

至此所有的工作已经完成,接下来部署整个web工程到tomcatwebapps目录下,启动tomcat,在浏览器地址栏输入http://localhost:8080/项目名称/index.jsp,回车即可看到一个链接,点击该链接即可看到一个可以进行上一页和下一页的学员信息列表。
该应用有一些不足之处,因为我也是刚学struts2不久,打算以后有时间再完善一下,对于struts2大家是怎么分页的,希望能提供好的建议,一起学习,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

银色亡灵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值