首先有以下几个包:

1.controller

控制层,对用户的请求进行响应

2.dao

数据层接口标准

3.daoimpl

数据层实现层

4.model

实体类层

5.service

业务层接口标准

6.serviceimpl

业务实现层

7.util

工具层

-------------------------------------------------------------------------------------------------------------------------------------------------------分割线--------------------------------------------------------------------------------

首先我们封装JDBC

package Util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; import org.junit.jupiter.api.Test; public class DbUtil {
public static Connection con=null;
public static PreparedStatement stmt=null;
public static ResultSet res=null;
//加载驱动
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库驱动加载成功");
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() {
Properties p=new Properties();
ClassLoader classLoader=Thread.currentThread().getContextClassLoader();
InputStream in=classLoader.getResourceAsStream("db.properties");
String username=null;
String password=null;
String url=null;
try {
p.load(in);
username=p.getProperty("username");
password=p.getProperty("password");
url=p.getProperty("url");
System.out.println("外部文件加载成功");
}catch(IOException e1) {
e1.printStackTrace();
}
try {
if(con==null) { con=DriverManager.getConnection(url, username, password);
System.out.println("数据库链接成功");
}
}catch(SQLException e) {
e.printStackTrace();
}
return con;
}
public static void CloseConnection(Connection con) {
try {
if(res!=null) {
res.close();
}
if(stmt!=null) {
stmt.close();
}
if(con!=null) {
con.close();
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}

  里面有两个方法一个方法返回con对象供数据层使用,一个方法关闭数据库连接

然后我们编写数据层接口标准

public interface UserDao {
public List<User> getAllUser();//列出全部用户
}

  然后编写数据层

package daoimpl;//数据层接口实现类

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import Util.DbUtil;
import dao.UserDao;
import model.User; public class UserDaoImpl implements UserDao{
//JDBC的三个接口
Connection con=null;
PreparedStatement stmt=null;
ResultSet res=null;
//按照数据层开发标准实现接口方法
@Override
//返回一个list集合
public List<User> getAllUser() {
//实例化一个list集合
List<User> list=new ArrayList<User>();
//将要执行的sql语句
String sql="select * from user";
//执行数据库连接
try {
//由数据库工具连接类返回一个数据库连接
con=DbUtil.getConnection();
stmt=con.prepareStatement(sql);
res= stmt.executeQuery();
while(res.next()) {
User u=new User();
u.setId(res.getString("id"));
u.setUsername(res.getString("username"));
u.setPassword(res.getString("password"));
list.add(u);
}
}catch(SQLException e) {
e.printStackTrace();
}
return list;
}
}

  使用工具类包里面返回的数据库连接对象,然后使用预处理的sql,读取到数据库里面的信息,然后把读取到的数据利用实体类的setter和getter方法来存到实体类里然后存在集合里面。

然后编写业务层开发标准

import java.util.List;

import model.User;

public interface UserService {
public List<User> getAllUser();//列出全部用户
}

  然后编写业务层实现类

public class UserServiceImpl implements UserService {
//取到数据层类
private UserDao userDao;
@Override
public List<User> getAllUser() {
List<User> list=userDao.getAllUser();
return list;
} }

 调用数据层接口的getAllUser()方法来获取到集合 

然后编写控制层

package controller;//控制层

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List; import javax.servlet.RequestDispatcher;
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 daoimpl.UserDaoImpl;
import model.User;
@WebServlet("/servlet01")
public class ListServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
UserDaoImpl userDao=new UserDaoImpl();//访问数据层
public ListServlet() {
super();
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath()); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过数据层得到数据库里的数据并存到集合里
List<User> list=userDao.getAllUser();
if(list!=null) {
System.out.println("数据读取成功!");
}
//把数据存起来
request.setAttribute("users", list);
//重定向到数据展示页
request.getRequestDispatcher("list.jsp").forward(request, response);
}
}

  然后把集合存到request里面,并且重定向到list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>列表</title>
</head>
<body>
<form >
<table border="1" cellpadding="0" cellspacing="0">
<tr style="width:500px;">
<td>用户编号</td>
<td>用户名</td>
<td>密码</td>
<td>操作</td>
</tr>
<c:forEach items="${users}" varStatus="userStatus" var="user">
<tr>
<td>${user.id }</td>
<td>${user.username }</td>
<td>${user.password }</td>
<td><a href="/del">删除</a>|<a href="">修改</a>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>

  使用jsp的jstl标签来循环读取request里的数据

最新文章

  1. RabbitMQ模拟器使用方法
  2. ASP.NET MVC5 实现网址伪静态
  3. 当SVN服务器端IP地址发生变化时,客户端重新定位
  4. C++11的模板新特性-变长参数的模板
  5. ubuntu apt-get修改源地址
  6. 【SPOJ】1825. Free tour II(点分治)
  7. JAVA 调用命令并输出
  8. Nagios : Verifying Your Configuration
  9. bzoj 1853: [Scoi2010]幸运数字 容斥
  10. 【protobuf进阶】通过.proto文件导出C#支持的.cs类文件
  11. c++实现二分查找
  12. 淘淘商城_day11_课堂笔记
  13. Codeforces #350
  14. RxJava(九)zip操作符在Android中的实际使用场景
  15. 多个python版本共存
  16. JavaScript splice() 方法和JavaScript split() 方法
  17. MySQL对表数据操作
  18. 莫烦tensorflow(2)-Session
  19. POJ1807&amp;&amp;1276
  20. codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)

热门文章

  1. Effective C++ 总结笔记(二)
  2. Json跨域登录问题的之Access-Control-Allow-Origin 站点跨域请求的问题
  3. ECharts + jsp 图表
  4. Android——ViewHolder的作用与用法
  5. [cf1168E]Xor Permutations
  6. 第03章_基本的SELECT语句
  7. 测试平台系列(80) 封装Redis客户端
  8. [spring-core]作用域
  9. Terminator--最强Ubuntu终端
  10. PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台