`
gylixyu
  • 浏览: 6920 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

mysql分页 jsp+servlet+javabean实现

阅读更多
MYSQL分页总结
在软件开发的很多时候很多场合我们都需要用到分页技术,现在的分页技术很多,可是我知道的不多,像displaytag这样的分页插件我感受了一下的确很不错而且可以导出pdf,word,excel等格式的文件,但是我不怎么会用,所以避而远之,还是总结一下自己对mysql分页的总结吧。
分页是一个项目中的常用功能,在我的项目中,我在公告显示,会议显示,文件显示,员工显示模块均用到了分页功能。为了能够让代码复用,并且容易维护,总之在很多好处的诱惑下,我首先编写一个接口类,代码如下:
SplitPage.java
package dao;

import java.util.List;

/**
* @author lixiangyu
*
*/
public interface SplitPage {

//获取总记录数
int getTotalCount();
//获取总页数
int getTotalPage();
//按页获取记录
List queryPerPage(int page);
//设置每页显示的记录数
void setCountPerPage(int countPerPage);
}
从上面的接口中我们可以看到分页的一个基本思路,我们需要从四个方面进行考虑,分别为获取数据表里面的总记录数,设置每页显示的记录数,按页获取记录,以及获取总页数。获取总记录数和按页获取记录需要用SQL语句实现,但如何获取总页数?很简单,通过计算得出。
定义完接口类需要实现接口,但是在实现接口之前需要做一件事情,那就是连接数据库,在我的项目中我用的是MYSQL数据库,连接数据库代码如下所示:
DBUtil.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;


/**
* @author lixiangyu
*
*/
public class DBUtil {
private static String DBDRIVER = "com.mysql.jdbc.Driver";
private static String DBURL = "jdbc:mysql://localhost:3306/oasys?user=root&password=123456&useUnicode=true&characterEncoding=utf8";
private static Connection conn = null;

public DBUtil(){}

public static Connection getConnection(){
try{
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL);
// System.out.println("数据库连接");
}catch(SQLException e){
e.printStackTrace();
}catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
if(conn==null)
System.out.println("conn is not null");
return conn;
}

public static void closeConnection(ResultSet rs,PreparedStatement ps,Connection conn){
try{
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}

}
对于数据库连接的代码就不做过多说明,很多人也肯定是将连接数据库的代码单独的存放为一个文件。
现在需要实现接口类,接口类代码如下所示:
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
//import java.util.Iterator;
import java.util.List;

import javabean.Userinfo;

public class SplitPageImp implements SplitPage {

private int countPerPage=10; //每页显示是个元素

Connection conn = null;

PreparedStatement ps = null;

ResultSet rs = null;
@Override
//获取总记录数
public int getTotalCount() {
int totalCount = 0; //设置总记录数默认值为0
try{
conn = DBUtil.getConnection();
ps = conn.prepareStatement("select count(*) from userinfo");
rs = ps.executeQuery();
if(rs.next()){
totalCount = rs.getInt(1);
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtil.closeConnection(rs, ps, conn);
}
return totalCount;
}

@Override
//获取总页数
public int getTotalPage() {
int totalCount = this.getTotalCount();
int totalPage = 0;
if(totalCount%countPerPage==0)
totalPage = totalCount/countPerPage;
else
totalPage = totalCount/countPerPage+1;
return totalPage;
}

@Override
//按页查询
public List<Userinfo> queryPerPage(int page) {
List<Userinfo> list = new ArrayList<Userinfo>(); //我是针对用户进行分页,Userinfo是我的javabean文件,里面只包含了元素的定义和set、get方法
int startRow = (page-1) * countPerPage; //定义开始页起始元素
try{
conn = DBUtil.getConnection();
ps = conn.prepareStatement("select * from userinfo limit ?,?");  //注意只有在mysql中是limit 第一个?表示开始的元素,第二个?表示结束的元素,在mysql中第一个元素的下标为0
ps.setInt(1, startRow);
ps.setInt(2, countPerPage);
rs = ps.executeQuery();
while(rs.next()){
//除了括号里面的1,2,3……也可以将数字换成定义的元素
Userinfo user = new Userinfo();
user.setUid(rs.getString(1));
user.setUname(rs.getString(2));
user.setUpassword(rs.getString(3));
user.setUsex(rs.getString(4));
user.setUphone(rs.getString(5));
user.setUemail(rs.getString(6));
user.setUposition(rs.getString(7));
user.setUinDate(rs.getString(8));
user.setUintro(rs.getString(9));
user.setFk_rid(rs.getString(10));
user.setFk_did(rs.getString(11));
user.setUstatus(rs.getString(12));
user.setLogin(rs.getString(13));
list.add(user);
}
}catch(SQLException e){
e.printStackTrace();
}finally{
DBUtil.closeConnection(rs, ps, conn);
}
return list;
}

@Override
//设置每页显示记录数
public void setCountPerPage(int countPerPage) {
this.countPerPage = countPerPage;

}
}

UserDao.java
Public class UserDao{
public static SplitPage getUserIMP(){
return new SplitPageImp();
}
}
Bean文件就这样,很简单的写完了,然后开始写servlet,servlet里面如果是自己定义一个class然后将class写成servlet的话需要在web.xml里面进行配置servlet要不然是不能运行的,不信的话你可以试试,我是试过的,一个action始终是转不过去。Servlet代码如下所示:
package servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javabean.Userinfo;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.DepartmentDao;
import dao.RoleDao;
import dao.UserDao;

public class UserManager extends HttpServlet {
private static final long serialVersionUID = 1L;
      
    public UserManager() {
        super();
    }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response); //注意此处,如果没有这句则接收不到jsp传来的action
}
Protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

Userinfo user = new Userinfo();
String action = request.getParameter("action");

if(action.equals("showAllUser")){
int page = 1;
request.getParameter("page");
String p =request.getParameter("page");
if(p!=null){
page = Integer.parseInt(p);
}
int totalCount = UserDao.getUserIMP().getTotalCount();
int totalPage = UserDao.getUserIMP().getTotalPage();
List list = UserDao.getUserIMP().queryPerPage(page);
request.setAttribute("totalCount",new Integer(totalCount));
request.setAttribute("totalPage", new Integer(totalPage));
request.setAttribute("page", new Integer(page));
request.setAttribute("list", list);

this.forward(request, response, "/userinfo/userManager.jsp");
} //这句话除了这样写还可以这样写:request.getRequestDispatcher("/userinfo/userManager.jsp").forward(request, response);不同之处是要定义一个forward方法。

private void forward(HttpServletRequest request,HttpServletResponse response,String url)throws ServletException,IOException {
RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request, response);
}

}
至此后台全部完成,我觉得后台代码还是很容易理解的。
前台jsp页面如下所示,注意参数的传递:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList,java.util.List,java.sql.*,javabean.Userinfo,dao.UserDao,javabean.Role,dao.RoleDao,dao.DepartmentDao,javabean.Department " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="java.util.Iterator"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户管理</title>
</head>
<body>
<%
int totalCount=(Integer)request.getAttribute("totalCount");
int totalPage=(Integer)request.getAttribute("totalPage");
int p=(Integer)request.getAttribute("page");
List list=(List)request.getAttribute("list");
Iterator it=list.iterator();
%>
<center>
员工总人数:<font color="red" ><%=totalCount %></font>
当前页:<font color="red" ><%=p %></font>/<font color="red" ><%=totalPage %></font>
<table border="1" width="100%" cellpadding="0" cellspacing="0" bordercolor="#6ba6e0" >
<tr>
<th background="image/tablebj.gif">姓名</th>
<th background="image/tablebj.gif">性别</th>
<th background="image/tablebj.gif">角色</th>
<th background="image/tablebj.gif">部门</th>
<th background="image/tablebj.gif">修改</th>
<th background="image/tablebj.gif">删除</th>
</tr>
<%
while(it.hasNext()){
Userinfo userinfo=(Userinfo)it.next();
Role role=RoleDao.getRoleByID(userinfo.getFk_rid());
Department depart=DepartmentDao.getDepartById(userinfo.getFk_did());
%>
<tr>
<td><a href="<%=request.getContextPath() %>/UserManager?action=showOneUser&userid=<%=userinfo.getUid() %>"><%=userinfo.getUname() %></a></td>
<td><%=userinfo.getUsex() %></td>
<td><%=role.getRname() %></td>
<td><%=depart.getDname() %></td>
<td><a href="<%=request.getContextPath() %>/UserManager?action=userUpdate&userid=<%=userinfo.getUid() %>">修改</a></td>
<td><a href="<%=request.getContextPath() %>/UserManager?action=userDel&userid=<%=userinfo.getUid() %>" onclick="return confirm('确定删除该员工 信息?')">删除</a></td>
</tr>
<%}%>
</table>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="130" align="right">
<form action="<%=request.getContextPath() %>/UserManager?action=showAllUser" method="post">
跳转到<input type="text" name="page" size="3">页
</form>
</td>
<td width="20"></td>
<td width="290" align="left">
<%if(p==1){ %>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=1"> 首页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=(p+1) %>"> 下一页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=totalPage %>">末页</a>
<%}if(p==totalPage){ %>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=(p-1) %>">上一页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=1"> 首页</a>
<%}if(p!=1&&p!=totalPage){ %>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=1"> 首页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=(p-1) %>">上一页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=(p+1) %>"> 下一页</a>
<a href="<%=request.getContextPath() %>/UserManager?action=showAllUser&page=<%=totalPage %>">末页</a>
<%}%>
</td>
</tr>
</table>
</center>
</body>
</html>

就这样很简单的就可以实现mysql的分页。
0
5
分享到:
评论
1 楼 tuyf_hs 2012-05-27  
代码能贴全么??

相关推荐

    mysql分页 jsp实现 servlet+javabean+jsp三级架构

    MySQL分页JSP实现Servlet+JavaBean+JSP三级架构 本文档对MySQL分页技术进行了总结,讨论了在JSP实现中使用Servlet+JavaBean+JSP三级架构的分页技术的实现方式。文章首先讨论了分页技术的重要性,并且提出了一个基本...

    JSP+servlet+javabean实现购物车

    本项目以"JSP+servlet+javabean实现购物车"为主题,旨在演示如何使用这些技术来创建一个功能完整的购物车系统。下面我们将深入探讨这些知识点。 1. **JSP(JavaServer Pages)**:JSP是一种服务器端脚本语言,用于...

    jsp+servlet+javabean+jdbc+mysql实现增删改查和分页功能

    5.Servlet + JSP +JavaBean + JDBC(DBUtils)+ mysql 6.数据库 create database day19; use day19; create table t_customer( id varchar(40) primary key, username varchar(20), gender varchar(10), ...

    jsp+servlet+javabean实现网上商城项目完整源码

    网上商城项目是现代电子商务的重要组成部分,本项目采用经典的JSP、Servlet和JavaBean技术进行实现,提供了完整的源码,旨在帮助开发者理解和学习如何构建一个功能完备、界面美观的网上购物平台。下面将对这个项目的...

    jsp+javabean+servlet实现登录注册以及留言板

    jsp+javabean+servlet使用简单的MVC模式实现登录注册、留言板、分页的功能。model(javabean)层实现读写数据库,数据库名为webapp,没有密码;view(JSP)实现展示信息;controller(servlet)层联系model和view,...

    jsp+JavaBean+Servlet_Oracle和Mysql分页

    本项目聚焦于使用JSP、JavaBean和Servlet技术,结合Oracle与MySQL两种主流关系型数据库实现分页功能。以下将详细介绍这些技术及其在分页中的应用。 1. JSP(JavaServer Pages):JSP是一种动态网页技术,允许开发...

    JSP+SERVLET+MYSQL实现的增删改查javaweb小例子

    本项目"JSP+SERVLET+MYSQL实现的增删改查javaweb小例子"提供了一个基础的实战示例,帮助开发者了解如何将这三种技术有效地结合在一起,实现一个简单的Web应用,处理用户信息的CRUD(Create, Read, Update, Delete)...

    简单的jsp+servlet+javaBean实现MVC

    **简单的jsp+servlet+javaBean实现MVC** 在Web开发中,MVC(Model-View-Controller)模式是一种广泛使用的架构模式,它将应用程序的逻辑分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。...

    jsp成绩管理系统jsp+servlet+javabean

    【JSP成绩管理系统】是一个基于Java Web技术的典型应用,主要采用了MVC(Model-View-Controller)设计模式,结合了JSP、Servlet和JavaBean组件。本系统旨在实现对学生成绩的有效管理,包括成绩录入、查询、统计等...

    利用servlet+jsp+javabean进行分页查询

    在Java Web开发中,"利用servlet+jsp+javabean进行分页查询"是一个常见的技术实践,主要用于处理大量数据的展示,提升用户体验并减轻服务器压力。本篇将详细讲解这个过程中的关键知识点。 首先,我们需要理解...

    使用JSP+JavaBean+Servlet实现数据分页

    总结来说,实现JSP+JavaBean+Servlet的数据分页涉及了前端展示、后端逻辑处理以及数据库操作等多个环节。理解这些环节并熟练运用,将有助于你构建高效、可维护的Web应用。在实际项目中,你还可以考虑优化如缓存策略...

    jsp,servlet,javabean个人登陆,分页显示操作

    在本项目中,我们主要探讨了Java Web开发中的三个核心组件:JSP(JavaServer Pages)、Servlet和JavaBean,以及如何结合它们实现用户登录功能和分页显示操作。此外,项目还利用了Google的验证码服务来增强安全性。 ...

    JSP+JavaBean+Servlet实现分页技术

    本项目“JSP+JavaBean+Servlet实现分页技术”利用了经典的Java Web开发模型,结合Mysql数据库、Tomcat服务器以及MyEclipse开发工具,实现了高效、灵活的分页功能。下面我们将详细探讨其中涉及的关键知识点。 1. JSP...

    JSP+JavaBean+Servlet实现分页

    文章整理: www.diybl.com 文章来源: 网络 去论坛 建我的blog 今天给同学用JSP+JavaBean+Servlet做了个分页。用的是MySQL+Tomcat+MyEclispe环境。

    jsp人事工资管理系统(jsp+javabean+servlet+mysql).zip

    员工模块使用分页技术实现展示员工信息,添加员工,删除员工,修改员工信息与查询员工等功能,部门管理使用分页技术实现显示部门信息,添加部门,删除部门,修改部门信息等功能,考勤模块使用分页技术显示员工考勤...

    servlet+jsp+javabean+mysql做的简单新闻发布系统

    【标题】"servlet+jsp+javabean+mysql做的简单新闻发布系统" 是一个基于Java Web技术构建的初级新闻发布平台。这个系统的核心是利用Servlet处理客户端请求,JSP用于展示动态内容,JavaBean作为业务逻辑层,而MySQL...

    基于Jsp+JavaBean+Servlet实现MVC模式的分页模板

    基于Jsp+JavaBean+Servlet实现MVC模式的分页模板 分页没有css,但分页功能齐全 对初学者应该有帮助 分三层编写dao层 service层 web层 数据库可以用ms server2005 或者 mysql5.0 脚本为ms2005.sql 、mysql.sql 切换...

    用jsp+javabean+servlet实现的分页

    本项目利用JSP、JavaBean和Servlet技术实现了基于MySQL数据库的分页功能。以下是对这个项目的详细解析: 1. **JSP(JavaServer Pages)**:JSP是Java的一种动态网页技术,它允许开发者将HTML代码与Java代码混合编写...

    JSP+Servlet+MySQL的真分页代码,保证一清二楚

    本项目"JSP+Servlet+MySQL的真分页代码,保证一清二楚"正是一个实现真分页功能的实例,下面我们将深入探讨这个项目所涉及的关键技术。 首先,JSP(JavaServer Pages)是Java平台上的一种动态网页技术,它允许开发者...

    jsp、mysql实现购物商城

    【JSP实现购物商城】 在Web开发中,JavaServer Pages(JSP)是一种常见的技术,用于构建动态网页。JSP允许开发者将HTML代码与Java代码相结合,以创建交互式的Web应用,比如购物商城。购物商城的实现涉及到多个关键...

Global site tag (gtag.js) - Google Analytics