javaweb-三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

顾名思义,三层架构分为三层,分别是“数据访问层”、“业务逻辑层”、“表示层”。

数据访问层

:数据访问层在作业过程中访问数据系统中的文件,实现对数据库中数据的读取保存操作。

表示层

:主要功能是显示数据和接受传输用户的数据,可以在为网站的系统运行提供交互式操作界面,表示层的应用方式比较常见,例如Windows窗体和Web页面。

业务逻辑层

:将用户的输入信息进行甄别处理,分别保存。建立新的数据存储方式,在存储过程中对数据进行读取,将“商业逻辑”描述代码进行包含。
三层架构软件系统为用户的数据传输、提取、储存创造了便利条件。在应用数据时,信息划分架构开发项目,对各层次之间的工作职责进行清晰规划,这样就降低了网站系统的维护风险。 [1]

与MVC设计模式的目标一致:都是为了解耦和,提高代码复用
区别:二者对项目理解的角度不同

三层组成:

表示层(USL,UserShowLayer;视图层)
–前台:对应于MVC中的View,用于和用户交互,界面的显示
jsp js html css jQuery等web等前端技术
代码位置:WebContent
–后台:对用于MVC中Controller,用于控制跳转,调用业务逻辑层
servlet (SpringMVC Struts2)
代码位置:xxx.servlet包中

业务逻辑层(BLL, BusinessLogicLayer; Service层)
–接受表示层的请求 调用
–组装数据访问层,逻辑性的操作(增删该查,删:查+删)
代码位置:xxx.service包中

数据访问层(DAL,DataAccessLayer;Dao层)
–直接访问数据库的操作,原子性的操作(不可拆分)(增删改查)
代码位置:xxx.Dao包中<

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
用三层解决登陆问题:
表示层前台:(login.jsp)

<%@ 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>
	<%
		if(request.getAttribute("error")!=null){
			out.print("<script type='text/javascript'>alert('密码或用户名错误!');</script>");
		}

	%>
	<form action="loginServlet" method="post">
		用户名:<input type="text" name = "uname">
		密码:<input type= "text" name = "upassword">
		<input type = "submit" value = "登陆">
	</form><br/>
	
	<a href = "netRom.jsp">网盘</a>
	<a href = "signup.jsp">注册新用户</a>

</body>
</html>

表示层后台:(loginServlet.java)

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ServiceImpl.loginService;
import entity.admin;

@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public loginServlet() {}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("uname");
		String password = request.getParameter("upassword");
		admin admin = new admin(name,password);
		
		int result = loginService.login(admin);
		
		if(result != -1){
			request.getRequestDispatcher("getUserByPage").forward(request, response);
		}else{
			request.setAttribute("error", "error");
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

业务逻辑层:(loginService.java)

package ServiceImpl;

import java.sql.*;

import DaoImpl.DbDaoimpl;
import entity.admin;

//使用DbDao中的函数实现登陆验证
public class loginService {
	public static int login(admin admin){
		try{
			String sql = "SELECT id FROM admin WHERE username = ? and password = ?";
			ResultSet resultSet = new DbDaoimpl().Select(sql, admin.getName(),admin.getPassword());
			if(resultSet.next()){
				return resultSet.getInt(1);
			}
			return -1;
		}catch(Exception e){
			e.printStackTrace();
			return -1;
		}
	}
}

数据访问层:(DbDaoImpl.java)

	public ResultSet Select(String sql,Object... args){
		try{
			PreparedStatement pre = prepared(sql,args);
			return pre.executeQuery();
		}catch(Exception e){
			System.out.println("DbDao中Selete错误!");
			e.printStackTrace();
			return null;
		}

	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值