目录
11.2 servlet :FindUserByPageServlet
列:使用jstl实现crud、登录、分页、分页模糊查询
1 创建web项目并导包

2 创建数据库
CREATE DATABASE day17; -- 创建数据库
USE day17;
CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20) NOT NULL,
gender VARCHAR(20),
age INT,
address VARCHAR(32),
qq VARCHAR(20),
email VARCHAR(50),
username VARCHAR(20),
PASSWORD VARCHAR(20)
)CHARACTER SET utf8;
INSERT INTO USER VALUES(NULL,'老王','女',55,'广西','15624662','222@qq.com',NULL,NULL);
SELECT COUNT(*) FROM USER
SELECT COUNT(*) FROM USER WHERE 1=1

3 数据库配置文件与工具类
druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day17?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username=root
password=123
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000
cn.lws.demo.util.JDBCUtils
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();//1.加载配置文件
InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");//使用ClassLoader加载配置文件,获取字节输入流
properties.load(inputStream);
dataSource = DruidDataSourceFactory.createDataSource(properties);//2.初始化连接池对象
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接池对象
*/
public static DataSource getDataSource(){
return dataSource;
}
/**
* 获取连接Connection对象
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
4 用户名密码登录
4.1 CheckCodeServlet 验证码
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
//服务器通知浏览器不要缓存
response.setHeader("pragma","no-cache");
response.setHeader("cache-control","no-cache");
response.setHeader("expires","0");
//在内存中创建一个长80,宽30的图片,默认黑色背景
//参数一:长
//参数二:宽
//参数三:颜色
int width = 80;
int height = 30;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
//获取画笔
Graphics g = image.getGraphics();
//设置画笔颜色为灰色
g.setColor(Color.GRAY);
//填充图片
g.fillRect(0,0, width,height);
//产生4个随机验证码,12Ey
String checkCode = getCheckCode();
//将验证码放入HttpSession中
request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
//设置画笔颜色为黄色
g.setColor(Color.YELLOW);
//设置字体的小大
g.setFont(new Font("黑体",Font.BOLD,24));
//向图片上写入验证码
g.drawString(checkCode,15,25);
//将内存中的图片输出到浏览器
//参数一:图片对象
//参数二:图片的格式,如PNG,JPG,GIF
//参数三:图片输出到哪里去
ImageIO.write(image,"PNG",response.getOutputStream());
}
/**
* 产生4位随机字符串
*/
private String getCheckCode() {
String base = "0123456789ABCDEFGabcdefg";
int size = base.length();
Random r = new Random();
StringBuffer sb = new StringBuffer();
for(int i=1;i<=4;i++){
//产生0到size-1的随机值
int index = r.nextInt(size);
//在base字符串中获取下标为index的字符
char c = base.charAt(index);
//将c放入到StringBuffer中去
sb.append(c);
}
return sb.toString();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
}
}
4.2 LoginServlet登录
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//1 设置编码
String verifycode = req.getParameter("verifycode");//2 获取用户填写的验证码
HttpSession session = req.getSession();
String checkcode_server = (String)session.getAttribute("CHECKCODE_SERVER");
if(!checkcode_server.equalsIgnoreCase(verifycode)){
//验证码不正确
req.setAttribute("login_msg","你输入的验证码不正确");
req.getRequestDispatcher("/login.jsp").forward(req,resp);//重定向
return;
}
Map<String, String[]> map = req.getParameterMap();
//封装User对象
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService service=new UserServiceImpl();
User loginUser=service.login(user);
System.out.println(loginUser+"------------------");
//判断是否登录成功
if(loginUser!=null){
//登录成功
session.setAttribute("user",user);
resp.sendRedirect(req.getContextPath()+"/index.jsp");//跳转
}else {
req.setAttribute("login_msg","用户名或密码不正确");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
4.3 UserServiceImpl
@Override
public User login(User user) {
return dao.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());
}
4.4 UserDaoImpl
public class UserDaoImpl implements UserDao{
private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<User> findAll() {
String sql="select * from user";
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
return users;
}
4.5 login.jsp
<div class="container" style="width: 400px;">
<h3 style="text-align: center;">管理员登录</h3>
<form action="${pageContext.request.contextPath}/loginServlet" method="post">
<div class="form-group">
<label for="user">用户名:</label>
<input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
</div>
<div class="form-inline">
<label for="vcode">验证码:</label>
<input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
<a href="javascript:refreshCode()">
<img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a>
</div>
<hr/>
<div class="form-group" style="text-align: center;">
<input class="btn btn btn-primary" type="submit" value="登录">
</div>
</form>
<!-- 出错显示的信息框 -->
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" >
<span>×</span></button>
<strong>${login_msg}</strong>
</div>
</div>
结果:
5 列表查询
5.1 FindUserServlet
@WebServlet("/findUserServlet") public class FindUserServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); //1.获取id UserService service=new UserServiceImpl(); User user=service.findUserById(id);//2.调用Service查询 System.out.println(user+"--------------"); req.setAttribute("user",user); //3.将user存入request req.getRequestDispatcher("/update.jsp").forward(req,resp);//4.转发到update.jsp }5.2 UserServiceImpl
public class UserServiceImpl implements UserService{ private UserDao dao=new UserDaoImpl(); @Override public List<User> findAll() { return dao.findAll(); }5.3 UserDaoImpl
public class UserDaoImpl implements UserDao{ private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource()); @Override public List<User> findAll() { String sql="select * from user"; List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class)); return users; }5.4 list.jsp
<table border="1" class="table table-bordered table-hover"> <tr class="success"> <th><input type="checkbox" id="firstCheckbox"></th> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>籍贯</th> <th>QQ</th> <th>邮箱</th> <th>操作</th> </tr> <c:forEach items="${user}" var="user" varStatus="s"> <%-- <c:forEach items="${users}" var="user" varStatus="s">--%> <tr> <td><input type="checkbox" name="uid" value="${user.id}"></td> <td>${s.count}</td> <td>${user.name}</td> <td>${user.gender}</td> <td>${user.age}</td> <td>${user.address}</td> <td>${user.qq}</td> <td>${user.email}</td> <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a> <a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td> </tr> </c:forEach> </table>结果:
6 添加数据
6.1 AddUserServlet
@WebServlet("/addUserServlet")
public class AddUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//设置编码
resp.setContentType("text/html;charset=utf-8");
Map<String, String[]> map = req.getParameterMap();
Set<String> names = map.keySet();
for (String name : names) {
String[] values = map.get(name);
System.out.println(name+"----"+values.toString());
}
System.out.println(map+"----------");
User user = new User();
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService service=new UserServiceImpl();
service.addUser(user);
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
}
6.2 UserServiceImpl
@Override
public void addUser(User user) {
dao.add(user);
}
6.3 UserDaoImpl
@Override
public void add(User user) {
String sql="insert into user values(null,?,?,?,?,?,?,null,null)";
jdbcTemplate.update(sql,user.getName(),user.getGender(),user.getAge(),
user.getAddress(), user.getQq(),user.getEmail());
}
6.4 list.jsp
<div style="float: right;margin: 20px">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
<a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a>
</div>
6.5 add.jsp
<form action="${pageContext.request.contextPath}/addUserServlet" method="post">
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
</div>
<div class="form-group">
<label>性别:</label>
<input type="radio" name="gender" value="男" checked="checked"/>男
<input type="radio" name="gender" value="女"/>女
</div>
<div class="form-group">
<label for="age">年龄:</label>
<input type="text" class="form-control" id="age" name="age" placeholder="请输入年龄">
</div>
<div class="form-group">
<label for="address">籍贯:</label>
<select name="address" class="form-control" id="jiguan">
<option value="广东">广东</option>
<option value="广西">广西</option>
<option value="湖南">湖南</option>
</select>
</div>
<div class="form-group">
<label for="qq">QQ:</label>
<input type="text" class="form-control" name="qq" placeholder="请输入QQ号码"/>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="text" class="form-control" name="email" placeholder="请输入邮箱地址"/>
</div>
<div class="form-group" style="text-align: center">
<input class="btn btn-primary" type="submit" value="提交" />
<input class="btn btn-default" type="reset" value="重置" />
<input class="btn btn-default" type="button" value="返回" />
</div>
</form>
结果:

7 根据id修改User数据
7.1 UpdateUserServlet
@WebServlet("/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");//设置编码
Map<String, String[]> map = req.getParameterMap();
//控制台显示获取的值
Set<String> names = map.keySet();
for (String name : names) {
System.out.print(name+":");
String[] values = map.get(name);
for (int i = 0; i < values.length; i++) {
System.out.print("-"+values[i]+"\t");
}
System.out.println();
}
User user = new User();
try {
BeanUtils.populate(user,map);//封装对象
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService service=new UserServiceImpl();
service.updateUser(user);
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
7.2 UserServiceImpl
@Override
public User findUserById(String id) {
return dao.findUserById(Integer.parseInt(id));
}
7.3 UserDaoImpl
@Override
public User findUserById(int id) {
String sql="select * from user where id=?";
User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
return user;
}
7.4 list.jsp
<c:forEach items="${pageBean.list}" var="user" varStatus="s">
<%-- <c:forEach items="${users}" var="user" varStatus="s">--%>
<tr>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td>
</tr>
</c:forEach>
7.5 update.jsp
<div class="container" style="width: 400px;">
<h3 style="text-align: center;">管理员登录</h3>
<form action="${pageContext.request.contextPath}/loginServlet" method="post">
<div class="form-group">
<label for="user">用户名:</label>
<input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/>
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/>
</div>
<div class="form-inline">
<label for="vcode">验证码:</label>
<input type="text" name="verifycode" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/>
<a href="javascript:refreshCode()">
<img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a>
</div>
<hr/>
<div class="form-group" style="text-align: center;">
<input class="btn btn btn-primary" type="submit" value="登录">
</div>
</form>
<!-- 出错显示的信息框 -->
<div class="alert alert-warning alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" >
<span>×</span></button>
<strong>${login_msg}</strong>
</div>
</div>
结果:


8 根据id删除数据
8.1 DelUserServlet
@WebServlet("/delUserServlet")
public class DelUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
UserService service = new UserServiceImpl();
service.deleteUser(id);
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
}
8.2 UserServiceImpl
@Override
public void deleteUser(String id) {
dao.deleteUser(Integer.parseInt(id));
}
8.3 UserDaoImpl
@Override
public void deleteUser(int id) {
String sql="delete from user where id=?";
jdbcTemplate.update(sql,id);
}
8.4 list.jsp
<script>
function deleteUser(id){
if(confirm("你确定要删除吗?")){
location.href="${pageContext.request.contextPath}/delUserServlet?id="+id;
}
}
</script>
... ...
<c:forEach items="${pageBean.list}" var="user" varStatus="s">
<%-- <c:forEach items="${users}" var="user" varStatus="s">--%>
<tr>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td>
</tr>
</c:forEach>

9 复选框删除数据
9.1 list.jsp
<script>
window.onload=function (){
//全选和全部选
document.getElementById("firstCheckbox").onclick=function (){
var uids=document.getElementsByName("uid");
for (var i=0;i<uids.length;i++){
uids[i].checked=this.checked;
}
}
//点击全出选中按钮时,触发form表单
document.getElementById("delSelected").onclick=function (){
var flag=false;
if(confirm("你确定要删除?")){
var uids=document.getElementsByName("uid");
for (var i=0;i<uids.length;i++){
if(uids[i].checked) {
flag=true;
break
}
}
}
if (flag){
document.getElementById("form").submit();
}
}
}
</script>
<div style="float: right;margin: 20px">
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
<a class="btn btn-primary" href="javascript:void(0);" id="delSelected">删除选中</a>
</div>
<form action="${pageContext.request.contextPath}/delSelectedServlet" method="post" id="form">
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th><input type="checkbox" id="firstCheckbox"></th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${pageBean.list}" var="user" varStatus="s">
<%-- <c:forEach items="${users}" var="user" varStatus="s">--%>
<tr>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td>
</tr>
</c:forEach>
</table>
</form>
9.2 DelSelectedServlet
@WebServlet("/delSelectedServlet")
public class DelSelectedServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String[] uids = req.getParameterValues("uid"); //1.获取checkbox所有id
UserService service=new UserServiceImpl();
service.delSelectedUser(uids);
resp.sendRedirect(req.getContextPath()+"/userListServlet");
}
}
9.3 UserServiceImpl
@Override
public void delSelectedUser(String[] ids) {
for (int i = 0; i < ids.length; i++) {
dao.deleteUser(Integer.parseInt(ids[i]));
}
}
9.4 UserDaoImpl
@Override
public void deleteUser(int id) {
String sql="delete from user where id=?";
jdbcTemplate.update(sql,id);
}

10 分页查询
使用request对象从浏览器中获取 当前页(current)和每页显示资源数(rows),在servlet中进行操作
10.1 PageBean

10.2 FindUserByPageServlet
@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//1 获取中页码当前页码currentPage和每页显示的数据条数rows
String currentPage = req.getParameter("currentPage");
String rows = req.getParameter("rows");
if(currentPage==null||"".equals(currentPage)){
currentPage="1";
}
if(rows==null||"".equals(rows)){
rows="5";
}
System.out.println(currentPage+"\t"+rows+"====");
//2 调用service查询
UserService service=new UserServiceImpl();
PageBean<User> pageBean=service.findUserByPage(currentPage,rows);
System.out.println(pageBean+"----");
//3 PageBean存入req
req.setAttribute("pageBean",pageBean);
//4 转发
req.getRequestDispatcher("/list.jsp").forward(req,resp);
}
10.3 UserServiceImpl
@Override
public PageBean<User> findUserByPage(String _currentPage, String _rows) {
int currentPage = Integer.parseInt(_currentPage);//当前页
int rows = Integer.parseInt(_rows);//每页显示的数据条数
if(currentPage<=0){//当页数<=0时,设置为第一页
currentPage=1;
}
//1 创建PageBean对象
PageBean<User> pageBean = new PageBean<User>();
pageBean.setRows(rows);
int totalCount=dao.findTotalCount();//2 查询总记录数
pageBean.setTotalCount(totalCount);
//3 查询数据的开始索引
int start =(currentPage-1)*rows;
//4 查询数据
List<User> list=dao.findByPage(start,rows);
pageBean.setList(list);
//5 计算总页码
int totalPage= (totalCount%rows)==0?(totalCount/rows):(totalCount/rows+1);
pageBean.setTotalPage(totalPage);
//6 最后一页
if(currentPage>=totalPage){
currentPage=totalPage;
}
pageBean.setCurrentPage(currentPage);
return pageBean;
}
10.4 UserDaoImpl
//分页查询 查询总数据条数
@Override
public int findTotalCount(Map<String, String[]> map) {
String sql="select count(*) from user ";
return jdbcTemplate.queryForObject(sql,Integer.class);
}
//分页查询
@Override
public List<User> findByPage(int start, int rows, Map<String, String[]> map) {
String sql="select * from user limit ?,?";
return jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class),start,rows);
}
10.5 index.jsp
<div align="center">
<a href="${pageContext.request.contextPath}/userListServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
</a>
</div>
10.6 list.jsp
<form action="${pageContext.request.contextPath}/delSelectedServlet" method="post" id="form">
<table border="1" class="table table-bordered table-hover">
<tr class="success">
<th><input type="checkbox" id="firstCheckbox"></th>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>籍贯</th>
<th>QQ</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<c:forEach items="${pageBean.list}" var="user" varStatus="s">
<%-- <c:forEach items="${users}" var="user" varStatus="s">--%>
<tr>
<td><input type="checkbox" name="uid" value="${user.id}"></td>
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.gender}</td>
<td>${user.age}</td>
<td>${user.address}</td>
<td>${user.qq}</td>
<td>${user.email}</td>
<td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td>
</tr>
</c:forEach>
</table>
</form>
。。。 。。。
<%--分页--%>
<div>
<nav aria-label="Page navigation" style="float: right">
<ul class="pagination">
<%--2 上一页--%>
<c:if test="${pageBean.currentPage==1}">
<li class="disabled"><%-- 2.1 li禁用--%>
</c:if>
<c:if test="${pageBean.currentPage!=1}">
<li><%-- 2.2 li禁用--%>
</c:if>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage-1}&rows=5" aria-label="Previous">
<span aria-hidden="true">«上一页</span>
</a>
</li>
<%-- 1分页: 1,2,3,4,5.。。。--%>
<c:forEach begin="1" end="${pageBean.totalPage}" var="i">
<%-- 1.1 分页:其他页未激活--%>
<c:if test="${pageBean.currentPage!=i}">
<li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5">${i}</a></li>
</c:if>
<%--1.2 分页:当前页激活状态--%>
<c:if test="${pageBean.currentPage==i}">
<li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5">${i}</a></li>
</c:if>
</c:forEach>
<%--3 下一页--%>
<c:if test="${pageBean.currentPage==pageBean.totalPage}"><%-- 3.1 li禁用 当前页未最后一页--%>
<li class="disabled">
</c:if>
<c:if test="${pageBean.currentPage!=pageBean.totalPage}"><%-- 3.2 --%>
<li >
</c:if>
<a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage+1}&rows=5" aria-label="Next">
<span aria-hidden="true">下一页»</span>
</a>
</li>
<span style="font-size: 25px;margin-left: 5px;">
共${pageBean.totalCount}条记录,共${pageBean.totalPage}页
</span>
</ul>
</nav>
结果:

11 分页模糊查询
11.2 servlet :FindUserByPageServlet
@WebServlet("/findUserByPageServlet") public class FindUserByPageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf-8"); //1 获取中页码当前页码currentPage和每页显示的数据条数rows String currentPage = req.getParameter("currentPage"); String rows = req.getParameter("rows"); if(currentPage==null||"".equals(currentPage)){ currentPage="1"; } if(rows==null||"".equals(rows)){ rows="5"; } // 5 分页条件查询 Map<String, String[]> map = req.getParameterMap(); System.out.println("当前页和查询数目:"+currentPage+"\t"+rows+"===="); //2 调用service查询 UserService service=new UserServiceImpl(); PageBean<User> pageBean=service.findUserByPage(currentPage,rows,map); System.out.println(pageBean+"----"); //3 PageBean存入req req.setAttribute("pageBean",pageBean); req.setAttribute("map",map); //4 转发 req.getRequestDispatcher("/list.jsp").forward(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }11.3 UserServiceImpl
@Override public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> map) { int currentPage = Integer.parseInt(_currentPage);//当前页 int rows = Integer.parseInt(_rows);//每页显示的数据条数 if(currentPage<=0){//当页数<=0时,设置为第一页 currentPage=1; } //1 创建PageBean对象 PageBean<User> pageBean = new PageBean<User>(); pageBean.setCurrentPage(currentPage); pageBean.setRows(rows); int totalCount=dao.findTotalCount(map);//2 查询总记录数 pageBean.setTotalCount(totalCount); //3 查询数据的开始索引 int start =(currentPage-1)*rows; //4 查询数据 List<User> list=dao.findByPage(start,rows,map); pageBean.setList(list); //5 计算总页码 int totalPage= (totalCount%rows)==0?(totalCount/rows):(totalCount/rows+1); pageBean.setTotalPage(totalPage); //6 最后一页 if(currentPage>=totalPage){ currentPage=totalPage; pageBean.setCurrentPage(currentPage); } return pageBean; }11.4 UserDaoImpl
/*模糊查询 显示查询结果数目*/ @Override public int findTotalCount(Map<String, String[]> map) { String sql="select count(*) from user where 1=1 "; StringBuilder sb=new StringBuilder(sql); List<Object> params=new ArrayList<Object>(); //遍历map Set<String> keySet = map.keySet(); for (String key : keySet) { if("currentPage".equals(key)||"rows".equals(key)){ continue;//跳过本次循环 } String value=map.get(key)[0];//获取value //判断是否获取到值 if(value!=null&&!"".equals(value)){ sb.append(" and "+key+" like ?"); params.add("%"+value+"%"); } } System.out.println("StringBuilder:"+sb.toString()); System.out.println("参数:"+params); return jdbcTemplate.queryForObject(sb.toString(),Integer.class,params.toArray()); } /** * 分页 模糊条件查询 */ @Override public List<User> findByPage(int start, int rows, Map<String, String[]> map) { String sql="select * from user where 1=1 "; StringBuilder sb=new StringBuilder(sql); List<Object> params=new ArrayList<Object>(); //遍历map Set<String> keySet = map.keySet(); for (String key : keySet) { if("currentPage".equals(key)||"rows".equals(key)){ continue;//跳过本次循环 } String value=map.get(key)[0];//获取value //判断是否获取到值 if(value!=null&&!"".equals(value)){ sb.append(" and "+key+" like ?"); params.add("%"+value+"%"); } } //添加分页查询 sb.append(" limit ?,?"); params.add(start); params.add(rows); System.out.println("StringBuilder:"+sb.toString()); System.out.println("数据:"+params); return jdbcTemplate.query(sb.toString(),new BeanPropertyRowMapper<User>(User.class),params.toArray()); }11.5 index.jsp
<div align="center"> <a href="${pageContext.request.contextPath}/findUserByPageServlet" style="text-decoration:none;font-size:33px">查询所有用户信息 </a> </div>11.6 list.jsp
<div style="float: left;margin: 20px"> <%--模糊查询--%> <form class="form-inline" action="${pageContext.request.contextPath}/findUserByPageServlet" method="post"> <div class="form-group"> <label for="exampleInputName2">姓名</label> <input type="text" name="name" value="${map.name[0]}" class="form-control" id="exampleInputName2" > </div> <div class="form-group"> <label for="exampleInputName3">籍贯</label> <input type="text" name="address" value="${map.address[0]}" class="form-control" id="exampleInputName3" > </div> <div class="form-group"> <label for="exampleInputEmail2">邮箱</label> <input type="text" name="email" value="${map.email[0]}" class="form-control" id="exampleInputEmail2" > </div> <button type="submit" class="btn btn-default">查询</button> </form> </div> 。。。 。。。。 <form action="${pageContext.request.contextPath}/delSelectedServlet" method="post" id="form"> <table border="1" class="table table-bordered table-hover"> <tr class="success"> <th><input type="checkbox" id="firstCheckbox"></th> <th>编号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>籍贯</th> <th>QQ</th> <th>邮箱</th> <th>操作</th> </tr> <c:forEach items="${pageBean.list}" var="user" varStatus="s"> <%-- <c:forEach items="${users}" var="user" varStatus="s">--%> <tr> <td><input type="checkbox" name="uid" value="${user.id}"></td> <td>${s.count}</td> <td>${user.name}</td> <td>${user.gender}</td> <td>${user.age}</td> <td>${user.address}</td> <td>${user.qq}</td> <td>${user.email}</td> <td><a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a> <a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})" >删除</a></td> </tr> </c:forEach> </table> </form> 。。。 。。。。 <nav aria-label="Page navigation" style="float: right"> <ul class="pagination"> <%--2 上一页--%> <c:if test="${pageBean.currentPage==1}"> <li class="disabled"><%-- 2.1 li禁用--%> </c:if> <c:if test="${pageBean.currentPage!=1}"> <li><%-- 2.2 li禁用--%> </c:if> <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage-1}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}" aria-label="Previous"> <span aria-hidden="true">«上一页</span> </a> </li> <%-- 1分页: 1,2,3,4,5.。。。--%> <c:forEach begin="1" end="${pageBean.totalPage}" var="i"> <%-- 1.1 分页:其他页未激活--%> <c:if test="${pageBean.currentPage!=i}"> <li><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}">${i}</a></li> </c:if> <%--1.2 分页:当前页激活状态--%> <c:if test="${pageBean.currentPage==i}"> <li class="active"><a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${i}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}">${i}</a></li> </c:if> </c:forEach> <%--3 下一页--%> <c:if test="${pageBean.currentPage==pageBean.totalPage}"><%-- 3.1 li禁用 当前页未最后一页--%> <li class="disabled"> </c:if> <c:if test="${pageBean.currentPage!=pageBean.totalPage}"><%-- 3.2 --%> <li > </c:if> <a href="${pageContext.request.contextPath}/findUserByPageServlet?currentPage=${pageBean.currentPage+1}&rows=5&name=${map.name[0]}&address=${map.address[0]}&email=${map.email[0]}" aria-label="Next"> <span aria-hidden="true">下一页»</span> </a> </li> <span style="font-size: 25px;margin-left: 5px;"> 共${pageBean.totalCount}条记录,共${pageBean.totalPage}页 </span> </ul> </nav>结果:
本文档详细介绍了如何使用JSTL来实现CRUD操作,包括创建web项目、数据库配置、用户登录验证、用户列表查询、添加、修改、删除用户,以及分页和分页模糊查询的功能。涵盖了从Servlet到DAO层的实现细节,并涉及到页面展示部分。



1629

被折叠的 条评论
为什么被折叠?



