MVC+Servlet+mysql+jsp读取数据库信息
Posted 蔡震
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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里的数据
以上是关于MVC+Servlet+mysql+jsp读取数据库信息的主要内容,如果未能解决你的问题,请参考以下文章
基于jsp+servlet+javabean的MVC模式简单应用
jsp中连接数据库,可以直接写在JSP文件里,也可以,写在javabean,和servlet中,哪一种方法更好一些