`
paction520
  • 浏览: 3440 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jsp分页

    博客分类:
  • J2EE
阅读更多

接触J2EE 也有一段时间了,想用jsp + servlet + javabean + jdbc 做一个分页例子,在网上找了一下,想参考一下别人做的思路,可能这个太简单了,没找到理想的代码,大部分都是转发别人的代码的网站,也许已经有了现成的组件了。今天好像学了 jstl 标签库,决定把它用上了,但对于初学者来说,必须一步一步来的,急不来!!

好吧,今天决定做一个完整的分页例子来玩玩顺便分享一下,学习编程没有成就感是不行的,毕竟学习与工作是不同的。不过,我还是刚过20岁的学生,菜鸟一个。希望前辈们不要见笑哦!

操作系统:window xp
开发语言:jsp + html
开发工具:MyEclipse 6.0
服务器:Tomcat 6.0
数据库:SQL server 2005
示例数据库:SQL server 2000 里的 pubs

 

效果图:



 

 

/**
 * 
 * 分页类
 * 
 */
public class PageBean {
	// 定义每页显示的记录数
	private int pagesize = 10;
	// 定义当前页数
	private int currentPage;
	// 定义总记录数
	private int rowCount;
	// 定义总页数
	private int pageCount;
	// 当前页面的数据
	private ArrayList data = new ArrayList();

	public int getPagesize() {
		return pagesize;
	}

	public void setPagesize(int pagesize) {
		this.pagesize = pagesize;
	}

	public int getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}

	public int getRowCount() {
		return rowCount;
	}

	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}

	public int getPageCount() {
		return rowCount % pagesize == 0 ? rowCount / pagesize : rowCount
				/ pagesize + 1;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public ArrayList getData() {
		return data;
	}

	public void setData(ArrayList data) {
		this.data = data;
	}

}

 

/**
 * 数据类
 * 
 */
public class Title {
	private String titleid;
	private String title;
	private String type;
	private String pubid;
	private float price;

	public String getTitleid() {
		return titleid;
	}

	public void setTitleid(String titleid) {
		this.titleid = titleid;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getPubid() {
		return pubid;
	}

	public void setPubid(String pubid) {
		this.pubid = pubid;
	}

	public float getPrice() {
		return price;
	}

	public void setPrice(float price) {
		this.price = price;
	}

}

 

/**
 * 数据库连接类
 */
public class DbConn {

	/**
	 * 通过建数据源连接数据库方法
	 * 
	 * @return Connection
	 */
	public Connection getConn() {
		Connection conn = null;

		try {
			// 加载驱动 jdbc-odbc
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			// 获得连接 abc 是配置的数据源的名称
			conn = DriverManager.getConnection("jdbc:odbc:abc");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {

		}
		return conn;
	}

	/**
	 * 通过Jar包连接数据库
	 * 
	 * @return Connection
	 */
	public Connection getConnByJar() {
		Connection conn = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection(
					"jdbc:sqlserver://localhost:1433;databasename=pubs", "sa",
					"sa2005");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
}

 

/**
 * 数据库操作类
 */
public class DbOper {
	private Connection conn = null;
	private Statement stat = null;
	private PreparedStatement pstat = null;
	private ResultSet rs = null;
	ArrayList al = new ArrayList();
	DbConn db = new DbConn();

	/**
	 * 按照传过来的页数查询数据
	 * 
	 * @param currentPage
	 * @return PageBean
	 */
	public PageBean selectByPage(int currentPage) {
		PageBean pb = new PageBean();
		conn = db.getConnByJar();
		int pageSize = pb.getPagesize();
		String sql = "select count(*) from tab1";
		int rowCount = 0;
		try {
			pstat = conn.prepareStatement(sql);
			rs = pstat.executeQuery();
			if (rs.next()) {
				// 总记录数
				rowCount = rs.getInt(1);
				pb.setRowCount(rowCount);
			}
			// 当前页面数据
			String sql2 = "select top "
					+ pageSize
					+ " title_id,title,type,pub_id,price from tab1 where"
					+ " title_id not in (select top "
					+ +(currentPage - 1)
					* pageSize
					+ " title_id from tab1 order by title_id) order by title_id";
			pstat = conn.prepareStatement(sql2);
			rs = pstat.executeQuery();
			while (rs.next()) {
				Title t = new Title();
				t.setTitleid(rs.getString(1));
				t.setTitle(rs.getString(2));
				t.setType(rs.getString(3));
				t.setPubid(rs.getString(4));
				t.setPrice(rs.getFloat(5));

				pb.getData().add(t);
				pb.setCurrentPage(currentPage);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if (rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (pstat != null) {
				try {
					pstat.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (conn != null) {
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		return pb;
	}

}

 

/**模块功能:
 *
 * 1、获取表单数据
 * 2、创建操作类对象
 * 3、通过调用操作类对象方法,得到 PageBean 对象
 * 4、把分页类对象设置到 session 范围
 * 5、重定向页面
 */
public class QueryServlet extends HttpServlet {
	
	/**
	 * 处理 Post 的 URL 请求 
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
		// 获取当前页数
		int currentPage = request.getParameter("currentPage") == null ? 1 : Integer
				.parseInt(request.getParameter("currentPage"));
		DbOper oper = new DbOper();
		PageBean pb = null;
		// 查询 
		pb = oper.selectByPage(currentPage);
		// 将 PageBean 对象设置到 Session 范围
		request.getSession().setAttribute("pb", pb);
		// 重定向页面到 index.jsp
		request.getRequestDispatcher("index.jsp").forward(request, response);
	}
	
	/**
	 * 处理 Post 的 URL 请求 
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException,IOException {
		/* 重定向到 Post 请求处理方法 */
		this.doPost(request, response);
	}
}

 

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
  <body>
  	<h1>jsp + servlet + jdbc + jstl 分页例子</h1>
  	<form action="query.do" name="frm" method="post" >
    <table border="1">
    	<tr>
    		<th>编号</th>
    		<th>名称</th>
    		<th>类型</th>
    		<th>出版商ID</th>
    		<th>单价</th>
    	</tr>
    	<c:choose>
    		<c:when test="${empty pb}">
    			<%-- 如果 pb 对象为空不作任何处理--%>
    		</c:when>
    		<c:otherwise>
    			<c:forEach items="${pb.data}" var="t">
    				<tr>
		    			<td>${t.titleid }</td>
		    			<td>${t.title }</td>
		    			<td>${t.type }</td>
		    			<td>${t.pubid }</td>
		    			<td>${t.price }</td>
		    		</tr>
    			</c:forEach>
    		</c:otherwise>
    	</c:choose>
    </table>
    <%-- 添加分页控制 begin --%>
    <c:choose>
    		<c:when test="${pb.currentPage <= 1}">
    			首页 上一页
    		</c:when>
    		<c:otherwise>
    			<a href="javascript:gopage(1)">首页</a>
    			<a href="javascript:gopage(${pb.currentPage-1 })">上一页</a>
    		</c:otherwise>
    </c:choose>
    
    <%-- 添加分页数字 --%>
	<c:forEach var="i" begin="1" end="${pb.pageCount}" step="1" varStatus="s">
		<c:choose>
			<c:when test="${pb.currentPage == s.index}">
				${s.index }
			</c:when>
			<c:otherwise>
				<a href="javascript:gopage(${s.index })">${s.index }</a>
			</c:otherwise>
		</c:choose>
	</c:forEach>
	
	<c:choose>
		<c:when test="${pb.currentPage >= pb.pageCount}">
		下一页 末页
		</c:when>
		<c:otherwise>
			<a href = "javascript:gopage(${pb.currentPage+1 })">下一页</a>
			<a href = "javascript:gopage(${pb.pageCount })">末页</a>
		</c:otherwise>			
	</c:choose>
    <%-- 添加分页控制 end --%>
    </form>
    
    <form action="" name="frm2" method="post">
    	<input type="hidden" name="currentPage">
    </form>   
  </body>
</html>

<script type="text/javascript">
	// 利用js间接提交表单
	function gopage( x ) {
		// 给表单frm1的隐藏域currentPage的值赋为当前页数
		document.frm2.currentPage.value = x
		document.frm2.action = "query.do";
		document.frm2.submit();
	}
</script>

 

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<html>
  <body>
  <center>
    <form action="query.do" method="post">
    	<input type="submit" value="查询数据">
    </form>
  </center>
  </body>
</html>

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>query.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
  	<servlet-name>QueryServlet</servlet-name>
  	<servlet-class>cn.pa.servlet.QueryServlet</servlet-class>	
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>QueryServlet</servlet-name>
  	<url-pattern>/query.do</url-pattern>
  </servlet-mapping>
  
</web-app>

 

 

 

今天做了两个版本:一个是 jsp + servlet + javabean + jdbc; 另一个是 jsp + servlet + javabean + jdbc + jstl

其实学习到 jstl 标签库,我已经经过一个系统学习过程了,
a:什么功能都写在同一个jsp页面;
b:jsp显示页面到jsp功能页面;
c:学习了javabean,也就是以前学习的实体类;
d:学习了servlet,把控制代码都放到 servlet
e:学习了 jstl 标签库,可以完全代码<% … %>真正实现显示页面与功能的分开
 也就是 MVC 模式了。

到目前为止都是基础,也就是玩玩罢了,学习的重点是框架,不过学习框架必须要把基础学好。

这两种分页的例子我已经用工程的形式做好了,如有需要可以下载了

  • 大小: 15 KB
1
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics