JavaWEB之三层架构模式

Posted Bugxiu_fu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWEB之三层架构模式相关的知识,希望对你有一定的参考价值。

1.JavaEE的开发模式

完成一件事情或者一个功能的一种常规的“套路”。

下面我们来介绍JSP的开发模式:

1.第一代

JSP页面:html+数据库交互的代码+逻辑判断的代码

2.第二代

利用javaweb-08的javabean模式
JSP页面:HTML+逻辑代码
javabean:数据库交互的代码进行了DAO封装,DAO(直接新DB数据库中进行操作)
Connection conn = DBHelper.getConn();
2.1 servlet
2.2 JavaWEN经典模式:MVC架构
 

3.三层架构模式

简单的说就是将一个程序中的代码分了三个层,每个层做着独立的事情,但是在某种情况下,三层之间又有联系。

web显示层
    职责:显示数据
    jsp(html+css+js+jQuery+bootstrap+easyui等等)
        负责显示内容
    doXXX.jsp  处理页面----将来学习servlet  
    
业务逻辑层
    职责:从数据访问层拿到数据后进行判断限制
    service    IUsersServerDao  UsersServerImpl
    biz           IUsersBiz       UsersBizImpl
    
    S阶段编写业务逻辑层:不考虑任何条件
        直接从数据访问层中拿到数据进行操作即可。
    
    负责:
        1.删除数据:先获取有没有,然后再进行删除
        2.考虑数据库事务处理机制
            事务:在一个模块中,出现多个条件时,利用事务机制来达到一个要么一起成功,要么一起失败的现象。
            事务三个操作:commit提交  savepoint还原点 rollback 回滚(撤销)
            银行转账问题。
            刘凯丰----->转账----->谢凯进    1000万
            update tb_users set money = money-1000 where name = '刘凯丰'
            System.out.println(10/0);//运行时异常
            update tb_users set money = money+1000 where name = '谢凯进';
            
    
数据访问层
    职责:专门从DB数据库中拿数据。
    数据库帮助类DBHelper
    实体DAO:   IUsersDao  UsersDaoImpl

许多代码新手可能不太了解,那么下面我们举个例子:

例子:
饭馆吃饭问题
刘凯丰  顾客
    服务员(负责显示餐馆中所有的菜品)---web显示层
    厨师(根据小厨提供的材料进行有效的组装和加工)--业务逻辑层
    小厨(切菜,洗菜,买菜,其它事情)--数据访问层

目的:    数据删除、登录。

5.分层的实现

S1阶段:实体包,工具包,dao包,ui包;
S2阶段:数据访问层(DAO)、业务逻辑层(BIZ|SERVICES)、表示层(jsp)、实体包。

1. 表示层 jsp+html; 

2. 业务逻辑层 biz/service; 

3. 数据库访问层 dao(访问数据库、文本文件、XML文件)。 

注意:Entity实体类不属于某层,三层都可以调用,主要用于封装数据。

分层实现的优势

  • 职责划分清晰

  • 无损替换

  • 复用代码

  • 降低了系统内部的依赖程度

4.三层架构:表示层、业务逻辑层、数据访问层
    ①表示层:位于最外层 ( 最上层 ),使用户能够直接访问,用于显示数据和接收用户输入的数据,为用户提供一种交互式操作界面。在 Web 应用程      序中,表示层一般以 JSP 文件、HTML文件为主;

    ②业务逻辑层:其主要功能是提供对业务逻辑处理的封装,在业务逻辑层中,通常会定义些接口,表示层通过调用业务逻辑层的接口实现各种操作,      如数据有效性的检验. 业务辑描述等相关功能,业务逻辑层经常放在 service 包或 biz 包下,btz 是英文 buslness 的缩写,意思是 '业务逻 辑";

    ③数据访问层:该层实现对数据的保存和读取操作。数据访问,可以访问关系数椐库、文件或 XML 文档等。数据访问层通常放在 dao 包下,DAO 是英文 Data Access Object 的缩写,意思是 "数据访问对象 ";

下面是课堂案例登录实现验证:

/**
 * 用户管理接口实现类
 * 
 * @author Administrator
 *
 */
public class UsersDaoImpl extends BaseDao implements IUsersdao 
	// 编写dao 写一个复制5个

	@Override
	public Users usersLogin(Users users) 
		// 1.定义各种对象及变量
		Users u = null;// 实体对象
		String sql = "select * from tb_t281_news_users where username = ? and password = ?";
		ResultSet rs = this.executeQuery(sql, new Object[]  users.getUsername(), users.getPassword() );
		try 
			if (rs.next()) 
				u = new Users(rs.getInt("userid"), rs.getString("username"), rs.getString("password"),
						rs.getString("usex"), rs.getString("uaddress"), rs.getString("utelphone"), rs.getInt("urole"),
						rs.getString("udate"));
			
		 catch (Exception e) 
			e.printStackTrace();
		 finally 
			DBHelper.myClose(conn, ps, rs);
		
		return u;
	

  登录验证加载

<title>do登录验证</title>
</head>
<body>
	<%
		//设置编码
		request.setCharacterEncoding("utf-8");

		//获取用户名,密码
		String username = request.getParameter("username");
		String password = request.getParameter("password");

		//实体封装(将username,password加入实体对象)
		Users user = new Users(username, password);

		//调用业务逻辑层
		IusersBiz iud = new UserBizImpl();
		//实现用户登录功能
		Users u = iud.usersLogin(new Users(username, password));

		if (u != null) //登录成功
			//转发到主界面
			response.sendRedirect("zhujiemian.jsp");
		 else //登录失败
				//返回当前登录页面登录
			request.getRequestDispatcher("login.jsp").forward(request, response);
		
	%>

接口类:

/*

*接口类

*/

public interface IusersBiz
    
    public Users usersLogin(Users users);

 接口实现类:

public class UserBizImpl implements IusersBiz
    // 实例化数据访问层 (全局变量)
    private IUsersdao kk = new UsersDaoImpl();

    @Override
    public Users usersLogin(Users users)
        // 调用登录方法
        return kk.usersLogin(users);
    

----------------------------------今天的分享就到这里了,下次分享再见哦-----------------------------------------

JavaWEB快速入门之三层架构[新闻发布系统08]11

一、JavaEE开发模式
    (1)JavaEE开发模式
        开发模式: 指模式在开发过程中总结出的"套路",总结出的一套约定俗称的设计模式。
   

     (2)JavaEE模式
            ① model1模式——【①】JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。

 

             【②】JSP Model1优化后有所改进,把业务逻辑和数据访问的内容放到了JavaBean(狭义JavaBean:实体类,广义JavaBean:实体类,dao,service,工具类)中,而JSP页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让JSP做了过多的工作,JSP中把视图工作和请求调度(控制器)的工作耦合在一起了。

 


            ② model2模式——JSP Model2模式已经可以清晰的看到MVC完整的结构了。JSP:视图层,用来与用户打交道。负责接收数据,以及显示数据给用户;Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图; JavaBean:模型层,完成具体的业务工作,例如:开启、转账等。

 


            ③ 三层架构——三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。


 

 生活原理:

 

 二、三层架构

         (1)表示层(UI)   web层   显示层
                   表示层又称表现层或视图层或用户界面层 UI(User Interface layer):就是实现与用户交互的功能,将用户的需求传达和反馈,即用于接受用户输入的数据,同时反馈相关的输出数据展示给用户。
          【职责】收集用户的数据和需求、展示数据

          (2)业务逻辑层(BLL)
                   业务逻辑层 BLL(Business Logic Layer):是连接表示层和数据访问层的桥梁,实现业务逻辑的功能。可以对接受到的数据进行处理、执行相关的计算等一些逻辑操作。业务逻辑层通过调用数据访问层的各种操作方法,将这些方法按一定的逻辑组合起来实现具体需求,将这个过程比作搭积木的过程。
            【职责】数据加工处理、处理DAO完成业务实现

           (3)数据访问层(DAL )
                      数据访问层又称持久层 DAL (Data access layer):主要用来操作数据库中的数据,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层 BBL。比如在数据访问层定义了一些操作数据的方法,即增、删、改、查的方法,将这些方法比作一块块的积木。
             【职责】想业务层提供数据,将业务层加工后的数据同步到数据库

 创建三级架构:

编写接口——(业务逻辑层):

package com.zking.news.biz;
import com.zking.news.entity.Users;
/**
 * 用户功能接口(业务逻辑层)
 * @author Administrator
 *
 */
public interface IUsersBiz 
	/**
	 * 用户登录
	 */
	Users usersLogin(Users users);			

实现接口:

package com.zking.news.biz.impl;
import com.zking.news.biz.IUsersBiz;
import com.zking.news.dao.IUsersDao;
import com.zking.news.dao.impl.UsersDaoImpl;
import com.zking.news.entity.Users;
public class UsersBizImpl implements IUsersBiz	
	//实例化DAO
	IUsersDao iud = new UsersDaoImpl();
	@Override
	public Users usersLogin(Users users) 
		return iud.usersLogin(users);
	


简单布局:

<%@ 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 action = "doLogin.jsp" method = "post">
	账户: <input type ="text" name = "username"/>
	<br>
	密码 <input type = "password" name = "password"/>
	<br>
	<input type = "submit" value = "登录"/>

</form>
</body>
</html>

中转站(使用三级架构):

<%@page import="com.zking.news.biz.impl.UsersBizImpl"%>
<%@page import="com.zking.news.biz.IUsersBiz"%>
<%@page import="com.zking.news.dao.impl.UsersDaoImpl"%>
<%@page import="com.zking.news.dao.IUsersDao"%>
<%@page import="com.zking.news.entity.Users"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>   
    <%
    	//1.设置编码
    	request.setCharacterEncoding("utf-8");
    
    	//2获取数据
    	String username = request.getParameter("username");
    	String password = request.getParameter("password");

    	//3.封装实体
    	Users users = new Users(username,password);
    	
    	
    	//实例化业务逻辑层
    	IUsersBiz iub = new UsersBizImpl();
    	Users u = iub.usersLogin(users);
    	
    	if(null!=u)
    		//OK
    		request.getRequestDispatcher("home.jsp").forward(request, response);
    	else
    		//no
    		response.sendRedirect("login.jsp");
    	   
    %>
    

三层架构的优势:

  • 1,结构清晰、耦合度低
  • 2,可维护性高,可扩展性高
  • 3,利于开发任务同步进行, 容易适应需求变化

三层架构的优劣势:

  • 1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
  • 2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码
  • 3、增加了代码量,增加了工作量

以上是关于JavaWEB之三层架构模式的主要内容,如果未能解决你的问题,请参考以下文章

Web开发之三层架构

Javaweb的MVC模式和三层架构(框架了解)

JavaWeb(三层架构)

MVC设计模式与JavaWeb的三层架构

浅谈Javaweb经典三层架构和MVC框架模式

JavaWeb::理解MVC模式和三层架构,完成数据的增删改查