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读取数据库信息的更多相关文章
- 通过JDBC连接数据库(MySql为例)并读取数据库信息--JSP基础
1.先建数据库,数据库名为:employee_DB;然后在数据库employee_DB下建表,表名为employee;最后插入数据. create database employee_DB; use ...
- MySQL学习——查看数据库信息
MySQL学习——查看数据库信息 摘要:本文主要学习了查看数据库信息的方法. 查询指定表的索引 语法 show index from 表名; 示例 mysql> show index from ...
- itext poi 学习之旅 (3)读取数据库信息并由excel展现出来
DBConnection.java 连接数据库操作 package com.zkbj.poi; import java.sql.Connection; import java.sql.DriverMa ...
- 读取数据库信息并生成表设计文档Word版本
1.参考C#代码 using Help.DBAccessLayer.Business; using Help.DBAccessLayer.Model.SqlGenerator; using Newto ...
- JSP读取数据库二进制图片并显示
用JSP从数据库中读取二进制图片并显示在网页上 环境mysql+tomcat: 先在mysql下建立如下的表. 并存储了二进制图像(二进制格式存储图片可以参考我的另一篇博客:https://www.c ...
- C#语句从MySQL中简单的读取数据库信息
protected void Page_Load(object sender, EventArgs e) { //数据库+Json MyJson.JsonNode_Object json = new ...
- app开发中读取数据库信息的vue页面
<template> <!-- 容器 --> <div class="container"> <!-- 标头 --> <div ...
- UEditor如何读取数据库信息?
你用的什么语言,服务器端生成的时候,直接写在里面就可以了啊,比如 <textarea name="content" cols="800" rows=&qu ...
- hibernate 结合servlet及 jsp 的使用
Hibernate结合JSP使用 前面几章详细的介绍了Hibernate的相关知识,这一章介绍Hibernate结合JSP和Servlet的使用,通过这一章的学习,可以加深对Hibernate的理解. ...
随机推荐
- NOIP模拟96(多校29)
T1 子集和 解题思路 大概是一个退背包的大白板,然而我考场上想复杂了,竟然还用到了组合数. 但是大概意思是一样的,有数的最小值一定是一个在 \(a\) 数组中存在的数字. 那么我们想办法除去它对应的 ...
- 第一周PTA笔记 德州扑克题解
德州扑克 最近,阿夸迷于德州扑克.所以她找到了很多人和她一起玩.由于人数众多,阿夸必须更改游戏规则: 所有扑克牌均只看数字,不计花色. 每张卡的值为1.2.3.4.5.6.7.8.9.10.11.12 ...
- 菜鸡的Java笔记 第十四 String 类常用方法
/*String 类常用方法 将所有String类的常用方法全部记下来,包括方法名称,参数作用以及类型 一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库 ...
- [luogu4484]最长上升子序列
标算是状压dp+打表,前者时间复杂度为$o(n^{2}2^{n})$,并通过打表做到$o(1)$ 参考loj2265中关于杨表的相关知识,不难发现答案即$\frac{\sum_{a\vdash n}a ...
- 一文理解Java-class字节码文件
前言 java语言在其刚诞生之际喊出的口号--"Write Once,Run Anywhere",正是基于字节码(byte code)而存在的,java能够做到平台无关性,得力于这 ...
- 还有这种好事!netty自带http2的编码解码器framecodec
目录 简介 Http2FrameCodec Http2Frame.Http2FrameStream和Http2StreamFrame Http2FrameCodec的构造 Stream的生命周期 流控 ...
- appScan安全软件的使用
1.点击文件,新建 2.常规扫描 3.点击下一步 4.输入需要扫描的网站 5.下一步,如果有账号 密码可以使用记录. 6.选择缺省值,下一步 7.启动全面扫描.
- Pulsar云原生分布式消息和流平台v2.8.0
Pulsar云原生分布式消息和流平台 **本人博客网站 **IT小神 www.itxiaoshen.com Pulsar官方网站 Apache Pulsar是一个云原生的分布式消息和流媒体平台,最初创 ...
- CF708E Student's Camp
麻麻我会做*3100的计数了,我出息了 考虑朴素DP我们怎么做呢. 设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率. \(q(l,r)\)表示经历了\(k\)天后,存活 ...
- 【机器学*与R语言】2-懒惰学*K*邻(kNN)
目录 1.理解使用KNN进行分类 KNN特点 KNN步骤 1)计算距离 2)选择合适的K 3)数据准备 2.用KNN诊断乳腺癌 1)收集数据 2)探索和准备数据 3)训练模型 4)评估模型的性能 5) ...