Java Web 三层架构

一.Why?为什么要分层?

 1.jsp开发的弊端。

1)业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护。

eg:在JSP页面中连接数据库 

 <form method="post" action="doLogin.jsp">
      <table>
         <tr>
    	<td>用户名称:<input type="text" name="user"/></td>
         </tr>
…
<%
    String uname=request.getParameter("user");
    String upwd=request.getParameter("pwd");
    String driverClassName ="oracle.jdbc.driver.OracleDriver";
    String url ="jdbc:oracle:thin:@10.0.0.34:1521:PRD34";
…

二.软件设计中的分层模式

1.分层模式

1)分层模式是最常见的一种架构模式.

2)分层模式是很多架构模式的基础.

2.分层

1)将解决方案的组件分隔到不同的层中.

2)在同一个层中组件之间保存内聚性.

3)层于层子间保存松耦合.

 

三. 三层架构

1.What?什么是三层?

1)表示层(UI:只要是指与用户交互的界面,用于接收用户输入的数据和显示处理后用户需要的数据

2)业务逻辑层(BLL:表示层和数据访问层之间的桥梁,实现业务逻辑,具体包含:验证,计算,业务  规则等等

3)数据访问层(DAL):与数据库打交道,只要实现对数据的增,删,改,查

2.How?怎样理解三层? 

1)通俗来讲,就是我们所知的代码可能存在多个包eg:utli包、ui包、dao包,而我们在ui包直接调用dao包里面的方法,这样是不妥当的,我们需要在中间加一个包实现隔离的效果。

2)ui直接调用dao不妥当,我们需要分层,加一个Biz包,我们需要ui调用BizBiz调用dao来实现我们的各个功能!

3)那我们通常将ui包称为表示层Biz包称为业务逻辑层dao包称为数据库访问层

3.补充: (实体层)

 1)其实有一个层贯穿了所有的层,那就是业务实体层Entity )

 2)三层架构效果图如下:

四.分层实现用户登录 

1. 实现方式:

1)在开发时建立以下几个包:

 

 2)各种类型包的含义:

        * biz:存放业务逻辑层接口

        * biz.imp:存放业务逻辑层的实现类

        * dao:存放数据访问层的接口

        * dao.imp:存放数据访问层的实体类

        * entity:存放实体类

        * util:存放帮助类,如DBHelper

 3)dao(数据库访问层用户接口&实现类代码):

package com.zking.dao;
import com.zking.entity.Users;

/**
 * 用户的接口(声明方法)
 * 用户的数据访问层接口
 * @author zjjt
 */
public interface IUserDao {
	/**
	 * 用户登录方法
	 * @param uname 用户名
	 * @param upwd 用户密码
	 * @return 登录成功返回用户对象,否返回null
	 */
	public Users login(String uname,String upwd);
	

/**
 * 用户的实现类
 * 用户的数据访问层实现类
 * @author zjjt
 *
 */
public class Imp_UserDao implements IUserDao{
	
	public Users login(String uname,String upwd) {
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		Users users=null;
		
		try {
			con=DBHelper.getCon();
			ps=con.prepareStatement("select*from T277 where uname=? and upwd=?");
			ps.setString(1, uname);
			ps.setString(2, upwd);
			rs=ps.executeQuery();
			
			if(rs.next()) {
				users=new Users(rs.getInt(1),uname,upwd,rs.getString(4));
			}
		} catch (Exception e) {
			e.printStackTrace();
			// TODO: handle exception
		}finally {
			DBHelper.closeDb(con, ps, rs);
		}
		return null;
	}
	public int register(Users users) {
		return 0;
	}
}

 4) Biz(业务逻辑层用户接口&实现类代码):

package com.zking.biz;

import com.zking.entity.Users;

/**
 * 用户的业务逻辑接口
 * @author zjjt
 *
 */
public interface IUserBiz {
	
	/**
	 * 用户登录方法
	 * @param uname 用户名
	 * @param upwd 用户密码
	 * @return 登录成功返回用户对象,否返回null
	 */
	public Users login(String uname,String upwd);
}

/**
 * 用户的业务逻辑层实现类
 * @author zjjt
 *
 */
public class Imp_UserBiz implements IUserBiz{
	//多态
	IUserDao iud=new Imp_UserDao();
	
	public Users login(String uname, String upwd) {
		// TODO Auto-generated method stub
		return iud.login(uname, upwd);
	}

5)ui(表示层):这里就是调用Biz业务逻辑层的login方法,而不是直接调用Dao数据库访问层的login方法了。

 
//表示层a 调用 业务逻辑层b
	IUserBiz iud=new UserBiz();
	//调用登录方法
	User u=iud.login(name, pwd);
	//判断
	if(u!=null){
		//登录成功
		out.print("登录成功");
	}
	else{
		//说明登录失败
		out.print("<script>alert('用户名或者密码错误');location.href='login.jsp';</script>");
    }

 厌倦一切盛大的开场,我总隐约觉得,故事的开头不应该如此隆重,导致所有的后来都在往下走。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隔竹观尘世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值