使用工具:MyEclipse、Tomcat
效果展示如下:
主要思路:
1、页面信息获取
页面信息获取主要是与数据库交互,得到页面信息,使用不同的连接数据库的方式,方法也不太相同,要从数据库得到student表中数据stuList,及student表的数据量stuSize这里使用mybatis空架的jdbc连接方式。
项目目录结构如下:
目录结构介绍:controller:页面功能的实现servlet,主要功能有首页信息获取、上一页、下一页、页面跳转;
entity:实体类
mapper:功能接口、xml文件
service:功能接口、功能实现
db:数据库信息
SqlMapConfigure.xml:mybatis主配置文件
所需包:
下面是实现部分:
SqlMapConfigure.xml 主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db/jdbc.properties"></properties>
<!-- 批量起别名,默认别名为类名,首字母大小写都可以 -->
<typeAliases>
<package name="cn.it.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED"> <!-- 使用连接池 -->
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.it.mapper"/>
</mappers>
</configuration>
jdbc.properties 数据库配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/spring
jdbc.username=root
jdbc.password=123456
Student.java
package cn.it.entity;
public class Student {
private int sid;
private String name;
private int age;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + ", sid=" + sid + "]";
}
}
StudentMapper.java
package cn.it.mapper;
import java.util.List;
import java.util.Map;
import cn.it.entity.Student;
public interface StudentMapper {
//分页查询(这里map的入参为num,offset,num为起始位置,offset为从起始位置的偏移量
//因为mybatis的入参只能有一个,这里通过map集合键值对传入)
public List<Student> selectStudentForPage(Map<String, Integer> map)throws Exception;
//查询数据令
public int selectTableSize()throws Exception;
}
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.it.mapper.StudentMapper">
<!-- 分页查询 -->
<resultMap type="Student" id="StudentMap">
<id column="s_id" property="sid"/>
<result column="s_name" property="name"/>
<result column="s_age" property="age"/>
</resultMap>
<select id="selectStudentForPage" parameterType="java.util.Map" resultMap="StudentMap">
select * from student limit #{num},#{offset}
</select>
<!-- 分页数据量查询 -->
<select id="selectTableSize" resultType="java.lang.Integer">
select count(*) from student
</select>
</mapper>
StudentService .java
package cn.it.service;
import java.util.List;
import cn.it.entity.Student;
public interface StudentService {
//分页查询
public List<Student> quaryStudentForPage(int num, int offset)throws Exception;
//数据量查询
public int quaryTableSize()throws Exception;
}
StudentServiceImpl.java
package cn.it.service;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.it.entity.Student;
import cn.it.mapper.StudentMapper;
public class StudentServiceImpl implements StudentService {
private static SqlSessionFactory sessionFactory;
static{
String resource = "SqlMapConfigure.xml";
InputStream is = null;
try {
is = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sessionFactory = new SqlSessionFactoryBuilder().build(is);
}
//分页查询
public List<Student> quaryStudentForPage(int num, int offset)
throws Exception {
SqlSession session = sessionFactory.openSession();
StudentMapper studentMapper = session.getMapper(cn.it.mapper.StudentMapper.class);
//入参封装``
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("num", num);
map.put("offset", offset);
List<Student> stuList = studentMapper.selectStudentForPage(map);
session.commit();
session.close();
return stuList;
}
//数据量查询
public int quaryTableSize() throws Exception {
SqlSession session = sessionFactory.openSession();
StudentMapper studentMapper = session.getMapper(cn.it.mapper.StudentMapper.class);
int size = studentMapper.selectTableSize();
session.commit();
session.close();
return size;
}
}
index.jsp
<body>
<form action="QuaryInfoServlet" method="get">
<input type="submit" value="查询">
</form>
</body>
index.jsp主要是个页面跳转功能
QuaryInfoServlet .java 分页信息设置,及首页信息获取
package cn.it.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;
public class QuaryInfoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*设置分页信息*/
int num = 0;
int offset = 3;//设置一页有几个数据
int pageNum = 1;
int stuNum = 0;
/*获取学生数量*/
StudentService studentService = new StudentServiceImpl();
try {
stuNum = studentService.quaryTableSize();
} catch (Exception e) {
e.printStackTrace();
}
/*总页码*/
int totalPage = 0;
if((stuNum / offset)*offset < stuNum){
totalPage = stuNum / offset + 1;
}else {
totalPage = stuNum /offset ;
}
/*信息存储*/
ServletContext sc = getServletContext();
sc.setAttribute("num", num);
sc.setAttribute("offset", offset);
sc.setAttribute("pageNum", pageNum);
sc.setAttribute("stuNum", stuNum);
sc.setAttribute("totalPage", totalPage);
/*页面信息获取*/
/*只有一页*/
List<Student> stuList = null;
if (stuNum <= offset) {
try {
stuList = studentService.quaryStudentForPage(num, offset);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("stuList",stuList);
request.setAttribute("previousValue", "首页");
request.setAttribute("nextValue", "最后一页");
request.setAttribute("pageNum", pageNum);
//使按键不能点击
request.setAttribute("prevDisabled", "disabled");
request.setAttribute("nextDisabled", "disabled");
//信息推到信息显示页面
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
}else{
try {
stuList = studentService.quaryStudentForPage(num, offset);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("stuList",stuList);
request.setAttribute("previousValue", "首页");
request.setAttribute("nextValue", "下一页");
request.setAttribute("pageNum", pageNum);
request.setAttribute("prevDisabled", "disabled");
request.setAttribute("nextDisabled", "");
//信息推到信息显示页面
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
pageInfo.jsp 简单的页面样式设计,及功能按键
<%@ page language="java" import="java.util.*,cn.it.entity.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'pageInfo.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style type="text/css">
.h1{
position: absolute;
left: 43%;
top: 15%;
}
#tableDiv{
position: absolute;
left: 30%;
top: 30%;
width: 400px;
height: 200px;
}
#tableDiv td{
text-align:center;
font-size:15px;
padding:10px;
}
#inputBox{
width:65px;
height:25px;
margin-left: 100px;
text-align: center;
line-height: 25px;
}
.in1{
margin-left: 30px;
text-align: center;
line-height: 25px;
}
.in2{
margin-left: 60px;
width:40px;
height:25px;
}
#pageTable{
border: none;
}
</style>
</head>
<%
List<Student> stuList = (List<Student>)request.getAttribute("stuList");
String previousValue = (String)request.getAttribute("previousValue");
String nextValue = (String)request.getAttribute("nextValue");
Integer pageNum = (Integer)request.getAttribute("pageNum");
String prevDisabled = (String)request.getAttribute("prevDisabled");
String nextDisabled = (String)request.getAttribute("nextDisabled");
ServletContext sc = getServletContext();
Integer totalPage = (Integer) sc.getAttribute("totalPage");
%>
<body>
<h1 class="h1">学生信息列表</h1>
<div id="tableDiv">
<table border="2" cellspacing="0" width="500px">
<tr>
<th>学生编号</th>
<th>学生名字</th>
<th>学生年龄</th>
</tr>
<% for(int i = 0; i < stuList.size(); i ++){%>
<tr>
<td><%=stuList.get(i).getSid() %></td>
<td><%=stuList.get(i).getName() %></td>
<td><%=stuList.get(i).getAge() %></td>
</tr>
<% }%>
</table>
<table id="pageTable">
<tr>
<td>
<form action="StudentPrevPageServlet" method="get">
<input type="submit" class="in1" value="<%=previousValue %>" <%=prevDisabled %>/>
</form>
</td>
<td>
<form action="JumpPageServlet" method="get">
<input id="inputBox" type="text" class="in1" value="第<%=pageNum %>页/<%=totalPage %>页" readonly="readonly">
<br>
<input type="text" class="in2" name="JumpNumText"><label>页</label>
<input type="submit" value="跳转"/>
</form>
</td>
<td>
<form action="StudentNextPageServlet" method="get">
<input type="submit" class="in1" value="<%=nextValue %> " <%=nextDisabled%>/>
</form>
</td>
</tr>
</table>
</div>
</body>
</html>
StudentPrevPageServlet .java 上一页信息获取
package cn.it.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;
public class StudentPrevPageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletContext sc = getServletContext();
StudentService studentService = new StudentServiceImpl();
Integer offset = (Integer) sc.getAttribute("offset");
Integer num = (Integer) sc.getAttribute("num");
Integer pageNum = (Integer) sc.getAttribute("pageNum");
List<Student> stuList = null;
if (pageNum == 1) {
/*刷新到首页*/
response.setHeader("refresh", "0;url='QuaryInfoServlet'");
}else if (pageNum == 2) {
/*分页首页信息*/
try {
stuList = studentService.quaryStudentForPage(num - offset, offset);
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "首页");
request.setAttribute("nextValue", "下一页");
request.setAttribute("pageNum", pageNum - 1);
request.setAttribute("prevDisabled", "disabled");
request.setAttribute("nextDisabled", "");
/*再次点击只能点击下一页*/
sc.setAttribute("num", num);
sc.setAttribute("pageNum", pageNum - 1);
/*页面跳转*/
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}else {
try {
num = num - offset;
stuList = studentService.quaryStudentForPage(num, offset);
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "上一页");
request.setAttribute("nextValue", "下一页");
request.setAttribute("prevDisabled", "");
request.setAttribute("nextDisabled", "");
request.setAttribute("pageNum", pageNum - 1);
sc.setAttribute("num", num);
sc.setAttribute("pageNum", pageNum - 1);
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
StudentNextPageServlet .java 下一页功能实现
package cn.it.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;
public class StudentNextPageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletContext sc = getServletContext();
Integer offset = (Integer) sc.getAttribute("offset");
Integer num = (Integer) sc.getAttribute("num");
Integer pageNum = (Integer) sc.getAttribute("pageNum");
/*获取总页码*/
Integer totalPage = (Integer) sc.getAttribute("totalPage");
List<Student> stuList = null;
StudentService studentService = new StudentServiceImpl();
/*最后一页*/
if (pageNum == totalPage -1) {
num = (totalPage - 1) * offset;
try {
stuList = studentService.quaryStudentForPage(num, offset);
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "上一页");
request.setAttribute("nextValue", "最后一页");
request.setAttribute("prevDisabled", "");
request.setAttribute("nextDisabled", "disabled");
request.setAttribute("pageNum", totalPage);
/*再次点击只能点击上一页*/
sc.setAttribute("pageNum", totalPage);
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}else {
try {//其他页
num = num + offset;
stuList = studentService.quaryStudentForPage(num, offset);
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "上一页");
request.setAttribute("nextValue", "下一页");
request.setAttribute("prevDisabled", "");
request.setAttribute("nextDisabled", "");
request.setAttribute("pageNum", pageNum + 1);
sc.setAttribute("pageNum", pageNum + 1);
sc.setAttribute("num", num);
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
JumpPageServlet.java 页面跳转功能实现
package cn.it.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.it.entity.Student;
import cn.it.service.StudentService;
import cn.it.service.StudentServiceImpl;
public class JumpPageServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletContext sc = getServletContext();
/*获取总页码*/
int totalPage = (Integer) sc.getAttribute("totalPage");
/*获取跳转页码*/
int JumpNum = Integer.valueOf(request.getParameter("JumpNumText"));
List<Student> stuList = null;
StudentService studentService = new StudentServiceImpl();
if (JumpNum == 1) {
/*刷新到首页*/
response.setHeader("refresh", "0;url='QuaryInfoServlet'");
}else if (JumpNum > 1 && JumpNum < totalPage) {//中间页
int offset=(Integer) sc.getAttribute("offset");
int num = (JumpNum - 1) * offset;
try {
stuList = studentService.quaryStudentForPage(num, offset);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "上一页");
request.setAttribute("nextValue", "下一页");
request.setAttribute("prevDisabled", "");
request.setAttribute("nextDisabled", "");
request.setAttribute("pageNum", JumpNum);
sc.setAttribute("pageNum", JumpNum);
sc.setAttribute("num", num);
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
}else if (totalPage == JumpNum) { //最后一页
int offset=(Integer) sc.getAttribute("offset");
int num = (totalPage - 1) * offset;
try {
stuList = studentService.quaryStudentForPage(num, offset);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute("stuList", stuList);
request.setAttribute("previousValue", "上一页");
request.setAttribute("nextValue", "最后一页");
request.setAttribute("prevDisabled", "");
request.setAttribute("nextDisabled", "disabled");
request.setAttribute("pageNum", JumpNum);
/*再次点击只能点击上一页*/
sc.setAttribute("pageNum", JumpNum);
sc.setAttribute("num", num);
request.getRequestDispatcher("pageInfo.jsp").forward(request, response);
}else {
/*刷新到首页 非法输入操作,也可以用弹窗提示替代 */
response.setHeader("refresh", "0;url='QuaryInfoServlet'");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
这是分页查询的简单功能实现,当然也可有进行功能增强,如查询多表的分页、再表中加入超链接,点击查询详细信息等
源码:源码链接
提取码:jge5