Web12——三层架构项目集成

这篇博客回顾了Web开发的基础,包括JSP、表单提交、页面跳转、session与cookie、SQL分页以及文件上传。接着介绍了三层架构的概念,强调各层职责分离,实现高内聚低耦合。具体实现中,展示了登录功能的JSP页面和处理逻辑,以及对应的DAO实现,涉及到数据库连接和实体类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

家人们,我来啦,今天分享的是关于三层架构完美版.

在此之前,让我们先来回顾一下之前那些关于Web的课程:

## jsp第一次

    * 什么是jsp 
        - 是一种文件格式
        - 写java,html,css,js
        - jsp本质上是java的额外封装,解析过程中优先解析java
            <a href="<%="www.baidu.com"%>">
        - .jsp -> .java -> .class -> jvm执行
    * 安装tomcat
        - 默认端口 8080
        - 如果出现了端口异常,修改端口

## 第二次课

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

## 第三次课

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

## 第四次课

    * 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;

## 第十次

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

## 第十一次

    没有学习三层架构:
        * jsp 将页面显示出来
        * dao 去数据库取数据,处理数据
    
        dao层:1.拿数据 2.负责处理数据
        【系统的耦合性:各个模块连接的紧密度】
    
    【三层架构】
        * 各司其职
        * 高内聚,低耦合
    
    【结构】
        * 表示层     服务员
        * 业务逻辑层     biz     厨师
        * 数据库访问层   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="uname"> </p>
   <p><input type="password" name="upwd"> </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 uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");

//将数据封装到实体类中
User user=new User(0,uname,upwd);

//判断用户是否登录
IUserBiz userBiz=new UserBizImpl();

//面向接口编程(国有国法,家有家规)
//1.先编写接口
//2.实现该接口
//3.使用里氏替换原则来声明接口对象
//4.调用接口的方法
String msg=userBiz.login(user);
%>
<h2><%=msg%></h2>

然后我们来建java代码

首先导入jar包

DBHelper

package com.zking.util;

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

import oracle.jdbc.driver.OracleDriver;

public class DBHelper {
//1.加载驱动
	static {
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//2.定义连接语句
	private static final String URL="jdbc:oracle:thin:@loaclhost:1521:orcl";
	
	//3.编写连接语句
	public static Connection getCon() {
		try {
			return DriverManager.getConnection(URL,"scott","tlt1516131462qmt");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void getClose(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();
		}
	}
	
}

然后创建实体类

package com.zking.pojo;

public class User {

	private Integer id;
	private String uname;
	private String upwd;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public String getUpwd() {
		return upwd;
	}
	public void setUpwd(String upwd) {
		this.upwd = upwd;
	}
	
	public User() {
		// TODO Auto-generated constructor stub
	}
	
	public User(Integer id, String uname, String upwd) {
		super();
		this.id = id;
		this.uname = uname;
		this.upwd = upwd;
	}
	
	@Override
	public String toString() {
		return "User [id=" + id + ", uname=" + uname + ", upwd=" + upwd + "]";
	}
	
	
	
	
}

创建IUserBiz(用户逻辑接口类)

package com.zking.biz;

import java.util.List;

import com.zking.pojo.User;

public interface IUserBiz {

	String login(User user);
	List<User> querAll();
	
}

UserBizImpl(用户逻辑接口实现类)


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;
	@Override
	public User login(User user) {
		try {
			con=DBHelper.getCon();
			String sql="select * from web01_user where uname=?";
			ps=con.prepareStatement(sql);
			ps.setString(1,user.getUname());
			rs=ps.executeQuery();
			if(rs.next()) {
				User u=new User();
				u.setUname(rs.getString(2));
				return u;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.getClose(con, ps, rs);
		}
		return null;
	}
	
	
	public List<User> querAll(){
		return null;
	}

	
}

然后新建IUserDao(用户的数据库操作接口类)

package com.zking.dao;

import java.util.List;

import com.zking.pojo.User;

public interface IUserDao {

	User login(User user);
	List<User> querAll();
}

UserDaoImpl(用户的数据库操作接口实现类)

pacpackage 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;
	@Override
	public User login(User user) {
		try {
			con=DBHelper.getCon();
			String sql="select * from web01_user where uname=?";
			ps=con.prepareStatement(sql);
			ps.setString(1,user.getUname());
			rs=ps.executeQuery();
			if(rs.next()) {
				User u=new User();
				u.setUname(rs.getString(2));
				return u;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.getClose(con, ps, rs);
		}
		return null;
	}
	
	
	public List<User> querAll(){
		return null;
	}

	
}


今天的代码就分享到这里啦,下期见!

时光很匆忙,别错过落日与夕阳.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值