三层架构集成

往期回顾(想看详细的可以去我主页自行查找)

JSP基本介绍和Tomcat

基本语法和表单提交

  • 基本指令
    • <%=输入内容 %>
    • <% java脚本 %>
    • <%@page 页面指令 %>
    • <%@include 包含指令 %>
  • 表单提交方式
    • get 通过地址栏带参,参数有长度限制
    • post 不通过地址栏带参,参数没有长度限制
    • 文件上传的时候 必须是post,必须是多段式表单

页面跳转

  • jsp的跳转方式
    • 转发 forward
      • 可以携带数据(请求中的)
      • 地址栏不变
      • 是服务器行为
    • 重定向 redirect
      • 不可以携带数据(请求中的)
      • 地址栏变
      • 是客户端行为

Session和Cookie

【都可以设定存在时间:session-30分钟,cookie-浏览器关闭】

  • session 服务端存储

  • cookie 客户端存储

    应用场景:

    • 浏览记录 cookie
    • 鉴权 session
    • 存数据库里面,缓冲数据库

富文本编辑器和文件上传

  • 富文本编辑器 (把你输入的语句变成了html来保存)
  • 文件上传
    • 文件上传的主要操作
      • 1.将文件保存到电脑路径中
      • 2.将保存的电脑路径存到数据库
      • 3.绑定tomcat映射,为你保存文件的目录加上一个访问路径
    • 如果诞生一个不重复的名字
      • 使用UUID UUID.randomUUID()

三层架构

没有学习三层架构:

  • jsp 将页面显示出来
    • dao 去数据库取数据,处理数据
    • dao层:1.拿数据 2.负责处理数据【系统的耦合性:各个模块连接的紧密度】

【三层架构】

  • 各司其职
  • 高内聚,低耦合

【结构】

  • 表示层
  • 业务逻辑层 biz
  • 数据库访问层 dao

【调用顺序】
表示层->业务逻辑层->数据库访问层—|
|
表示层<-业务逻辑层<-数据库访问层 <-|

【命令规则】
com.biz -> Biz接口
com.biz.impl ->Biz的接口实现类
com.dao -> Dao接口
com.dao.impl -> Dao接口的实现类

三层架构实例

建包和建类和接口
三层架构集成_第1张图片

util包:DBHelper:数据库连接包

package com.test.util;
/**
 * 连接数据库的工具包
 * @author 绥彼岸
 *
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.driver.OracleDriver;

public class DBHelper {
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;
	//导入驱动(sqlserver,oracle,mysql),一定要执行 build path,且需要导入对应的jar包
	static {
	//OracleDriver
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	//编写连接语句
	private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	/**
	 * 获得连接的方法
	 * @return
	 */
	public static Connection getCon() {
		try {
			return DriverManager.getConnection(URL,"scott","tiger");
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	/**
	 * 关闭资源的方法
	 * @param con
	 * @param ps
	 * @param rs
	 */
	public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
		try {
			if(con!=null&&!con.isClosed()) {
				con.close();
			}
			if(!ps.isClosed()) {
				ps.close();
			}
			if(!rs.isClosed()) {
				rs.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	//测试是否连接到了数据库
	public static void main(String[] args) {
		System.out.println(DBHelper.getCon());
	}
}

pojo包:User:用户的实体类

package com.test.pojo;
/**
 * 用户的实体类
 * @author 绥彼岸
 *
 */
public class User {
	private int userId;
	private String userName;
	private String userPwd;
	
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPwd() {
		return userPwd;
	}
	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}
	
	public User() {
		// TODO Auto-generated constructor stub
	}
	
	public User(int userId, String userName, String userPwd) {
		super();
		this.userId = userId;
		this.userName = userName;
		this.userPwd = userPwd;
	}
	
}

biz包:IUserBiz:业务逻辑层的接口

package com.test.biz;

import com.test.pojo.User;
/**
 * 业务逻辑层的接口
 * @author 绥彼岸
 *
 */
public interface IUserBiz {

	String login(User user);
	
}

biz.impl包:UserBizImpl:业务逻辑层接口的实现类

package com.test.biz.impl;

import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
 * 业务逻辑层接口的实现类
 * @author 绥彼岸
 *
 */

package com.test.biz.impl;

import com.test.biz.IUserBiz;
import com.test.dao.IUserDao;
import com.test.dao.impl.UserDaoImpl;
import com.test.pojo.User;
/**
 * 业务逻辑层接口的实现类
 * @author 绥彼岸
 *
 */

public class UserBizImpl implements IUserBiz{
	private IUserDao userDao=new UserDaoImpl();
	
	@Override
	public String login(User user) {
		User use = userDao.login(user);
		//判断账号是否正确,正确的话不会为null
		if(use==null) {
			return "account not found";
		}
		//判断密码是否正确
		if(!use.getUserPwd().equals(user.getUserPwd())) {
			return "password error";
		}
		//登录成功
		return "login success";
	}
}

dao包:IUserDao:数据库访问层的接口

package com.test.dao;

import com.test.pojo.User;
/**
 * 数据库访问层的接口
 * @author 绥彼岸
 *
 */

public interface IUserDao {
	
	User login(User user);

}

dao.impl包:UserDaoImpl:数据库访问层接口的实现

package com.test.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.test.dao.IUserDao;
import com.test.pojo.User;
import com.test.util.DBHelper;
/**
 * 数据库访问层接口的实现
 * @author 绥彼岸
 *
 */
public class UserDaoImpl implements IUserDao{
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;
	
	@Override
	public User login(User user) {
		try {
			con = DBHelper.getCon();
			String sql="SELECT * FROM T_USER WHERE USE_NAME=?";
			ps=con.prepareStatement(sql);
			ps.setString(1, user.getUserName());
			rs=ps.executeQuery();
			if(rs.next()) {
				User use=new User();
				use.setUserName(rs.getString(2));
				use.setUserPwd(rs.getString(3));
				return use;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

你可能感兴趣的:(笔记,eclipse,java,tomcat)