Java_Web之分层架构

表示层依赖于业务逻辑层,业务逻辑层依赖于数据访问层
package DB; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; /**
* 数据库连接帮助类
* @author Administrator
*
*/
public class BaseDao {
//=======数据库连接信息========
static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
static String username = "news";
static String password = "news";
static String driverClassName = "oracle.jdbc.driver.OracleDriver"; //获取数据库连接
public static Connection getConnection(){ Connection connection = null; try {
//加载驱动
Class.forName(driverClassName); //获取连接
connection = DriverManager.getConnection(url,username,password); } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return connection;
} /*
* 释放连接
* */
public void close_con(Connection connection,Statement st,ResultSet rs){ try {
if(connection!= null){
connection.close();
}
if(st!= null){
st.close();
}
if(rs!= null){
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
package entity; /**
* 用户实体
* @author Administrator
*
*/
public class User { private String username;
private String password; public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }
package Dao;
import java.util.List; import entity.User; /**
* 用户数据访问层接口
* @author Administrator
*
*/
public interface UserDao { /**
* 查询用户是否存在
* @param user
* @return
*/
public boolean findUser(User user); /**
* 查询用户列表
*/
public List<User> findUserList(); }
package Dao.Impl; 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 DB.BaseDao;
import Dao.UserDao;
import entity.User; /**
* 用户数据访问层实现类
* @author Administrator
* 继承数据库连接类
*/
public class UserDaoImpl extends BaseDao implements UserDao { //数据库连接对象
Connection conn = null;
PreparedStatement stm = null;
ResultSet rs = null; /**
* 实现查询用户功能
*/
public boolean findUser(User user) {
//获得连接
conn = this.getConnection();
//编写sql
String sql = "select * from news_users where uname = ? and upwd = ?";
try { //得到预编译对象
stm = conn.prepareStatement(sql);
stm.setString(1, user.getUsername());
stm.setString(2, user.getPassword()); //执行sql得到结果集
rs = stm.executeQuery(); return rs.next();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放连接
this.close_con(conn, stm, rs);
} return false;
} /**
* 查询用户列表
*/
public List<User> findUserList() {
//获得连接
conn = this.getConnection();
//编写sql
String sql = "select * from news_users"; //创建泛型集合
List<User> userlist = new ArrayList<User>();
try { //得到预编译对象
stm = conn.prepareStatement(sql); //执行sql得到结果集
rs = stm.executeQuery();
while(rs.next()){
User user = new User();
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3)); userlist.add(user);
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}finally{
//释放连接
this.close_con(conn, stm, rs);
} return userlist;
} }
package Biz; import java.util.List; import entity.User; /**
* 用户业务逻辑层接口
* @author Administrator
*
*/
public interface UserBiz { /**
* 用户登录
* @param user
* @return
*/
public boolean login(User user); /**
* 查询用户列表
*/
public List<User> finduserList(); }
import Dao.UserDao;
import Dao.Impl.UserDaoImpl;
import entity.User;
/**
* 用户业务逻辑实现类
* @author Administrator
*
*/
public class UserBizImpl implements UserBiz { //创建数据访问层对象
UserDao userdao = new UserDaoImpl(); /**
* 实现登录
*/
public boolean login(User user) {
//调用数据访问层查询用户
return userdao.findUser(user);
} /**
* 查询用户列表
*/
public List<User> finduserList() {
// TODO Auto-generated method stub
return userdao.findUserList();
} }
JSP页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<form action="dologin.jsp" method="post">
<p>用户名:<input type="text" name="username" /></p>
<p>密 码:<input type="password" name="password" /></p>
<input type="submit" />
</form>
</body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="Biz.UserBiz"%>
<%@page import="Biz.Impl.UserBizImpl"%>
<%@page import="entity.User"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; //调用业务逻辑层
UserBiz userbiz = new UserBizImpl(); //获取表单项
request.setCharacterEncoding("utf-8"); String username = request.getParameter("username");
String password = request.getParameter("password"); //创建用户实体
User user = new User();
user.setUsername(username);
user.setPassword(password); //实现登录
boolean f = userbiz.login(user); if(f){
request.getRequestDispatcher("success.jsp").forward(request,response);
}else{
%>
<script type="text/javascript">
alert("用户名或密码错误!");
location.href="index.jsp";
</script>
<%
} %>
Java_Web之分层架构的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- 应用程序框架实战十八:DDD分层架构之聚合
前面已经介绍了DDD分层架构的实体和值对象,本文将介绍聚合以及与其高度相关的并发主题. 我在之前已经说过,初学者第一步需要将业务逻辑尽量放到实体或值对象中,给实体“充血”,这样可以让业务逻辑高度内聚, ...
- 应用程序框架实战十七:DDD分层架构之值对象(层超类型篇)
上一篇介绍了值对象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意见.这其实是很自然的事情,设计本来就充满了各种可能性,没有绝对正确的做法,只有更好的实践.但是设计与实践的好与坏,对于不 ...
- 应用程序框架实战十六:DDD分层架构之值对象(介绍篇)
前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使用DDD分层架构,但你却从来没有使 ...
- 应用程序框架实战十五:DDD分层架构之领域实体(验证篇)
在应用程序框架实战十四:DDD分层架构之领域实体(基础篇)一文中,我介绍了领域实体的基础,包括标识.相等性比较.输出实体状态等.本文将介绍领域实体的一个核心内容——验证,它是应用程序健壮性的基石.为了 ...
- 应用程序框架实战十四:DDD分层架构之领域实体(基础篇)
上一篇,我介绍了自己在DDD分层架构方面的一些感想,本文开始介绍领域层的实体,代码主要参考自<领域驱动设计C#2008实现>,另外参考了网上找到的一些示例代码. 什么是实体 由标识来区分的 ...
- 应用程序框架实战十三:DDD分层架构之我见
前面介绍了应用程序框架的一个重要组成部分——公共操作类,并提供了一个数据类型转换公共操作类作为示例进行演示.下面准备介绍应用程序框架的另一个重要组成部分,即体系架构支持.你不一定要使用DDD这样的架构 ...
- .NET应用架构设计—重新认识分层架构(现代企业级应用分层架构核心设计要素)
阅读目录: 1.背景介绍 2.简要回顾下传统三层架构 3.企业级应用分层架构(现代分层架构的基本演变过程) 3.1.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴露 ...
随机推荐
- springcloud(六):给Eureka Server服务器端添加用户认证
1. 还未完成 ,客户端有点问题,后期完善 2.
- 个人学习记录--取表中Name相同的最大值,非Group By,可延伸
), qy ), je INT); INSERT INTO @t SELECT '产品一', '北京', UNION ALL SELECT '产品一', '上海', UNION ALL SELECT ...
- linux学习3-简单磁盘管理
简单的磁盘管理 下面涉及的命令具有一定的危险性,操作不当可能会丢失你的个人数据,初学者建议在虚拟环境中进行操作 通常情况下,这一小节应该直接将如何挂载卸载磁盘,如何格式化磁盘,如何分区,但如你所见,我 ...
- hadoop datanode usages方差算法
stdDev 标准差(方差) 阐述及应用 简单来说,标准差是一组数值自平均值分散开来的程度的一种测量观念.一个较大的标准差,代表大部分的数值和其平均值之间差异较大:一个较小的标准差,代表这些数值较接近 ...
- Scrapy——6 APP抓包—scrapy框架下载图片
Scrapy——6 怎样进行APP抓包 scrapy框架抓取APP豆果美食数据 怎样用scrapy框架下载图片 怎样用scrapy框架去下载斗鱼APP的图片? Scrapy创建下载图片常见那些问题 怎 ...
- [luoguP2024] 食物链(并查集)
传送门 经典的并查集问题 对于这种问题,并查集需要分类 开3*n的并查集,其中x用来连接与x同类的,x+n用来连接x吃的,x+2*n用来连接x被吃的. 1 x y时,如果 x吃y 或 x被y吃,那么为 ...
- 【Todo】Java TreeSet学习 & ceiling,floor
参考 http://www.yiibai.com/java/util/java_util_treeset.html 另,用Java的TreeSet的ceiling可以模拟upper_bound(获得更 ...
- Libs文件夹下的Jar文件为什么不会自己主动放在Android Private Libraries文件夹下
简而言之:这个问题就是由jar包反复冲突了! 这个问题一開始我出现了一种"自以为是"的答案,在Android Private Libraries文件夹下的是会打包到project可 ...
- Maven中的dependency的scope作用域详解
1.test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖 2.compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去 3.provided依赖:在编译和测试的过程有效,最后 ...
- 《Android源代码设计模式解析与实战》读书笔记(十八)
第十八章.代理模式 代理模式也称托付模式,是结构型设计模式之中的一个.是应用广泛的模式之中的一个. 1.定义 为其它对象提供一种代理以控制对这个对象的訪问. 2.使用场景 当无法或不想直接訪问某个对象 ...