家人们,我来啦,今天分享的是关于三层架构完美版.
在此之前,让我们先来回顾一下之前那些关于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;
}
}
今天的代码就分享到这里啦,下期见!
时光很匆忙,别错过落日与夕阳.