Java Web 三层架构

一.Why?为什么要分层?

 1.jsp开发的弊端。

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

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

 
… <% 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)三层架构效果图如下:

Java Web 三层架构_第1张图片

四.分层实现用户登录 

1. 实现方式:

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

Java Web 三层架构_第2张图片 

 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("");
    }

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

你可能感兴趣的:(eclipse,java,java-ee)

用户名称: