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.服务层中应用契约式设计来解决动态条件不匹配错误(通过契约式设计模式来将问题在线下暴露 ...
随机推荐
- 洛谷 3391 【模板】文艺平衡树 Treap区间翻转
[题解] 用Treap维护这个序列. 加入的时候直接插入到末尾,这样Treap就变成一棵以插入时间先后为排序关键字的二叉搜索树. 对于翻转操作,我们分裂出需要翻转的区间,给这个区间的root打一个翻转 ...
- 53. Maximum Subarray(动态规划)
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- vue中对象属性改变视图不更新问题
常规情况下我们在vue实例的data中设置响应数据.但当数据为对象,我们增加或删除对象属性值时,视图并不触发更新,如何解决这个问题呢? let vm = new Vue{ el: '#app', da ...
- sublime3设置快捷键在浏览器打开预览
我下的st3默认不能使用快捷键在浏览器打开,所以要找到源文件然后选择在浏览器打开,非常麻烦.找了很久,终于找到了一个在浏览器打开的快捷方式. 亲测有效. 1.确保你的st3已经安装了package c ...
- open cursor too much error
今天遇到一个错误ORA-01000: maximum open cursors exceeded. 客户想增加 DB 的open_cursor这个参数. 但是我看了下,她的程序要打开几千个cursor ...
- JAVA模拟登录实例
近期在做公司一个web项目.要求在我们的系统上,可以显示其它站点上的数据. 刚開始接到这个任务时,还在想.简单的非常.直接用UrlConection直接进入该网页,然后获取该网页的html,取到想要的 ...
- 【JavaScript】正則表達式
正則表達式,也不是第一次与它见面了.在我们学习ASP.NET视频的时候,验证控件的那个实例中.就有提到过它. 那个时候.都是在控件的属性中自己设置的,用的原理就是正則表達式,当时得感觉就是方便,强大, ...
- HDU1698 Just a Hook 【线段树】+【成段更新】+【lazy标记】
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- [Android]Fragment源代码分析(三) 事务
Fragment管理中,不得不谈到的就是它的事务管理,它的事务管理写的很的出彩.我们先引入一个简单经常使用的Fragment事务管理代码片段: FragmentTransaction ft = thi ...
- 成都传智播客java就业班激情洋溢的青春篮球赛
为了缓解学员们的学习压力,也为了培养学员们的团队协作精神,5月28日下午,在班主任倪老师和王老师联手带领下,我们1406280ls" style="color:rgb(51,102 ...