IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> J2EE项目——简易银行管理系统 -> 正文阅读

[Java知识库]J2EE项目——简易银行管理系统

作者:token keyword

BankManager

JavaWeb快速入门的J2EE项目

项目简介

技术栈 Servlet + Jsp + Tomcat比较适合新手入门练手

项目用到的技术如下:
Java:Java SE基础
前端: HTML , CSS , JavaScript , jQuery LayUI(前端模板框架)
J2EE: Tomcat , Servlet , JSP , Filter
数据库: MySQL


业务需求

后台管理页
1.管理员登录
1.1 新增用户信息
1.2 新增银行卡信息
1.3 修改银行卡信息
1.4 删除银行卡
1.5 查看所有银行卡信息
1.6 根据条件查看银行卡信息
前台用户页
2.用户登录
2.1 取钱功能
2.2 存钱功能
2.3 转账功能
2.4 查看自己银行卡信息
2.5 修改密码功能


表结构

表名中文含义介绍
bankcard银行卡表存放银行卡信息如卡号,密码,余额,卡类型,用户号
bankmanager管理员表存放管理员信息如管理员号,管理员姓名,管理员密码
bankuser用户信息表存放用户信息如用户id,用户名,手机,公司,籍贯

本文主要以用户表为例查询用户信息为示例功能演示
J2EE的核心思想

实体类(bean包下)

实体类就是基于ORM(Object Relational Mapping)思想,将Java的类与数据库的表进行映射
BankUser.java映射bankuser表

/**   
 * @ClassName:  BankUser   
 * @Description:用户实体类
 * @author: jingyi
 * @date:   2021年5月10日 下午4:18:14      
 * @Copyright:  
 */
public class BankUser {
	private int uid;//用户id
	private String uname;//用户名
	private int uphone;//电话
	private String company;//公司
	private String hometown;//籍贯
	public String getHometown() {
		return hometown;
	}
	public void setHometown(String hometown) {
		this.hometown = hometown;
	}
	public int getUid() {
		return uid;
	}
	public void setUid(int uid) {
		this.uid = uid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getUphone() {
		return uphone;
	}
	public void setUphone(int uphone) {
		this.uphone = uphone;
	}
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	
	
}

数据库bankuser表
在这里插入图片描述


Dao层(dao包下)

用于进行数据库访问的操作
那么在访问数据库之前我们需要借助数据库连接池

使用数据库连接工具类帮助我们获取数据库连接对象,关闭数据库连接对象
connUtil.java

public class connUtil {
	private static ThreadLocal<Connection> threadload=new ThreadLocal<>();
	private static DataSource ds;
	static {//数据源对象加载
		try {
			Properties properties = new Properties();
			InputStream ins=connUtil.class.getResourceAsStream("/mysql.properties");
			properties.load(ins);
			ds=BasicDataSourceFactory.createDataSource(properties);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	//获取数据库连接对象
	public static Connection getConn() throws SQLException{
		Connection conn=threadload.get();
		if(conn==null||conn.isClosed()) {
			conn=ds.getConnection();
			threadload.set(conn);
		}
		return conn;
	}
	
	//关闭数据库连接对象
	public static void closeConn() {
		Connection conn=threadload.get();
		try {
			if(conn!=null&&!conn.isClosed()) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			threadload.set(conn);
		}
	}
}

这里还需要一个资源文件用来告知工具类我们需要连接哪个数据库
mysql.proprerties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/class04?characterEncoding=utf8&serverTimezone=Asia/Shanghai
username=root
password=root
maxActive=30
maxIdle=10
maxWait=60000

创建BankDao接口,这里不使用一个类直接操作数据库,而是使用接口声明方法,再用这个接口的实现类去操作数据库,这样可以降低层与层之间的耦合度
BankDao.java

public interface BankDao {
	public List<BankUser> FindAllUser() throws SQLException;
}

BankDaoImpl.java(dao.Impl包下)
对于不同的功能对应不同的方法与数据库进行数据操作

public class BankDaoImpl implements BankDao {

	@Override
	public List<BankUser> FindAllUser() throws SQLException {	
		Connection conn = connUtil.getConn();
		String sql="select * from  bankuser";
		Statement statement = conn.createStatement();
		ResultSet rs = statement.executeQuery(sql);
		List<BankUser> list =new ArrayList<BankUser>();
		while(rs.next()) {
			BankUser user = new BankUser();
			user.setUid(rs.getInt(1));
			user.setUname(rs.getString(2));
			user.setUphone(rs.getInt(3));
			user.setCompany(rs.getString(4));
			user.setHometown(rs.getString(5));
			list.add(user);
		}
		return list;
	}
}

Service层(service包下)

与controller层直接通信,进一步降低层之间的耦合性
BankService.java

public interface BankService {
	public List<BankUser> FindAllUser();
}	

数据结果的判断,事物的提交、回滚都在这里进行处理
BankServiceImpl.java(service.Impl包下)

public class BankServiceImpl implements BankService {
	BankDao bankdao=new BankDaoImpl();
	@Override
	public List<BankUser> FindAllUser() {
		List<BankUser> list=null;
		try {
			list=bankdao.FindAllUser();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			connUtil.closeConn();
		}
		return list;
	}
}	

Controller层(controller包下)

当前台页面发出请求,最先会通过过滤器,过滤器会首先判断系统是否用角色登录,如果已经登录则转发该请求到controller层,由@WebServlet注解选择对应的servlet进行处理
AddCardServlet.java

@WebServlet("/addcard")
public class AddCardServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		BankService bankService = new BankServiceImpl();
		BankCard card=new BankCard();
		BankUser user = new BankUser();
		card.setBankuser(user);
		card.setCpssword(Integer.valueOf(req.getParameter("password")));
		card.setCmoney(Double.valueOf(req.getParameter("cmoney")));
		card.setCtype(req.getParameter("ctype"));
		card.getBankuser().setUid(Integer.valueOf(req.getParameter("ID")));
		boolean flag=bankService.AddCard(card);
		if(flag) {
			if(flag) {
				resp.sendRedirect("toaddcard");
			}else {
				resp.sendRedirect("jsp/addcardError.jsp");
			}
		}
	}
}


核心思想

在这里插入图片描述

Filter

过滤器主要功能
1.拦截所有请求
2. 判断是否登录
3. 已登陆发送的请求则通过并转发
4. 未登录发送的请求则跳转到登录页

MyFilter.java

@WebFilter("/*")
public class MyFilter implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest) request;
		HttpServletResponse resp=(HttpServletResponse) response;
		String uri=req.getRequestURI();
		if(uri.endsWith("Login.jsp")||uri.endsWith("login")||uri.endsWith("checkaccount")||uri.contains(".css") || uri.contains(".js") || uri.contains(".png")|| uri.contains(".jpg")) {//如果为登录请求
			chain.doFilter(request, response);
		}else {//不是去登录页面或登录请求
			String uname=(String)req.getSession().getAttribute("uname");
			String mname=(String)req.getSession().getAttribute("mname");
			if(uname!=null||mname!=null) {//管理员或者用户已登录
				chain.doFilter(request, response);
			}else{
				req.getSession().setAttribute("Needloginmsg", "something");
				resp.sendRedirect("Login.jsp");			
			}
		}
		
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}
}

部分页面演示

页面主要使用Layui前端模板框架编写,详细使用可参考layui官网
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整项目请访问 简易银行系统

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 11:32:03  更:2021-07-10 11:32:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 22:53:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码