1.开发模式:分层
我们所学的开发模式分为3层:
①:数据访问层
②:业务逻辑层
③:视图层
它们间的调用关系:
①:数据访问层
②:业务逻辑层:调用数据访问层
③:视图层:调用业务逻辑层
我们的疑惑来了,那么视图层可以直接调用数据访问层嘛?
实践是可以的,但理论上是不可以的。
2.步骤:
1、创建项目
2、创建包:
com.zking.util 帮助类
com.zking.entity 实体类
com.zking.dao(放dao接口)
com.zking.dao.imp (放dao接口实现类)
com.zking.biz (业务逻辑层放dao方法)
com.zking.biz.imp(业务逻辑层放dao实现类)
3.创建表:
用户表(T277) | |||
字段 | 数据类型 | 约束 | 备注 |
uuid | number | 主键 | 用户编号 |
uname | varchar2(20) | 用户名称 | |
upwd | varchar2(20) | 用户密码 | |
uinfo | varchar2(20) | 用户介绍 | |
商品表(goods) | |||
字段 | 数据类型 | 约束 | 备注 |
bid | number | 主键 | 商品编号 |
bname | number | 商品名称 | |
bprice | number | 商品价格 | |
binfo | varchar2(20) | 商品介绍 | |
bface | varchar2(20) | 商品图片 | |
订单表(orderitem) | |||
字段 | 数据类型 | 约束 | 备注 |
oid | number | 主键 | 订单编号 |
uuid | number | 外键 | 用户编号 |
bid | number | 外键 | 商品编号 |
gnumber | number | 商品数量 | |
gsumprice | number | 订单总价 | |
odate | date | 下单时间 | |
ozt | varchar2(20) | 订单状态 | |
4.创建jsp文件
index.jsp 总界面
login.jsp
dologin.jsp
register.jsp
doregister.jsp
3.代码实操:(只献 jsp文件)
index.jsp
<%@page import="com.zking.entity.User"%>
<%@page import="com.zking.biz.Imp_GoodsDaoBiz"%>
<%@page import="com.zking.dao.Imp_GoodsDao"%>
<%@page import="com.zking.dao.IGoodsDao"%>
<%@page import="com.zking.entity.Goods"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>商品主界面</title>
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<script type="text/javascript">
function gm(bid,uid) {
location.href="doShopCar.jsp?bid="+bid+"&uid="+uid;
}
</script>
</head>
<body>
<%
Object o=session.getAttribute("u");
if(o==null){
out.print("<script>alert('你还未登录,请登录');location.href='login.jsp'</script>");
}
%>
<table class="table table-hover">
<tr>
<td>商品编号</td>
<td>商品名称</td>
<td>商品价格</td>
<td>商品介绍</td>
<td>商品图片</td>
<td>操作</td>
</tr>
<%
ArrayList<Goods> slist=new Imp_GoodsDaoBiz().getAll();
for(int i=1;i<slist.size();i++){
%>
<tr>
<td><%=slist.get(i).getGid()%></td>
<td><%=slist.get(i).getGname()%></td>
<td><%=slist.get(i).getGprice()%></td>
<td><%=slist.get(i).getGinfo()%></td>
<td>
<img src="<%=slist.get(i).getGpic()%>">
</td>
<td>
<button onclick="gm(<%=slist.get(i).getGid()%>,<%=((User)session.getAttribute("u")).getUid()%>)" class="btn btn-success">添加到购物车</button>
</td>
</tr>
<%}%>
</table>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<script type="text/javascript">
//定义字符串,在0-9出随机数
var str = "1234567890";
//验证功能
function yz() {
//随机出4个0-字符串长度之间的数字 做为下标
//先定义为空
yzmStr="";
// 循环遍历出随机数
for(var i=1;i<=4;i++){
yzmStr+=str.substr(Math.round(Math.random()*(str.length-1)),1);
}
//把验证码赋值到页面
document.getElementById("syzm").innerHTML=yzmStr;
}
//返回id值函数
function $(id) {
return document.getElementById(id);
}
//验证 用户名 和 密码功能
function login_yz() {
//验证 用户名 和 密码不能为空
//获取用户名
var uname = $("uname").value;
//判断
if(uname.length==0){
alert("用户名不能为空");
return false;
}
//获取密码
var upwd = $("upwd").value;
if(upwd.length==0){
alert("密码不能为空");
return false;
}
//获取验证码:判断和电脑的验证码是否相等
var yzm = $("uyzm").value;
if(yzm!=yzmStr){
alert("验证码输入错误,请重新输入");
//清空输入的验证码
$("uyzm").value="";
//重新生成验证码
yz();
return false;
}
}
</script>
</head>
<body onload="yz()">
<form action="dologin.jsp" onsubmit="return login_yz()">
<div id="user">
用 户 <input type="text" id="uname" name="textfield"/>
</div>
<div id="password">
密 码 <input type="password" id="upwd" name="textfield1" />
</div>
<div id="yzm">
验证码 <input id="uyzm" style="width: 50px;" type="text" name="textfield3" />
<span id="syzm" onclick="yz()"></span>
</div>
<div id="btn">
<input type="submit" value="登录">
<input type="reset" value="清空">
</div>
</form>
</body>
</html>
dologin.jsp
<%@page import="com.zking.entity.User"%>
<%@page import="com.zking.biz.Imp_UserDaoBiz"%>
<%@page import="com.zking.dao.Imp_GoodsDao"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ 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>
<%
//接收login页面传递的数据
String uname=request.getParameter("textfield");
String upwd = request.getParameter("textfield1");
User u=new Imp_UserDaoBiz().login(uname, upwd);
//处理结果
if(u!=null){
//转发
session.setAttribute("u", u);
//把用户编号放到内置对象 session中
//session.setAttribute("uuid", rs.getInt(1));
request.getRequestDispatcher("index.jsp").forward(request, response);
}else{
//失败
out.print("<script>alert('用户名或密码错误,请重新登录');location.href='login.jsp'</script>");
}
//关闭连接
%>
</body>
</html>
register.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
<script type="text/javascript">
//定义字符串,在0-9出随机数
var str = "1234567890";
//验证功能
function yz() {
//随机出4个0-字符串长度之间的数字 做为下标
//先定义为空
yzmStr="";
// 循环遍历出随机数
for(var i=1;i<=4;i++){
yzmStr+=str.substr(Math.round(Math.random()*(str.length-1)),1);
}
//把验证码赋值到页面
document.getElementById("syzm").innerHTML=yzmStr;
}
//返回id值函数
function $(id) {
return document.getElementById(id);
}
//验证 用户名 和 密码功能
function login_yz() {
//验证 用户名 和 密码不能为空
//获取用户名
var uname = $("uname").value;
//判断
if(uname.length==0){
alert("用户名不能为空");
return false;
}
//获取密码
var upwd = $("upwd").value;
if(upwd.length==0){
alert("密码不能为空");
return false;
}
//获取验证码:判断和电脑的验证码是否相等
var yzm = $("uyzm").value;
if(yzm!=yzmStr){
alert("验证码输入错误,请重新输入");
//清空输入的验证码
$("uyzm").value="";
//重新生成验证码
yz();
return false;
}
}
</script>
</head>
<body onload="yz()">
<form action="doregister.jsp" onsubmit="return login_yz()">
<div id="user">
用 户 <input type="text" id="uname" name="textfield"/>
</div>
<div id="password">
密 码 <input type="password" id="upwd" name="textfield1" />
</div>
<div id="yzm">
验证码 <input id="uyzm" style="width: 50px;" type="text" name="textfield3" />
<span id="syzm" onclick="yz()"></span>
</div>
<div id="btn">
<input type="submit" value="注册">
<input type="reset" value="清空">
</div>
</form>
</body>
</html>
doregister.jsp
<%@page import="com.sun.xml.internal.bind.v2.runtime.Location"%>
<%@page import="com.zking.entity.User"%>
<%@page import="com.zking.biz.Imp_UserDaoBiz"%>
<%@page import="com.zking.dao.Imp_GoodsDao"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<%
//接收login页面传递的数据
String uname=request.getParameter("textfield");
String upwd = request.getParameter("textfield1");
int id=new Imp_UserDaoBiz().getNext("auid", "auser");
User user=new User(id,uname,upwd);
boolean f=new Imp_UserDaoBiz().register(user);
//处理结果
if(f==true){
//转发
// session.setAttribute("us", user);
//把用户编号放到内置对象 session中
//session.setAttribute("uuid", rs.getInt(1));
out.print("<script>alert('注册成功!');location.href='login.jsp'</script>");
}else{
//失败
out.print("<script>alert('注册失败!');location.href='register.jsp'</script>");
}
//关闭连接
%>
</body>
</html>
我们要实现的是:一个用户对应一个购物车,现在是登录与注册,后续加代码。