JSP+Servlet实现前端展现数据库中的数据

学了很长时间的JSP和Servlet,虽然还是没有完全的理解其中的原理,但是总会一点点的技术,这次,就来实现把数据库中的数据在前端展示出来。

一、需求

实现数据库中的数据展现在前端界面

二、设计 

技术选型:Servlet  JSP  Mysql  JDBC  Druid  BeanUtil  Tomcat  

数据库设计:这是我第一次做这个小小的案例,所以就设计一张物品表

                     id name value  三个字段,id是主键,这张的表中的值事先都是添加好的,直接使用即可

具体的设计思路如下:

 

画了一小会的思路图片,虽然不好看,但是思路很清晰,接着就是根据设计思路,写代码啦! 

三、开发

 环境搭建:创建数据库环境,创建项目导入jar包

编码如下:

导入的jar包:

 

文件的目录结构:

 这样一切都准备就绪了,那我们从哪开始写代码呢?

目前我是从dao层开始,不知道你们从哪开始?

首先写dao层:

在写dao层之前,应该先写连接数据库的工具类和一些配置文件:

DruidUtil类;

package util;

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.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;


/**
 * druid数据库连接池的工具类
 */
public class DruidUtil {

    private static DataSource ds;

    static {
        //加载配置文件和建立连接池
        try {
            Properties pro = new Properties();
            InputStream resourceAsStream = DruidUtil.class.getClassLoader().getResourceAsStream("Druid.properties");
            pro.load(resourceAsStream);
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取数据库连接池
     * @return
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接池中的一个连接
     * @return
     * @throws SQLException
     */
    public Connection getconnection() throws SQLException {
        return ds.getConnection();

    }


    /**
     * 关闭数据库的资源  三个对象都存在时
     * @param conn
     * @param res
     * @param pstmt
     */
    public static void close(Connection conn, ResultSet res, PreparedStatement pstmt){
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (res!=null){
            try {
                res.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt!=null){
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 关闭数据库的连接(只存在Connection和PreparedStatement对象时)
     * @param conn
     * @param pstmt
     */
    public void close(Connection conn,PreparedStatement pstmt){
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt!=null){
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

Druid.properties

driverClassName = com.mysql.cj.jdbc.Driver

url=jdbc:mysql:///student?serverTimezone=GMT&useSSL=false
username=root
password=yanzhiguo140710
#初始化连接数量#
initialSize = 5
#最大连接数量
maxACtive = 10
#等待时间 3秒
maxWait = 3000

写完之后,就可以写dao层的代码了:

首先写UserDao接口,然后写UserDaoImpl的实现类

UesrDao接口:

package dao;

import domain.Users;

import java.util.List;

public interface UsersDao {
    public List<Users> findAll();
}

UserDaoImpl实现类:

package dao.impl;

import dao.UsersDao;
import domain.Users;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.DruidUtil;

import java.util.List;

/**
 * dao层 操纵数据库
 * 从数据库中拿出数据 传给servive层
 */
public class UsersDaoImpl implements UsersDao {
    private JdbcTemplate template  = new JdbcTemplate(DruidUtil.getDataSource());
    @Override
    public List<Users> findAll() {

        String sql = "select * from goods";
        List<Users> query = template.query(sql, new BeanPropertyRowMapper<Users>(Users.class));
        return query;
    }
}

这样就写完了dao层的代码

对了没还有一个重要的Javabean还没写:

package domain;

/**
 * 用户类 把数据用类对象展示
 * 相当于JavaBean
 */
public class Users {
    Integer id;
    String name;
    Integer value;
    public Users(Integer id, String name, Integer value) {

        this.id = id;
        this.name = name;
        this.value = value;
    }
    public Users(){

    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getValue() {
        return value;
    }

    public void setValue(Integer value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", value=" + value +
                '}';
    }
}

Service层

根据设计思路,先写UserService接口:

package service;

import domain.Users;

import java.util.List;

public interface UsersService {
    public List<Users> findAll();
}

USerServiceImpl实现类:

package service.impl;

import dao.UsersDao;
import dao.impl.UsersDaoImpl;
import domain.Users;
import service.UsersService;

import java.util.List;

/**
 * 调用dao层中Usersdao中方法 获得数据库中的数据
 */
public class UsersServiceImpl implements UsersService {
    @Override
    public List<Users> findAll() {
        UsersDaoImpl dao = new UsersDaoImpl();
        List<Users> users_list = dao.findAll();
        return users_list;
    }
}

这样Service层就写完了

view层:

这主要是处理请求的代码:

package web.servlet;

import domain.Users;
import service.UsersService;
import service.impl.UsersServiceImpl;

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;
import java.util.List;

@WebServlet("/userServletList")
public class UserServletList extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //用service层来完成数据库的查询
        UsersService usersservice = new UsersServiceImpl();
        List<Users> list = usersservice.findAll();
        //将数据存在数据域中
        System.out.println(list);
        request.setAttribute("list",list);
        //转发到list.jsp中
        request.getRequestDispatcher("/list.jsp").forward(request,response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

这样三层就基本写完了,剩下的就是前端页面的展示,我在写的过程中,利用了bootstrap框架没这样,这样写代码简单。

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: yzg
  Date: 2019/4/6
  Time: 13:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
  <head>
    <title>志国出品</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <!-- 包括所有已编译的插件 -->
    <script src="js/bootstrap.min.js"></script>
  </head>

  <body>
  <div align="center">
    <a href="${pageContext.request.contextPath}/userServletList">
      点击查看信息
    </a>
  </div>
  </body>
</html>

list.jsp:

<%--
  Created by IntelliJ IDEA.
  User: yzg
  Date: 2019/4/6
  Time: 13:41
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<html>
<head>
    <title>Title</title>
    <title>物品列表</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <!-- 包括所有已编译的插件 -->
    <script src="js/bootstrap.min.js"></script>
</head>
<body>
    <div class="container">
        <h3 align="center">物品信息列表</h3>
        <table class="table table-bordered table-hover">
            <tr class="success">
                <th>编号</th>
                <th>名称</th>
                <th>价格</th>
            </tr>
            <c:forEach var="li" items="${list}" varStatus="s">
                <tr>
                    <td>${s.count}</td>
                    <td>${li.name}</td>
                    <td>${li.value}</td>
                </tr>

            </c:forEach>
        </table>
    </div>
</body>

</html>

这样就基本写完了,剩下的时间就是努力找Bug了

总结

1、Java中导入包的时候将lib文件夹变成Add as library

2、导入jar包,要注意千万别导错了!!!!

3、要熟悉jsp中的对象,以及他们的用法

4、使用EL和JSTL时,要注意使用的是否正确,别忘了$

5、写前端代码时,可以参考bootstrap文档

6、dao层的代码一定要细心,否数据都拿不出来

7、关键时Servlet的书写,这部分最难理解,还需加强

8、花了1个小时写代码,找Bug花了好几个小时,啊啊啊啊啊啊啊啊,痛苦啊,不过最终还是写出来了,还是很高兴的。

最后,希望每个人都能在这条道路上继续坚持下去,加油!!! 

  • 16
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值