这次的复习内容全是干货,一起来抓紧消化吧!
目录:
复习前面课程:
关于三层架构:
在没有学习三层架构之前的做法?
在学了三层架构之后?
具体代码的展示:
运行结果?
复习前面课程:
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);
}
运行结果如下图:
如果登录账号密码正确的话:
那么就会这样:
如果账号正确,密码错误:
那么结果就是:
那么如果账号密码都输入错误的话:
所以结果就是:
今天的分享就到这里,感谢大家的观看!