JavaWeb之三层架构

为什么要分层

(JSP开发的弊端 ) 业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护。

分层模式

  • 是最常见的一种架构模式 。
  • 是很多架构模式的基础。

分层

将解决方案的组件分隔到不同的层中 ,在同一个层中组件之间保持内聚性,层与层之间保持松耦合

三层模式的划分

  • 表现层
  • 业务逻辑层
  • 数据库访问层

层与层之间的关系

  • 表现层依赖于业务逻辑层
  • 业务逻辑层依赖于数据访问层

三层开发遵循的原则

  • 上层依赖其下层,依赖关系不跨层
  • 下一层不能调用上一层
  • 下一层不依赖上一层
  • 在上一层中不能出现下一层的概念

分层开发的特点

  • 下层不知道上层的存在(也就是仅仅只完成自己的功能功能,不会去关心结果的使用)
  • 每一层仅知道其下层的存在,忽略其他层的存在(只关心结果不关心过程,JSTL通常会与EL表达式合作实现JSP页面的编码

分层开发的优势

  • 职责划分清晰
  • 无损替换
  • 复用代码
  • 降低了系统内部的依赖程度

栗子:分层实现用户登录

  1. 创建用户实体类
package com.zking.entity;

public class Users {
	private String uuid;
	private String uname;
	private String upwd;
	private String usex;
	private int uage;
	private String uhonney;
	private String uaddress;
	private String upower;
	private String ucomment;
	
	public String getUuid() {
		return uuid;
	}
	public void setUuid(String uuid) {
		this.uuid = uuid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}
	public String getUsex() {
		return usex;
	}
	public void setUsex(String usex) {
		this.usex = usex;
	}
	public int getUage() {
		return uage;
	}
	public void setUage(int uage) {
		this.uage = uage;
	}
	public String getUhonney() {
		return uhonney;
	}
	public void setUhonney(String uhonney) {
		this.uhonney = uhonney;
	}
	public String getUaddress() {
		return uaddress;
	}
	public void setUaddress(String uaddress) {
		this.uaddress = uaddress;
	}
	public String getUpower() {
		return upower;
	}
	public void setUpower(String upower) {
		this.upower = upower;
	}
	public String getUcomment() {
		return ucomment;
	}
	public void setUcomment(String ucomment) {
		this.ucomment = ucomment;
	}
	
	@Override
	public String toString() {
		return "Users [uuid=" + uuid + ", uname=" + uname + ", upwd=" + upwd + ", usex=" + usex + ", uage=" + uage
				+ ", uhonney=" + uhonney + ", uaddress=" + uaddress + ", upower=" + upower + ", ucomment=" + ucomment
				+ "]";
	}
	
	public Users() {
		// TODO Auto-generated constructor stub
	}
	
	/**
	 * @param uuid
	 * @param uname
	 * @param upwd
	 * @param usex
	 * @param uage
	 * @param uhonney
	 * @param uaddress
	 * @param prower
	 * @param ucomment
	 */
	public Users(String uuid, String uname, String upwd, String usex, int uage, String uhonney, String uaddress,
			String upower, String ucomment) {
		super();
		this.uuid = uuid;
		this.uname = uname;
		this.upwd = upwd;
		this.usex = usex;
		this.uage = uage;
		this.uhonney = uhonney;
		this.uaddress = uaddress;
		this.upower = upower;
		this.ucomment = ucomment;
	}
	
	public Users( String uname, String upwd, String usex, int uage, String uhonney, String uaddress,
			String upower, String ucomment) {
		super();
		this.uname = uname;
		this.upwd = upwd;
		this.usex = usex;
		this.uage = uage;
		this.uhonney = uhonney;
		this.uaddress = uaddress;
		this.upower = upower;
		this.ucomment = ucomment;
	}
	
	
	public Users( String uname, String upwd) {
		super();
		this.uname = uname;
		this.upwd = upwd;
	}
	
}
  1. 编写数据访问层
  • 数据访问接口
//数据访问接口
	package com.zking.dao;

import java.util.List;

import com.zking.entity.Users;

public interface IUsersDao {

	/**
	 * 登录方法
	 * @param users
	 * @return
	 */
	int login(Users users);
	int insert(Users users);
	int update(Users users);
	List<Users> query(Users users);
}
  • 数据访问接口的实现
// 数据访问接口的实现
package com.zking.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;

import com.zking.dao.IUsersDao;
import com.zking.entity.Users;
import com.zking.util.DBhelper;

public class UsersDao implements IUsersDao{

	private PreparedStatement ps;
	private List<Users> listusers;
	private Connection con;
	private ResultSet rs;
	private boolean flag;
	private String sql;
	private Users users;
	private int upower;
	private int n;
	
	@Override
	public int login(Users users) {
		try {
			con = DBhelper.getCon();
			sql = "select upower from tb_users where uname=? and upwd=?";
			ps = con.prepareStatement(sql);
			ps.setString(1, users.getUname());
			ps.setString(2,users.getUpwd() );
			rs = ps.executeQuery();
			if(rs.next()) {
				upower = rs.getInt(1);
			}
			
			DBhelper.closeObj(con, ps, rs);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return upower;
	}

	@Override
	public int insert(Users users) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(Users users) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public List<Users> query(Users users) {
		// TODO Auto-generated method stub
		return null;
	}
}
  1. 编写业务逻辑层
  • 编写业务逻辑控制接口IUserBiz
//编写业务逻辑控制接口IUserBiz
package com.zking.biz;

import java.util.List;
import com.zking.entity.Users;

public interface IUsersBiz {
	int login(Users users);
	int insert(Users users);
	int update(Users users);
	List<Users> query(Users users);
}
  • 业务逻辑层接口实现
// 业务逻辑层接口实现
	package com.zking.biz.impl;

import java.util.List;

import com.zking.biz.IUsersBiz;
import com.zking.dao.IUsersDao;
import com.zking.dao.impl.UsersDao;
import com.zking.entity.Users;

public class UsersBiz implements IUsersBiz{
//	在业务逻辑层biz里面调用数据访问层
	IUsersDao iud = new UsersDao();// 里氏替换原则
	
	@Override
	public int login(Users users) {
		return iud.login(users);
	}

	@Override
	public int insert(Users users) {
		return insert(users);
	}

	@Override
	public int update(Users users) {
		return update(users);
	}

	@Override
	public List<Users> query(Users users) {
		return query(users);
	}
}
  • 编写表示层
    编写登录jps界面
//   编写登录jps界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form>
		账号:<input type="text" name="uname" /><br/>
		密码:<input type="password" name="upwd" /><br/>
		<button>登录</button>
	</form>
</body>
</html>
  • jsp界面调用业务逻辑层
//  jsp界面调用业务逻辑层
<%@page import="com.zking.entity.Users"%>
<%@page import="com.zking.biz.impl.UsersBiz"%>
<%@page import="com.zking.biz.IUsersBiz"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
	String uname = request.getParameter("uname");
	String upwd = request.getParameter("upwd");

	Users users = new Users();
	users.setUname(uname);
	users.setUpwd(upwd);
	
//  调用业务逻辑层登录方法
	IUsersBiz iub = new UsersBiz();
	int n = iub.login(users);
%>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值