`
zhaoshijie
  • 浏览: 2261964 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts2分页实现

阅读更多


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


  Xml代码 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" 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   
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <filter> 
        <filter-name>struts2</filter-name> 
        <filter-class> 
            org.apache.struts2.dispatcher.FilterDispatcher  
        </filter-class> 
    </filter> 
    <filter-mapping> 
        <filter-name>struts2</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <welcome-file-list> 
        <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
                   

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 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
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
                  3、建一个数据库表,用于保存学员信息:

Sql代码 
drop database if exists page;  
create database page ;  
use page;  
create table student (  
   stu_id integer auto_increment,  
   stuName varchar(255) not null,  
   address varchar(255) not null,  
   stuPhone varchar(255)not null,  
   primary key(stu_id)  
);  
insert into student(stuName,address,stuPhone) values('杨华林','长沙','13787825190');  
insert into student(stuName,address,stuPhone) values('李明清','天津','13787525190');  
insert into student(stuName,address,stuPhone) values('李小华','大连','13788451190');  
insert into student(stuName,address,stuPhone) values('郑小明','苏州','13787052188');  
insert into student(stuName,address,stuPhone) values('杨一新','西安','13787851190');  
insert into student(stuName,address,stuPhone) values('王新任','广州','13787056460');  
insert into student(stuName,address,stuPhone) values('谢小华','深圳','13787075550');  
insert into student(stuName,address,stuPhone) values('王建明','厦门','13788853690');  
insert into student(stuName,address,stuPhone) values('秦一生','北京','13788689236');  
insert into student(stuName,address,stuPhone) values('田翠林','杭州','13787655150');  
insert into student(stuName,address,stuPhone) values('陈小明','广州','13787623668'); 

drop database if exists page;
create database page ;
use page;
create table student (
   stu_id integer auto_increment,
   stuName varchar(255) not null,
   address varchar(255) not null,
   stuPhone varchar(255)not null,
   primary key(stu_id)
);
insert into student(stuName,address,stuPhone) values('杨华林','长沙','13787825190');
insert into student(stuName,address,stuPhone) values('李明清','天津','13787525190');
insert into student(stuName,address,stuPhone) values('李小华','大连','13788451190');
insert into student(stuName,address,stuPhone) values('郑小明','苏州','13787052188');
insert into student(stuName,address,stuPhone) values('杨一新','西安','13787851190');
insert into student(stuName,address,stuPhone) values('王新任','广州','13787056460');
insert into student(stuName,address,stuPhone) values('谢小华','深圳','13787075550');
insert into student(stuName,address,stuPhone) values('王建明','厦门','13788853690');
insert into student(stuName,address,stuPhone) values('秦一生','北京','13788689236');
insert into student(stuName,address,stuPhone) values('田翠林','杭州','13787655150');
insert into student(stuName,address,stuPhone) values('陈小明','广州','13787623668');4、编写PageDAO类,该类用于从数据库中取出所有的学员信息,把这些学员信息封装成一个Student 对象并将
   其放入List中。

Java代码 
package org.hnylj.util;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.ArrayList;  
import java.util.List;  
public class PageDAO {  
    private Connection conn ;  
    private PreparedStatement pstmt ;  
    private ResultSet rs ;  
    private static final String DRIVER = "com.mysql.jdbc.Driver" ;  
    private static final String URL = "jdbc:mysql://localhost:3306/page" ;  
    private static final String USERNAME = "root" ;  
    private static final String PASSWORD = "123" ;  
      
    private Student student ;  
      
    //数据库连接  
    public synchronized Connection getConnection () {  
        try {  
            Class.forName (DRIVER) ;  
            conn = DriverManager.getConnection (URL,USERNAME,PASSWORD) ;  
        } catch (ClassNotFoundException e) {  
            e.printStackTrace () ;  
            return null ;  
        } catch (SQLException e) {  
            e.printStackTrace () ;  
            return null ;  
        }   
        return conn ;  
    }  
    
  //分页查询  
  public List<Student> queryByPage (int pageSize, int pageNow) {  
    List<Student> list = new ArrayList<Student> () ;  
    try {  
      if (this.getConnection()!=null && pageSize>0 && pageNow>0) {  
          pstmt = this.getConnection().prepareStatement(  
            "select * from student order by stu_id limit "+(pageNow*pageSize-pageSize)+","+pageSize  
          );  
          rs = pstmt.executeQuery () ;  
            
          while (rs.next()) {  
              student = new Student () ;  
              student.setStu_id (rs.getInt(1)) ;  
              student.setStuName (rs.getString(2)) ;  
              student.setAddress (rs.getString(3)) ;  
              student.setStuPhone (rs.getString(4)) ;  
              list.add (student) ;  
          }  
      }  
    } catch(SQLException e) {  
        e.printStackTrace() ;  
    }  
    return list ;  
  }  
}  
                   

package org.hnylj.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class PageDAO {
private Connection conn ;
private PreparedStatement pstmt ;
private ResultSet rs ;
private static final String DRIVER = "com.mysql.jdbc.Driver" ;
private static final String URL = "jdbc:mysql://localhost:3306/page" ;
private static final String USERNAME = "root" ;
private static final String PASSWORD = "123" ;

private Student student ;

//数据库连接
public synchronized Connection getConnection () {
try {
Class.forName (DRIVER) ;
conn = DriverManager.getConnection (URL,USERNAME,PASSWORD) ;
} catch (ClassNotFoundException e) {
e.printStackTrace () ;
return null ;
} catch (SQLException e) {
e.printStackTrace () ;
return null ;
}
return conn ;
}
 
  //分页查询
  public List<Student> queryByPage (int pageSize, int pageNow) {
  List<Student> list = new ArrayList<Student> () ;
  try {
    if (this.getConnection()!=null && pageSize>0 && pageNow>0) {
    pstmt = this.getConnection().prepareStatement(
      "select * from student order by stu_id limit "+(pageNow*pageSize-pageSize)+","+pageSize
    );
    rs = pstmt.executeQuery () ;
   
    while (rs.next()) {
    student = new Student () ;
    student.setStu_id (rs.getInt(1)) ;
    student.setStuName (rs.getString(2)) ;
    student.setAddress (rs.getString(3)) ;
    student.setStuPhone (rs.getString(4)) ;
    list.add (student) ;
    }
    }
  } catch(SQLException e) {
  e.printStackTrace() ;
  }
  return list ;
  }
}
                  5、由于要对数据库中的学员信息进行封装,所以需要编写一个JavaBean,即Student类:

Java代码 
package org.hnylj.util;  
public class Student {  
    private int stu_id ;  
    private String stuName ;  
    private String address ;  
    private String stuPhone ;  
      
    public Student () {  
    }  
      
    public int getStu_id () {  
        return stu_id ;  
    }  
      
    public void setStu_id (int stu_id) {  
        this.stu_id = stu_id ;  
    }  
      
    public String getStuName () {  
        return stuName ;  
    }  
      
    public void setStuName (String stuName) {  
        this.stuName = stuName ;  
    }  
      
    public String getAddress () {  
        return address ;  
    }  
      
    public void setAddress (String address) {  
        this.address = address ;  
    }  
      
    public String getStuPhone () {  
        return stuPhone ;  
    }  
      
    public void setStuPhone (String stuPhone) {  
        this.stuPhone = stuPhone ;  
    }  


package org.hnylj.util;
public class Student {
private int stu_id ;
private String stuName ;
private String address ;
private String stuPhone ;

public Student () {
}

public int getStu_id () {
return stu_id ;
}

public void setStu_id (int stu_id) {
this.stu_id = stu_id ;
}

public String getStuName () {
return stuName ;
}

public void setStuName (String stuName) {
this.stuName = stuName ;
}

public String getAddress () {
return address ;
}

public void setAddress (String address) {
this.address = address ;
}

public String getStuPhone () {
return stuPhone ;
}

public void setStuPhone (String stuPhone) {
this.stuPhone = stuPhone ;
}
}至此底层的代码就写好了。接下来我们需要编写web层的代码。

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

Java代码 
<%@ page language="java" pageEncoding="UTF-8"%>  
<%@ taglib uri="/struts-tags" prefix="s"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
    <head>  
        <title>Struts2实现分页显示</title>  
    </head>  
    <body>  
       <div align="center">  
          <s:a href="show.action">进入查看学员列表</s:a>  
       </div>  
    </body>  
</html> 

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2实现分页显示</title>
</head>
<body>
   <div align="center">
      <s:a href="show.action">进入查看学员列表</s:a>
   </div>
</body>
</html>Java代码 
<%@ page language="java" pageEncoding="UTF-8"%>  
<%@ taglib uri="/struts-tags" prefix="s"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <title>Struts2实现分页显示</title>  
  </head>  
  <body>  
  <div align="center">  
  <table border="1">  
    <tr>  
       <th>学号</th>  
       <th>姓名</th>  
       <th>地址</th>  
       <th>电话</th>  
    </tr>  
    <s:iterator value="students">  
       <tr>  
          <td><s:property value="stu_id"/></td>  
          <td><s:property value="stuName"/></td>  
          <td><s:property value="address"/></td>  
          <td><s:property value="stuPhone"/></td>  
       </tr>  
    </s:iterator>  
  </table>  
     <s:url id="url_pre" value="show.action">  
         <s:param name="pageNow" value="pageNow-1"></s:param>  
     </s:url>  
     <s:url id="url_next" value="show.action">  
         <s:param name="pageNow" value="pageNow+1"></s:param>  
     </s:url>    
     <s:a href="%{url_pre}">上一页</s:a>  
       
     <s:iterator value="students" status="status">  
        <s:url id="url" value="show.action">  
            <s:param name="pageNow" value="pageNow"/>  
        </s:url>  
     </s:iterator>  
     <s:a href="%{url_next}">下一页</s:a>   
  </div>  
  </body>  
</html> 

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>Struts2实现分页显示</title>
  </head>
  <body>
  <div align="center">
  <table border="1">
    <tr>
   <th>学号</th>
   <th>姓名</th>
   <th>地址</th>
   <th>电话</th>
    </tr>
<s:iterator value="students">
   <tr>
      <td><s:property value="stu_id"/></td>
      <td><s:property value="stuName"/></td>
      <td><s:property value="address"/></td>
      <td><s:property value="stuPhone"/></td>
   </tr>
</s:iterator>
  </table>
     <s:url id="url_pre" value="show.action">
         <s:param name="pageNow" value="pageNow-1"></s:param>
     </s:url>
     <s:url id="url_next" value="show.action">
         <s:param name="pageNow" value="pageNow+1"></s:param>
     </s:url> 
     <s:a href="%{url_pre}">上一页</s:a>
    
     <s:iterator value="students" status="status">
        <s:url id="url" value="show.action">
            <s:param name="pageNow" value="pageNow"/>
        </s:url>
     </s:iterator>
     <s:a href="%{url_next}">下一页</s:a>
  </div>
  </body>
</html>Java代码 
<%@ page language="java" pageEncoding="UTF-8"%>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <title>发生错误</title>  
  </head>  
    
  <body>  
      业务逻辑发生异常,请稍候再试。。。。。。  
  </body>  
</html> 

<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>发生错误</title>
  </head>
 
  <body>
      业务逻辑发生异常,请稍候再试。。。。。。
  </body>
</html>7、编写struts2的action来拦截用户的请求:



Java代码 
package org.hnylj.web;  
import java.util.List;  
import org.hnylj.util.PageDAO;  
import org.hnylj.util.Student;  
import com.opensymphony.xwork2.ActionSupport;  
public class ShowAction extends ActionSupport {  
      
    private List<Student> students ;  
    private int pageNow = 1 ; //初始化为1,默认从第一页开始显示  
    private int pageSize = 5 ; //每页显示5条记录  
      
    private PageDAO pageDAO = new PageDAO () ;  
      
    public List<Student> getStudents() {  
        return students;  
    }  
    public void setStudents(List<Student> students) {  
        this.students = students;  
    }  
      
    public int getPageNow() {  
        return pageNow;  
    }  
    public void setPageNow(int pageNow) {  
        this.pageNow = pageNow;  
    }  
    public int getPageSize() {  
        return pageSize;  
    }  
    public void setPageSize(int pageSize) {  
        this.pageSize = pageSize;  
    }  
    public String execute() throws Exception {  
        students = pageDAO.queryByPage(pageSize, pageNow) ;  
        return SUCCESS ;  
    }  


package org.hnylj.web;
import java.util.List;
import org.hnylj.util.PageDAO;
import org.hnylj.util.Student;
import com.opensymphony.xwork2.ActionSupport;
public class ShowAction extends ActionSupport {

private List<Student> students ;
private int pageNow = 1 ; //初始化为1,默认从第一页开始显示
    private int pageSize = 5 ; //每页显示5条记录
   
private PageDAO pageDAO = new PageDAO () ;

public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}

public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String execute() throws Exception {
students = pageDAO.queryByPage(pageSize, pageNow) ;
return SUCCESS ;
}
}8、配置struts.xml文件,即action和响应结果页面之间的映射:

Java代码 
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC  
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd">  
<struts>  
    <package name="struts2" namespace="/" extends="struts-default">  
        <action name="show" class="org.hnylj.web.ShowAction">  
            <result name="success">show.jsp</result>  
            <result name="error">error.jsp</result>  
        </action>  
    </package>  
</struts> 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" namespace="/" extends="struts-default">
<action name="show" class="org.hnylj.web.ShowAction">
<result name="success">show.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>至此所有的工作已经完成,接下来部署整个web工程到tomcat的webapps目录下,启动tomcat,在浏览器地址栏输入 http://localhost:8080/项目名称/index.jsp,回车即可看到一个链接,点击该链接即可看到一个可以进行上一页和下一页的学员信息列表。

分享到:
评论

相关推荐

    Struts2 分页实现

    总的来说,Struts2的分页实现需要结合数据库操作、Action控制和前端展示三方面的工作。理解这个过程对于Java Web开发者来说是至关重要的,它可以帮助你更好地处理大数据量的展示,提供更加友好的用户界面。通过实践...

    Struts2实现分页查询

    用Struts2+mysql实现的简单信息录入,分页查询

    STRUTS2+HIBERNATE详细的分页实现代码详细的分页实现代码

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要探讨的是如何在Struts2与Hibernate框架结合下实现分页功能。接下来将详细解析Struts2与Hibernate如何协作完成这一任务。 ### Struts2与Hibernate...

    struts2增删改查,struts2分页查询

    在探讨Struts2框架下的增删改查以及...以上解析涵盖了Struts2框架中增删改查及分页查询的主要实现方式,通过JSP页面、Action类和配置文件三者的协作,我们可以高效地构建出具有动态数据展示和交互能力的Web应用程序。

    struts2分页模型

    本篇文章将深入探讨Struts2框架下的分页实现及其重要知识点。 1. **Struts2框架基础** Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了强大的控制层支持,简化了开发过程。在处理...

    Struts2自定义分页标签

    通过自定义分页标签,Struts2开发者能够轻松实现定制化分页,并保持代码的整洁和可维护性。这种方式避免了在多个JSP页面中重复编写分页逻辑,提高了代码复用性,同时降低了出错的可能性。 总之,本资源提供的Struts...

    struts2实现分页

    在分页实现中,我们主要利用 `&lt;s:bean&gt;` 创建 `org.apache.struts2.util.Counter` 类型的 bean 来控制循环范围。 #### 三、`&lt;s:bean&gt;` 标签的基本用法 `&lt;s:bean&gt;` 标签的基本语法如下: ```xml ... ``` - *...

    struts2分页代码的示例

    下面是我用Struts2做的一个分页显示实例,基本的思路是:把数据库表中的每一行数据封装成一个对象,用一个返回类型为List的方法返回这些对象,接着在Struts2的action里面定义一个List属性,用这个List来接收从数据库...

    使用struts实现分页

    本资源通过Struts框架实现了分页功能,主要涉及到以下几个关键知识点: 1. **MVC设计模式**:MVC模式将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。模型负责处理业务逻辑,视图...

    struts2 分页

    1. **Struts2分页实现原理**: Struts2的分页主要通过拦截器和自定义标签来完成。拦截器负责计算总页数和当前页的数据,自定义标签则用于在JSP页面上展示分页链接。用户点击分页链接时,发送请求到服务器,拦截器...

    使用 struts2实现分页

    本篇文章将详细讲解如何利用Struts2和JSP实现前端的分页功能。 分页是Web应用中常见的需求,尤其在处理大量数据时,能够帮助用户更高效地浏览和管理数据。Struts2通过Action类、结果类型配置以及拦截器等机制,可以...

    Struts2分页源码技术的应用

    在本文中,我们将深入探讨Struts2分页技术的实现原理、应用方法以及与Hibernate框架的结合。 首先,Struts2作为一款基于MVC模式的Java Web框架,它提供了丰富的拦截器(Interceptor)和动作(Action)机制,使得...

    struts2分页

    ### Struts2分页实现详解 #### 一、概述 在Web开发中,为了提高用户体验并减轻服务器压力,分页是一种常见的技术手段。Struts2作为一款流行的企业级Java Web框架,提供了丰富的功能来帮助开发者实现分页效果。本文...

    struts2分页效果第二种

    本文将详细介绍Struts2实现分页效果的第二种方法。 在Struts2中,实现分页通常涉及以下几个关键步骤: 1. **模型(Model)**:首先,我们需要一个实体类来存储待分页的数据,例如`User`。然后,创建一个`PageBean`类...

    hibernate+struts2分页代码

    3. **分页实现**: - 分页通常涉及两个主要部分:前端展示和后端处理。前端负责展示分页导航,而后端负责根据前端传来的参数执行数据库查询。 - 使用Hibernate,可以通过设置Query的`setFirstResult()`和`...

    struts2 完美实现 标签分页

    在这个“Struts2 完美实现 标签分页”的项目中,我们主要关注如何在Struts2框架下实现高效的分页功能,并利用自定义标签来提供友好的用户界面。 分页是Web应用中常见的需求,它有助于提高用户体验,特别是当处理...

    struts2.0实现的数据分页实现及实现分页步骤

    Struts2.0 是一个流行的Java Web开发框架,它提供了一种组织和控制MVC(Model-...同时,随着技术的发展,现代的Web应用可能更倾向于使用ORM框架(如Hibernate)和前端分页库(如jQuery DataTables)来简化分页实现。

    经典struts2分页方法 JAVA_WEB必备分页 源码

    6. **拦截器(Interceptor)**:Struts2的拦截器可以用来增强Action的处理逻辑,例如实现通用的分页功能。你可以创建一个分页拦截器,自动计算总页数,设置Action中的分页对象等。 7. **JSP/Freemarker标签库**:在...

    struts2中的分页显示

    ### Struts2分页实现细节 在具体实现上,Struts2的分页功能可以结合拦截器、Action以及自定义的Taglib来增强其灵活性和可维护性。 - **拦截器**:可以创建自定义拦截器来处理分页相关的请求参数,如页码、每页条数...

Global site tag (gtag.js) - Google Analytics