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()进行数据的取出,以为数据库结果集的指针是指向第一行数据的,也就是数据库头、列名称的一行。