当前位置: 首页 > news >正文

Java Web应用优化 认识软件设计分层架构

分层资料的整理

先准备值类和连接数据库的工具类

package week17.entity;public class User {private int id;private String uname;private String pwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public User(int id, String uname, String pwd) {super();this.id = id;this.uname = uname;this.pwd = pwd;}public User() {id=0;uname="";pwd="";}@Overridepublic String toString() {return "User [id=" + id + ", uname=" + uname + ", pwd=" + pwd + ", toString()=" + super.toString() + "]";}}
package week17.util;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {private final static String driver = "com.mysql.cj.jdbc.Driver";                      // 数据库驱动private final static String url    = "jdbc:mysql://mysql.sqlpub.com:3306/huangjin";   // urlprivate final static String dbName = "laocooon";                                      // 数据库用户名private final static String dbPass = "fc12f7a5215e8e0a";                              // 数据库密码private static Connection        conn  = null;private static PreparedStatement pstmt = null;			        private static ResultSet         rs    = null;public static Connection getConn() throws Exception{Class.forName(driver);                                     //注册驱动return DriverManager .getConnection(url,dbName,dbPass);   //获得数据库连接并返回}public static void closeAll( Connection conn, PreparedStatement pstmt, ResultSet rs ) throws Exception {	        if(rs != null) rs.close();if(pstmt != null) pstmt.close();if(conn != null) conn.close();}public static void closeAll( Connection conn, PreparedStatement pstmt) throws Exception {if(pstmt != null) pstmt.close();if(conn != null) conn.close();}//直接关静态成员的资源public static void closeAll() throws Exception {	        closeAll(conn,pstmt,rs);// 关 17 18 19行的资源的}//增删改  返回多少条发生了变化,如果0表示没变化public static int executeUpdataSQL(String sql,String[] param)throws Exception {Connection        conn  = null;PreparedStatement pstmt = null;			        conn = getConn();                         pstmt = conn.prepareStatement(sql);    for( int i = 0; i < param.length; i++ ) pstmt.setString(i+1, param[i]);int num  = pstmt.executeUpdate();closeAll(conn,pstmt);return num;}//调用此代码,使用完 记录集的内容之后,通过  closeAll();public static ResultSet executeQuerySQL(String sql,String[] param)throws Exception {closeAll();conn = getConn();                         pstmt = conn.prepareStatement(sql);    for( int i = 0; i < param.length; i++ ) pstmt.setString(i+1, param[i]);			rs  = pstmt.executeQuery();		return rs;}}

数据访问层的类

package week17.dao;import java.util.List;import week17.entity.User;//打算有哪些业务
public interface UserDao {public User findUser(String uname) throws Exception;public List<User> allUser() throws Exception;public int addUser(User user) throws Exception;
}
package week17.dao.impl;import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import week17.dao.UserDao;
import week17.entity.User;
import week17.util.BaseDao;public class UserDaoImpl implements UserDao {@Overridepublic User findUser(String uname) throws Exception {// TODO Auto-generated method stubString sql="SELECT * FROM adminuser WHERE uname= ?";String[] param = {uname};	ResultSet rs=BaseDao.executeQuerySQL(sql, param);User user= new User();while(rs.next()) {user.setId(rs.getInt(1));user.setUname(rs.getString(2));user.setPwd(rs.getString(3));}BaseDao.closeAll();rs=null;return user;}@Overridepublic List<User> allUser() throws Exception {String sql="SELECT * FROM adminuser";String[] param = {};		ResultSet rs=BaseDao.executeQuerySQL(sql, param);		List<User> list=new ArrayList<User>();while(rs.next()) {User user= new User();user.setId(rs.getInt(1));user.setUname(rs.getString(2));user.setPwd(rs.getString(3));list.add(user);}BaseDao.closeAll();return list;}@Overridepublic int addUser(User user) throws Exception {String sql="INSERT INTO adminuser (uname,pwd) value(?,?)";String[] param = {user.getUname(),user.getPwd()};int row = BaseDao.executeUpdataSQL(sql, param);BaseDao.closeAll();return row;}
}

业务逻辑层的类

package week17.biz;import java.util.List;import week17.entity.User;public interface UserBiz {public boolean login(User user) throws Exception;public List<User> getAll() throws Exception;public int addUser(User user) throws Exception;
}
package week17.biz.impl;import java.util.List;import week17.biz.UserBiz;
import week17.dao.UserDao;
import week17.dao.impl.UserDaoImpl;
import week17.entity.User;public class UserBizImpl implements UserBiz {@Overridepublic boolean login(User user) throws Exception {UserDao userDao=new UserDaoImpl();System.out.println("login");User u=userDao.findUser(user.getUname());return u.getPwd().equals(user.getPwd());}@Overridepublic List<User> getAll() throws Exception {// TODO Auto-generated method stubUserDao ud=new UserDaoImpl();return ud.allUser();}@Overridepublic int addUser(User user) throws Exception {UserDao ud=new UserDaoImpl();String uname=user.getUname();User u=ud.findUser(uname);return u.getUname().equals(uname)?0:ud.addUser(user);}}

表示层

<%-- dologin.jsp --%>
<%@page import="week17.biz.impl.UserBizImpl"%>
<%@page import="week17.biz.UserBiz"%>
<%@page import="week17.entity.User"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%request.setCharacterEncoding("UTF-8");String uname=request.getParameter("username");String pwd=request.getParameter("password");if(uname==null||pwd==null)return ;User u=new User();u.setUname(uname);u.setPwd(pwd);UserBiz userBiz=new UserBizImpl();if(userBiz.login(u)){session.setAttribute("user", u);//去管理页out.println("登录成功~!");response.sendRedirect("./listall.jsp");}else{//去登录页response.sendRedirect("./login.jsp");}%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>验证检测</title>
</head>
<body></body>
</html>
<%-- listall.jsp --%>
<%@page import="week17.biz.impl.UserBizImpl"%>
<%@page import="week17.biz.UserBiz"%>
<%@page import="week17.entity.User"%>
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%UserBiz ub=new UserBizImpl(); List<User> list=ub.getAll();for(User user:list){out.println(user+"<br>");}%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body></body>
</html>

<%-- doadd.jsp --%>
<%@page import="week17.biz.impl.UserBizImpl"%>
<%@page import="week17.biz.UserBiz"%>
<%@page import="week17.entity.User"%>
<%@page import="java.util.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%
User user=new User(0,"sss1","pwds");
UserBiz ub=new UserBizImpl();if(ub.addUser(user)>0){out.println("添加成功");
}else{out.println("已经注册过了");return ;
}%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body></body>
</html>

相关文章:

  • Spring Boot 3 集成 Druid 连接池详解
  • 游戏被攻击该怎么办?游戏盾该如何使用,游戏盾如何防护攻击
  • IDEA使用git从远程仓库获取项目
  • 大屏图表汇总echarts圆环
  • LAMP架构
  • 用户案例|Milvus 助力 Credal.AI 实现 GenAI 安全与可控
  • 【数据结构 — 排序 — 选择排序】
  • typedef 与#define 的区别
  • Spring Boot 整合kafka:生产者ack机制和消费者AckMode消费模式、手动提交ACK
  • SAP UI5 walkthrough step2 Bootstrap
  • Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)
  • PTA:哈夫曼编码
  • class067 二维动态规划【算法】
  • 自然语言处理:电脑如何理解我们的语言?
  • Spring Cloud + Vue前后端分离-第3章 SpringBoot项目技术整合
  • [译]CSS 居中(Center)方法大合集
  • 〔开发系列〕一次关于小程序开发的深度总结
  • C++11: atomic 头文件
  • CSS盒模型深入
  • css系列之关于字体的事
  • es6(二):字符串的扩展
  • flutter的key在widget list的作用以及必要性
  • Gradle 5.0 正式版发布
  • JAVA SE 6 GC调优笔记
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Linux gpio口使用方法
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue2.0 实现互斥
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 开源SQL-on-Hadoop系统一览
  • 区块链分支循环
  • 设计模式 开闭原则
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我的业余项目总结
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 主流的CSS水平和垂直居中技术大全
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • ( 10 )MySQL中的外键
  • (02)Hive SQL编译成MapReduce任务的过程
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (WSI分类)WSI分类文献小综述 2024
  • (第一天)包装对象、作用域、创建对象
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (十八)SpringBoot之发送QQ邮件
  • (十三)MipMap
  • (转) ns2/nam与nam实现相关的文件
  • .a文件和.so文件
  • .env.development、.env.production、.env.staging
  • .htaccess 强制https 单独排除某个目录