Servlet + DAO + JSTL
1.使用的连接手段
c3p0连接池:c3p0是一个开源的 JDBC连接池,使用它的开源项目有Spring 和 Hibernate。
1.1 使用c3p0的步骤
1.1.0 引用的jar包(资源)
引用的资源如下图:
c3p0-0.9.1.2.jar---->c3p0连接池
commons-dbutils-1.4.jar------>简化jdbc操作的小类库
将从数据库中查找出来的结果集转换成java的List集合等等…
commons-pool2-2.3.jar------>这个包是一个实现对象池的工具
fastjson-1.2.49.jar----->方便的实现json对象与JavaBean对象的转换
jstl-1.2.jar--------->使用jstl和el表达式的小类库
junit-4.9.jar--------->用于测试的jar包
mysql-connector-java-5.1.7-bin.jar------>mysql数据库对java的jdbc接口的实现类库
1.1.1 创建一个c3p0-config.xml文件
c3p0-config.xml就是一个c3p0连接池的配置文件
在Resource Root分类的文件夹Resources下创建一个c3p0-config.xml文件
具体代码如下:
<?xml version="1.0" encoding="UTF-8">
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///java?characterEncoding=utf8</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
1.1.2 创建一个工具类,用来获取mysql数据库的连接
package com.web.util;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtils {
// 0. 数据源的赋值
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 1.获取数据源
public static ComboPooledDataSource getDataSource(){
return dataSource;
}
}
2.Servlet类
java servlet 是运行在web服务器上或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
package com.web.servlet;
import com.web.dao.BookDao;
import com.web.dao.impl.BookDaoImpl;
import com.web.util.BookPage;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// 注解的使用:/localhost:8080/book?cmd=..
@WebServlet("/book")
public class BookServlet extends HttpServlet {
// 定义一个数据访问对象
private BookDao bookDao;
// 在servlet创建后马上为bookDao赋值
@Override
public void init() throws ServletException {
bookDao = new BookDaoImpl();
}
// 重载service方法,对发送的请求进行处理
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取地址中的cmd参数
String cmd = req.getParameter("cmd");
// 判断cmd参数的值
if(cmd != null && !"".equals(cmd)){
if("dopage".equals(cmd)){
list(req,resp);
}
}
}
// list方法:根据不同的页码进行查询
private void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pageStr = req.getParameter("page");
int page = pageStr == null ? 1 : Integer.parseInt(pageStr);
if(page == 0){
page = 1;
}
// 查询当前页的bookpage对象
BookPage bookPage = bookDao.select(page);
// 将bookpage对象放入请求作用域中
req.setAttribute("bookpage",bookPage);
// 页面的跳转
req.getRequestDispatcher("/book.jsp").forward(req,resp);
}
}
3.前端页面
在以下的代码中有
<%@include file=“base.jsp”%>
这是创建了一个jsp文件对加载的资源进行了抽取,下次加载该资源时就能直接使用该代码。
base.jsp
<link rel="stylesheet" href="/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="/bootstrap-3.3.7/js/jquery.min.js"></script>
<script src="/bootstrap-3.3.7/js/bootstrap.min.js"></script>
book.jsp
<%--
User: Administrator
Date: 2020/1/30
Time: 18:04
author:David
实现功能:
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@include file="base.jsp"%>
<html>
<head>
<title>书本分页的实现</title>
</head>
<body>
<div class="container">
<div class="panel panel-primary">
<div class="panel-heading">
<div class="title">
<h2>书本分页</h2>
</div>
</div>
<div class="panel-body">
<table class="table">
<tr>
<td>编号</td>
<td>书名</td>
<td>作者</td>
<td>出版社</td>
<td>价格</td>
<td>操作</td>
</tr>
<c:forEach items="${bookpage.rows}" var="b">
<tr>
<td>${b.bid}</td>
<td>${b.bname}</td>
<td>${b.author}</td>
<td>${b.publisher}</td>
<td>${b.price}</td>
<td>
<a href="/book?cmd=delete&bid=${b.bid}">删除</a>
</td>
</tr>
</c:forEach>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
<li>
<a href="/book?cmd=dopage&page=${bookpage.page-1}" aria-label="Previous">
<span aria-hidden="true">上一页</span>
</a>
</li>
<c:forEach begin="1" end="${bookpage.total}" var="p">
<li class="${p == bookpage.page ? 'active':''}">
<a href="/book?cmd=dopage&page=${p}">${p}</a>
</li>
</c:forEach>
<li>
<a href="/book?cmd=dopage&page=${bookpage.page+1}" aria-label="Next">
<span aria-hidden="true">下一页</span>
</a>
</li>
<li>
<a href="/book?cmd=dopage&page=1">
<span aria-hidden="true">首页</span>
</a>
</li>
</ul>
</nav>
</div>
<div class="panel-footer">
总记录数为:<span>${bookpage.totalinfo}</span>
</div>
</div>
</div>
</body>
</html>