zoukankan      html  css  js  c++  java
  • 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="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里的数据

  • 相关阅读:
    BZOJ 1066 [SCOI2007]蜥蜴 (最大流)
    Codeforces 1092 D2 Great Vova Wall (Version 2) (栈)
    BZOJ 1046 [HAOI2007]上升序列(LIS + 贪心)
    牛客练习赛34 D little w and Exchange(归纳)
    BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)
    GTMD并查集!
    2018icpc南京现场赛-G Pyramid(打标找规律+逆元)
    drwxr-xr-x 2 root root 4096 06-29 14:30 Test 分段解释
    Linux里面非常重要的目录
    点击 触发 事件 的 jQuery 写法样式
  • 原文地址:https://www.cnblogs.com/cainame/p/10314878.html
Copyright © 2011-2022 走看看