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中,哪一种方法更好一些

JavaWeb课程设计——基于Jsp+Servlet+MySQL的科研申报系统课程设计

Jsp+Servlet+JavaBean经典MVC模式理解

Servlet开发

在MVC开发模式下DTO,DAO,Servlet,Jsp的作用?