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>

4.程序结构总览

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值