MVC+Servlet+mysql+jsp讀取數據庫信息


首先有以下幾個包:

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里的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM