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

一、初略总结

1、什么是jsp?

a. 是一种文件格式
b. 写java,html,css,js
c. 本质上是java的额外封装,解析过程中优先解析java<a href=“<%=“www.baidu.com”%>”>
d. .jsp —> .java —> .class —> jvm执行

2、安装tomket?

默认端口 8080
如果出现了端口异常,修改端口

3、基本指令?

<%=输入内容 %>
<%= java脚本 %>
<%=@page 页面指令 %>
<%=include 包含命令 %>

4、表单提交方式

get 通过地址栏带参,参数有长度限制,显示在地址栏上(默认)
post 不通过地址栏带参,参数没有长度限制,不显示在地址栏上
—— 文件上传的时候,必须是post,必须是多段式表单

5、jsp 的跳转方式

   — 转发 forward

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

            b. 地址栏不变

            c. 是服务器行为

    — 重定向 redirect

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

            b. 地址栏会变

            c. 是客户端行为

6、 jdbc :

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

7、session与cookie

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

    * session 服务端存储

    * cookie 客户端存储

    应用场景:

    * 浏览记录 cookie

    * 鉴权 session

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

8、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;

9、文件上传

    — 文件上传的主要操作

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

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

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

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

    a. 使用 UUID        UUID.randomUUID()

    

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

10、关于三层架构

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

    * jsp 将页面显示出来

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

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

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

2、【三层架构】

    a. 各司其职

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

3、【结构】

    a. 表示层        服务员

    b. 业务逻辑层        biz        厨师

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

4、【结构】

    a. 表示层        服务员

    b. 业务逻辑层        biz        厨师

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

5、【命令规则】

    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、付费专栏及课程。

余额充值