首先有以下幾個包:
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里的數據
