简单但功能齐全的网络分页技术

1、首先创建main.jsp,进行框架划分。由于在HTML5标准中已经抛弃了<frameset><frame/></frameset>这一框架,因此使用<div><iframe></iframe></div>来代替,进行模块划分。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<div >
		<iframe src="condition.jsp" style="width:500px; height:60px;"></iframe>
	</div>
	<div >
		<iframe src="show.jsp" name="show456" style="width:500px; height:500px;"></iframe>
	</div>
</body>
</html>

2、按照main.jsp中连接的两个JSP页面,分别创建cindition.jsp页面和show.jsp页面。
condition.jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
	
</head>
<body>
	<form action="doFind" method="post" target="show456" >
		<input type="submit" value="查询"/>
	</form>
	
</body>
</html>

show.jsp页面:

<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
	<%
		Object obj = request.getAttribute("mylist");
		Object obj2 = request.getAttribute("mypage");
		Object obj3 = request.getAttribute("columnNum");
		Object obj4 = request.getAttribute("pageLine");
		ArrayList<Map<String,String>> list = (ArrayList)obj;
		int mypage = Integer.parseInt(obj2.toString());
		int columnNum = Integer.parseInt(obj3.toString());
		int perPageLine = Integer.parseInt(obj4.toString());
		//response.sendRedirect("condition.jsp?mypage="+mypage);
		int next = mypage + 1;
		int privous = mypage - 1;
		int lastPage = (columnNum % perPageLine == 0) ? (columnNum / perPageLine) : (columnNum / perPageLine + 1);
	%>
	<script type="text/javascript">
	function changePage(num){
		//alert(num);
		window.location.href = "doFind?mycurpage="+num;
	}
	</script>
</head>
<body>
这里是显示数据的页面。。。
<%  
	for(Map<String,String> map : list){
	%>
	<div>
		<div style="float:left;width:100px;height:35px;backgroound-color:yellow;"><%=map.get("code") %></div>
		<div style="float:left;width:100px;height:35px;backgroound-color:blue;"><%=map.get("name") %></div>
		<div style="float:left;width:100px;height:35px;backgroound-color:yellow;"><%=map.get("age") %></div>
		<div style="float:left;width:100px;height:35px;backgroound-color:blue;"><%=map.get("sex") %></div>
	</div>
	<%
	}
%>
<div>
	
	<input type="button" value="首页"  onclick="changePage(<%=2%>)"/>
	<%if(privous >= 1){ %>
	<input type="button" value="上一页" onclick="changePage(<%=privous%>)"/>
	<%}else{ %>
	<input type="button" value="上一页" style="background-color:gray;"/>
	<%} %>
	<div style="float:left;" onclick="changePage(<%=mypage-1 %>)">[<%=mypage-1 %>]</div>
	<div style="float:left;">[<%=mypage %>]</div>
	<div style="float:left;">[<%=mypage+1 %>]</div>
	<%if(next <= lastPage){
	%>
	<input type="button" value="下一页" onclick="changePage(<%=next %>)"/>
	<%
	} else{%>
	<input type="button" value="下一页" style="background-color:gray;"/>
	<%} %>
	<input type="button" value="尾页" onclick="changePage(<%=lastPage %>)" />
</div>
</body>
</html>

上述就是整个的前端页面,下面就是后台处理了。
3、下面来说说手台的处理。在进行后台编写的时候,数据库返回的结果集的序号是从1开始的,因此再取出数据的时候需要从1开始取出,否则会报空指针异常的错误。
后端:

package com.hzyc.lesson6js.Servlet;

import java.util.ArrayList;
import java.util.Map;


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


import com.hzyc.lesson6js.tools.JDBCTools;

public class FindServlet extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	final static int  perPageLine = 15;
	
	public void doGet(HttpServletRequest request,HttpServletResponse response) {
	try {
		String pagestr = request.getParameter("mycurpage");
		System.out.println(pagestr);
		int curPage = Integer.parseInt(pagestr);
		//int perPageLine = 8;
		System.out.println("do post method ...");
		JDBCTools jdbc = new JDBCTools();
		String sql = "select * from student2";
		ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
		list = jdbc.find(sql,curPage,perPageLine);
		int columnNum = jdbc.getRowCount(sql,curPage,perPageLine);
		System.out.println(columnNum);
		request.setAttribute("pageLine", perPageLine);
		request.setAttribute("columnNum", columnNum);
		request.setAttribute("mypage", curPage);
		request.setAttribute("mylist", list); 
		request.getRequestDispatcher("show.jsp").forward(request, response);
	} catch (Exception e) {
		e.printStackTrace();
	}
		
	}
	protected void doPost(HttpServletRequest request,HttpServletResponse response) {
		try {
			//page用来表示页面数
			int curPage = 1;
			//int perPageLine = 8;
			System.out.println("do post method ...");
			JDBCTools jdbc = new JDBCTools();
			String sql = "select * from student2";
			ArrayList<Map<String, String>> list = new ArrayList<Map<String,String>>();
			list = jdbc.find(sql,curPage,perPageLine);
			
			int columnNum = jdbc.getRowCount(sql,curPage,perPageLine);
			System.out.println(columnNum);
			request.setAttribute("pageLine", perPageLine);
			request.setAttribute("columnNum", columnNum);
			request.setAttribute("mypage", curPage);
			request.setAttribute("mylist", list); 
			request.getRequestDispatcher("show.jsp").forward(request, response);
			
			//request.getRequestDispatcher("condition.jsp").forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

4、然后就是数据库连接处理工具,不在啰嗦,直接看代码:

package com.hzyc.lesson6js.tools;
/*
 * JDBC工具
 * 	提供基本的增删改查工具
 * */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class JDBCTools {
	private Connection conn;
	private Statement stmt;
	private ResultSet rs;
	private String url = "jdbc:mysql://localhost:3308/testdb";
	/*连接数据库(加载驱动,获取连接,创建语句对象)*/
	private void connect() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(url,"root","mysql");
			stmt = conn.createStatement();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public int getRowCount(String sql,int curPage,int perPageLine) {
		connect();
		String sqlTop = "select count(1) as cnt from (" + sql + ") as cu";
		//ArrayList<Map<String,String>> list = new ArrayList<Map<String,String>>();
		String columnNum = null;
		int num = 0;
		try {
			rs = stmt.executeQuery(sqlTop);
			while(rs.next()) {
				ResultSetMetaData rsmd = rs.getMetaData();
				String columnName = rsmd.getColumnName(1);
				columnNum = rs.getString(columnName);
				num = Integer.parseInt(columnNum);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			close();
		}
		
		return num;
	
	}
	
	
	
	public ArrayList<Map<String,String>> find(String sql,int curPage,int perPageLine) {
		
		String finalSql = sql + " limit " + (curPage - 1 ) * perPageLine + "," + perPageLine;
		
		ArrayList<Map<String, String>> rslist = new ArrayList<Map<String,String>>();
		try {
			connect();
			rs = stmt.executeQuery(finalSql);
			ResultSetMetaData rsmd = rs.getMetaData(); 
			while(rs.next()) {
				//rs每next一次。表示获取一次结果集的一行记录
				//需要创建一个map类存储本条记录
				Map<String, String> rsMap = new HashMap<String,String>();
				for(int i = 1; i <= rsmd.getColumnCount(); i++) {
					rsMap.put(rsmd.getColumnName(i), rs.getString(rsmd.getColumnName(i)));
				}
				//把创建好秉勋出了一条记录的Map存储在list中
				rslist.add(rsMap);
				}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			close();
		}
		return rslist;
	}
	
	public int update(String sql) {
		int num = 0;
		connect();
		try {
			num = stmt.executeUpdate(sql);
		} catch (Exception e) {
			
		}finally {
			close();
		}
		return num;
	}
	
	
	/*关闭(释放语句对象,释放语句载体,释放连接)*/
	private void close() {
		try {
			if(rs != null) {
				rs.close();
			}
			if( conn != null) {
				conn.close();
			}
			if(stmt != null) {
				stmt.close();
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
			
		
	}
	public static void main(String[] args) {
		JDBCTools jdbc = new JDBCTools();
		String sql = "select * from student2";
		System.out.println(jdbc.getRowCount(sql, 3, 10));
	}

}

数据库结果集在取出数据的时候,需要不断地next()进行数据的取出,以为数据库结果集的指针是指向第一行数据的,也就是数据库头、列名称的一行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值