JavaWeb.12.三层架构项目集成

这次的复习内容全是干货,一起来抓紧消化吧!


目录:

        复习前面课程:

        关于三层架构:

                在没有学习三层架构之前的做法?

                在学了三层架构之后?

        具体代码的展示:

        运行结果?

        


  复习前面课程:

  jsp第一次:

         * 什么是jsp?

        a. 是一种文件格式

        b. 写java,html,css,js

        c. 本质上是java的额外封装,解析过程中优先解析java

                <a href=“<%="www.baidu.com"%>”>       

        d. .jsp —> .java —> .class —> jvm执行

        

        * 安装tomket?

        — 默认端口 8080

        — 如果出现了端口异常,修改端口

第二次课:

        * 基本指令?

        — <%=输入内容 %>

         — <%= java脚本 %>

         — <%=@page 页面指令 %>

         — <%=include 包含命令 %>

     

        * 表单提交方式

        a. get 通过地址栏带参,参数有长度限制,显示在地址栏上(默认)

        b. post 不通过地址栏带参,参数没有长度限制,不显示在地址栏上

         ——  文件上传的时候,必须是post,必须是多段式表单

第三次课:

        * jsp 的跳转方式

        — 转发 forward

                a. 可以携带数据(请求中的)

                b. 地址栏不变

                c. 是服务器行为

        — 重定向 redirect

                a. 不可以携带数据(请求中的)

                b. 地址栏会变

                c. 是客户端行为

第四次课:

        * jdbc :

        — jdbc:oracle:thin:@localhost:1521:orcl

第七次课:

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

        * session 服务端存储

        * cookie 客户端存储

        应用场景:

        * 浏览记录 cookie

        * 鉴权 session

        * 存数据库里面,缓冲数据库

第九次课:

        * sql 语句怎么写?规律?

        【规律】 page 当前页数        rows 显示条数

                        page:1        rows:10        1~10

                        page:2        rows:10        11~20

                        page:3        rows:10        21~30

                begin:(开始位置):(page-1)*rows+1

                end:(结束位置):page*rows

        【sql】(将虚列变成实列

                select * from(

                        select a.*,rownum myr from stu a

)b where myr between begin and end;

第十次课:

        * 文件上传

        — 文件上传的主要操作

        a. 将文件保存到电脑路径中

        b. 将保存的电脑路径存到数据库

        c. 绑定tomcat映射,为你保存文件的目录加上一个访问路径

        — 如果诞生一个不重复的名字

        a. 使用 UUID        UUID.randomUUID()

        

        * 富文本编辑器(把你输入的语句变成了html来保存)


关于三层架构:

   没有学习三层架构之前的做法:

        * jsp 将页面显示出来

        * dao 去数据库取数据,处理数据

        dao层:1.拿数据 2.负责处理数据

        【系统的耦合性:各个模块连接的紧密度】

【三层架构】

        a. 各司其职

        b. 高内聚,低耦合(高内聚:自己做自己该做的事  低耦合:降低紧密度)

【结构】

        a. 表示层        服务员

        b. 业务逻辑层        biz        厨师

        c. 数据库访问层        dao        买菜的人

【调用顺序】

        表示层—> 业务逻辑层—> 数据库访问层—> 

        数据库访问层—> 业务逻辑层—> 数据库访问层

【命令规则】

        com.biz—>Biz 接口

        com.biz—>impl—>Biz接口实现类

        com.dao—>Dao接口

        com.dao.impl—>Dao接口的实现类


【具体代码展示:】

        首页 index.jsp的代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="doLogin.jsp" method="post" >
	<p><input type="text" name="username"></p>
	<p><input type="text" name="password"></p>
	<p><button>登录</button></p>
	
	</form>
</body>
</html>

        做登录doLogin.jsp的代码:

<%@page import="com.zking.biz.impl.UserBizImpl"%>
<%@page import="com.zking.biz.IUserBiz"%>
<%@page import="com.zking.pojo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//doLogin 是表示层

	//取到用户的数据
	String username=request.getParameter("username");
	String password=request.getParameter("password");
	
	//将数据封装到实体类中
	User user=new User(0,username,password);
	
	//判断用户是否登录
	
	//面向接口编程:国有国法,家有家规
	//1.先编写接口
	//2.实现该接口
	//3.使用里氏替换原则来声明接口
	//4.可以调用接口的方法了
	IUserBiz userBiz=new UserBizImpl();
	
	String msg=userBiz.login(user);
	

	//【调用顺序】
	//表示层-》业务逻辑层-》数据库访问层----》
	//数据库访问层-》业务逻辑层-》表示层
%>

<h1><%=msg %></h1>

        实体类(用户User.java)的代码:

package com.zking.pojo;

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;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userName=" + userName + ", 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;
	}
	
	
	
	
	

}

        帮助包 DBHelper的代码:

package com.zking.util;

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

import com.sun.net.httpserver.Authenticator.Result;

import oracle.jdbc.driver.OracleDriver;

public class DBHelper {
	
	//加载驱动
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
	}
	
	//定义连接字符串
	private static final String URL="jdbc:oracle:thin:@localhost:1521:orcl";
	
	//获得连接
	public static Connection getCon() {
		
		try {
			return DriverManager.getConnection(URL, "scott", "123");
		} catch (Exception e) {
			e.printStackTrace();
			
		}
		return null;
		
	}
	
	//关闭资源
	public static void close(Connection con,PreparedStatement ps,ResultSet rs) {
		try {
			if(con!=null&&!con.isClosed()){
				con.close();
			}
			if(ps!=null){
				ps.close();
			}
			if(rs!=null){
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			
		}
		
	}
	
	
}

        用户接口 IUserBiz的代码:

package com.zking.biz;

import java.util.List;

import com.zking.pojo.User;

public interface IUserBiz {
	
	String login(User user);
	
	List<User> queryAll();


}

        用户接口的实现类 UserBizImpl的代码:

package com.zking.biz.impl;

import java.util.List;

import com.zking.biz.IUserBiz;
import com.zking.dao.IUserDao;
import com.zking.dao.impl.UserDaoImpl;
import com.zking.pojo.User;

public class UserBizImpl implements IUserBiz{
	
	//需要调用dao层的方法
	
	//一个厨师对应多个送菜的人
	private IUserDao userDao=new UserDaoImpl();
	

	@Override
	public String login(User user) {
		User u=userDao.login(user);
		
		//user 表示层给我的
		//u 数据库来的
		
		if(u==null) {
			return "account not found";
		}
		if(!u.getUserPwd().equals(user.getUserPwd())) {
			return "password error";
		}
		
		return "login success";
	}


	@Override
	public List<User> queryAll() {
		return userDao.queryAll();
	}
	
	

}

        用户接口的dao IUserDao的代码:

package com.zking.dao;

import java.util.List;

import com.zking.pojo.User;

public interface IUserDao {
	
	User login(User user);
	
	List<User> queryAll();

}

        用户dao的实现类 UserDaoImpl的代码:

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.IUserDao;
import com.zking.pojo.User;
import com.zking.util.DBHelper;

public class UserDaoImpl implements IUserDao{
	
	private Connection con;
	private PreparedStatement ps;
	private ResultSet rs;
	
	public List<User> queryAll(){
		return null;
	}
	

	@Override
	public User login(User user) {
		//连接数据库
		try {
			con=DBHelper.getCon();
			String sql="select * from t_user where user_name=?";
			ps=con.prepareStatement(sql);
			ps.setString(1, user.getUserName());
			rs=ps.executeQuery();
			if(rs.next()) {
				//将用户赋值给User对象
				User u=new User();
				u.setUserName(rs.getString(2));
				u.setUserPwd(rs.getString(3));
				return u;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			DBHelper.close(con,ps,rs);
		}
		
		return null;
	}

}

        商品的实体类 Goods的代码:

        商品接口 IGoodsBiz的代码:

package com.zking.biz;

import java.util.List;

import com.zking.pojo.Goods;

public interface IGoodsBiz {
	
	int insertGoods(Goods goods);
	
	int deleteGoods(Goods goods);

	int editGoods(Goods goods);

	List<Goods> queryGoods(Goods goods);


}

        商品的实现类 GoodsBizImpl的代码:

package com.zking.biz.impl;

import java.util.List;

import com.zking.biz.IGoodsBiz;
import com.zking.dao.IGoodsDao;
import com.zking.dao.impl.GoodsDaoImpl;
import com.zking.pojo.Goods;

public class GoodsBizImpl implements IGoodsBiz{
	
	private IGoodsDao goodsDao=new GoodsDaoImpl();

	@Override
	public int insertGoods(com.zking.pojo.Goods goods) {
		return goodsDao.insertGoods(goods);
	}

	@Override
	public int deleteGoods(com.zking.pojo.Goods goods) {
		return goodsDao.deleteGoods(goods);
	}

	@Override
	public int editGoods(com.zking.pojo.Goods goods) {
		return goodsDao.editGoods(goods);
	}

	public List<Goods> queryGoods(Goods goods){
		return goodsDao.queryGoods(goods);
	}


}

        商品的接口dao IGoodsDao的代码:

package com.zking.dao;

import java.util.List;

import com.zking.pojo.Goods;

public interface IGoodsDao {
	
	int insertGoods(Goods goods);
	
	int deleteGoods(Goods goods);

	int editGoods(Goods goods);

	List<Goods> queryGoods(Goods goods);

}

运行结果如下图:

如果登录账号密码正确的话:

 那么就会这样:

 如果账号正确,密码错误:

那么结果就是:

那么如果账号密码都输入错误的话:

 所以结果就是:


今天的分享就到这里,感谢大家的观看!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值