1.创建工程
导入jar包
(javax.servlet\jstl\mysql\standard\servlet-api)
导入jquery类库
第一个放在web- WEB-INF的lib中,第二个放在web-js中。
2.cn.kgc.util/BaseDao、PageBean
BaseDao省略
PageBean如下:
package cn.kgc.util;
//分页(配置)的实体类 第三方的功能 类似工具包
//不是数据库的,不是动态的不用放在entity包
public class PageBean {
//分页的工具类
private Integer pageNo;//当前页
private Integer pageTotal;//总页数
private Integer countTotal;//总记录数
private Integer pageSize;//每页记录数
private Integer startRow;//起始位置
public PageBean() {}//默认调用父类的无参构造
public PageBean(Integer pageNo, Integer countTotal,Integer pageSize) {
this.pageNo = pageNo;
this.pageTotal = countTotal%pageSize==0?countTotal/pageSize:countTotal/pageSize+1;
//总页数 三目运算符 总记录数%每页记录数 取余(取模) / 除
this.countTotal = countTotal;
this.pageSize = pageSize;
this.startRow = (pageNo-1)*pageSize;
//通过三个参数就能获得五个参数 角标 0 开始
}
//省略getter和setter方法
}
3.cn.kgc.entity/User
public class User {
private Integer id;
private String name;
private String pwd;
//定义变量的getter\setter方法
//定义类的无参构造,有参构造和name、pwd的有参构造。
}
4.cn.kgc.dao/UserDao、UserDaoImpl
UserDao
package cn.kgc.dao;
import cn.kgc.entity.User;
import cn.kgc.util.PageBean;
import java.util.List;
//实现分页的uesrDao中的两个方法
public interface UserDao {
//查询列表
List<User> findAll(PageBean pageBean);
//查询记录数
Integer countTotal();
}
UserDaoImpl
package cn.kgc.dao;
import cn.kgc.entity.User;
import cn.kgc.util.BaseDao;
import cn.kgc.util.PageBean;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDaoImpl extends BaseDao implements UserDao {
@Override
public List<User> findAll(PageBean pageBean) {//查询列表
ArrayList<User> list = new ArrayList<>();
String sql = "select * from t_user limit ?,?";
Object[] params = new Object[]{pageBean.getStartRow(),pageBean.getPageSize()};
//startRow起始位置 pageSize 每页记录数
rs = super.executeQuery(sql, params);
try {
while (rs.next()){
User uu = new User(rs.getInt("id"),rs.getString("name"),rs.getString("pwd"));
list.add(uu);
}//try catch finally : ctrl + alt + t
} catch (SQLException e) {
e.printStackTrace();
} finally { super.closeAll(); }
return list;
}
@Override
public Integer countTotal() { //查询记录数
rs = super.executeQuery("select count(*) as count from t_user",null);
Integer count = 0;
try {
//只有一个值,可以不用遍历,但最好写上
while (rs.next()){
// 数据库里没有count 所以上面有
count = rs.getInt("count");
//获取结果集里的count并存储到前面的count。
}
} catch (SQLException e) {
e.printStackTrace();
}finally {super.closeAll();}
return count;
}
}
初始化: (摘录)
1.在JAVA里类中的类属性,也就是全局变量不初始化系统有默认值,
而方法里的变量必须初始化。
2.类的成员变量不管程序有没有显式的进行初始化,
Java虚拟机都会先自动给它初始化为默认值。
3.局部变量声明之后,Java虚拟机就不会自动给它初始化为默认值,
因此局部变量的使用必须先经过显式的初始化。
4.对于只负责接收一个表达式的值的局部变量可以不初始化,
参与运算和直接输出等其它情况的局部变量需要初始化。
5.cn.kgc.service/Userservice、UserserviceImpl
Userservice
package cn.kgc.service;
import cn.kgc.entity.User;
import cn.kgc.util.PageBean;
import java.util.List;
public interface UserService {
List<User> findAll(PageBean pageBean);
Integer countTotal();
}
UserserviceImpl
package cn.kgc.service;
import cn.kgc.dao.UserDao;
import cn.kgc.dao.UserDaoImpl;
import cn.kgc.entity.User;
import cn.kgc.util.PageBean;
import java.util.List;
public class UserServiceImpl implements UserService {
private UserDao userDao = new UserDaoImpl();
@Override
public List<User> findAll(PageBean pageBean) {
return userDao.findAll(pageBean);
}
@Override
public Integer countTotal() {
return userDao.countTotal();
}
}
6.cn.kgc.servlet/UserServlet (导包省略)
package cn.kgc.servlet;
public class UserServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//上面是给request对象设置UTF-8字符集,下面是给response对象设置UTF-8字符集
response.setContentType("text/html;charset=UTF-8");
//获取请求URL后?后的pageNo参数对应的value值
String pageNoStr = request.getParameter("pageNo");// String 默认值是空的
//定义默认变量pageNo,默认value为0
Integer pageNo = 0;
//如果pageNoStr不为空值(代表非首页),则将字符串类型的pageNo转换为Integer类型的pageNo
if (pageNoStr != null){
pageNo = Integer.parseInt(pageNoStr);
//否则pageNostr为空值(代表默认访问首页),则给pageNo 默认设置为 1
}else {
pageNo = 1;
}
//实例化UserServiceImpl 对象
UserService userService = new UserServiceImpl();
//调用userService对象的countTotal(),获取数据库中的记录数,返回值赋给countTotal变量
Integer countTotal = userService.countTotal();//查询记录数
//将三个参数pageNo , countTotal, pageSize组装PageBean分页工具类
PageBean pageBean = new PageBean(pageNo, countTotal, 5);//pageNo当前页 countTotal总记录数 pageSize每页记录数
// 调用userService对象的findA11查询列表方法,获取列表内容
List<User> list = userService.findAll(pageBean);//查询列表
//将list列表内容绑定到request请求域中
request.setAttribute("list",list);
System.out.println("list.size:"+list.size());
//分布迭代数据 后端没问题再写前端 ==》list.size:5
// 将pageBean对象绑定到request请求域中
request.setAttribute("pageBean",pageBean);
//转发到list.jsp页面中
request.getRequestDispatcher("index.jsp").forward(request,response);
}
}
7.配置xml
省略
8.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Title</title>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
function firstPage(num) {
$("[name=pageNo]").val(num);
$("form").submit();
}
function prevPage(num) {
if(num<=1){
alert("当前已经是第一页");
}else{
num--;
$("[name=pageNo]").val(num);
$("form").submit();
}
}
function nextPage(num) { //传入参数
//获取隐藏域中的总页数
var pageTotal = $("[name=pageTotal]").val();
//判断如果当前页num大于等于总页数,则弹出“前页已是最后一页”
if(num>=pageTotal){
alert("当前也已是最后一页");
}else {
//否则如果当前页num小于总页数,则需要将当前页数量加1
num++;
//给隐藏域中的当前页更新当前页的最新值
$("[name=pageNo]").val(num);
//提交form表单
$("form").submit();
}
}
function lastPage(num) {
$("[name=pageNo]").val(num);
$("form").submit();
}
</script>
</head>
<body>
<form action="UserServlet" method="post"><%-- action是空的--%>
<table border="1px solid" >
<tr>
<td>用户编码</td>
<td>用户名称</td>
<td>用户密码</td>
</tr>
<c:forEach var="user" items="${list}"><!-- JSTL需导包啊 -->
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.pwd}</td>
</tr>
</c:forEach>
</table>
<div>
<%-- 当前页:--%><input type="hidden" name="pageNo" value="${pageBean.pageNo}" />
<%-- 总页数:--%><input type="hidden" name="pageTotal" value="${pageBean.pageTotal}" /><br/>
<%-- 上面两个起辅助作用,到时首候隐藏--%>
<a href="javascript:void(0);" onclick="firstPage(1)">首页</a>
<a href="#" onclick="prevPage(${pageBean.pageNo})">上一页</a>
<a href="#" onclick="nextPage(${pageBean.pageNo})">下一页</a>
<a href="javascript:void(0);" onclick="lastPage(${pageBean.pageTotal})">末页</a>
</div>
</form>
</body>
</html>
javascript:void(0); (摘录)
javascript:void(0); 这个链接不做跳转动作
Javascript中void是一个操作符,该操作符指定要计算一个表达式
但是不返回值。
当用户链接时,void(0) 计算为 0,但 Javascript 上没有任何效果。
a href=#与 a href=javascript:void(0) 的区别:
#包含了一个位置信息 默认的锚是#top 也就是网页的上端
而javascript:void(0) 仅仅表示一个死链接
这就是为什么有的时候页面很长浏览链接明明是# 然而跳动到了页首
而javascript:void(0) 则不是如此所以调用脚本的时候最好用void(0)
在使用void(0)之前,最好先想一想,
这个页面是否需要整体刷新 Ajax用void(0)比较多
href="#"这种形式会整体刷新页面,而 href=“javascript:void(0)” 则不会
结果:
http://localhost:8080/UserServlet
----2021.10.30&11.02