笔记:
一、MVC模
-
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)
-
MVC模式最早为Trygve Reenskaug提出,为为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。
-
MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。
控制器Controller:对请求进行处理,负责请求转发;Servlet
视图View:界面设计人员进行图形界面设计;JSP
模型Model:程序编写程序应用的功能(实现算法等等)、数据库管理;Java对象
用于处理管理数据库、处理业务逻辑、封装实体数据 JavaBean
注意,MVC不是Java的东西,几乎现在所有B/S结构的软件都采用了MVC设计模式。但是要注意,MVC在B/S结构软件并没有完全实现,例如在我们今后的B/S软件中并不会有事件驱动!
0.引入
> 问题1:先有servlet还是先有jsp?
>
> 先有servlet
>
> web发展史:HTML静态页面---serlvet----jsp
>
> 问题2:web开发模式发展:模型1 模型2
>
> 只有静态页面的时候: HTML+css
>
> 出现servlet之后:可以进行交互
>
> 模型1:第一代----把所有的代码(java+html)写一个jsp页面。 一层
>
> 模型1:第二代---javabean:将数据库交互的代码进行封装 src 二层
>
> 模型2:MVC
>
> 问题:三层架构---开发设计模式,将程序分为三层去管理。
>
> - 显示层:(jsp,doxxx.jsp【serlvet】)
> - 业务逻辑层 (biz,service)
> - 数据访问层(dao )----DB
>
> 三层通过实体对象来互相联系
>
> MVC架构有点类似三层架构
#### 1.什么是MVC
> MVC也是一种开发架构设计模式,与三层架构类似。
>
> MVC封了三个模块:
>
> - M:model 模型(生产数据,筛选数据)——业务逻辑层,数据访问层
> - V:view视图——表示层,职责:显示数据 JSP,HTML页面
> - C:controller控制器——控制层,职责:接收用户请求,处理用户请求,响应结果。serlvet
>
> 总而言之:MVC其实就是将三层架构中的显示层**"一分为二"**,将三层架构中的业务逻辑层与数据访问层进行合并成"model"。
>
> MVC是一个大的概念,三层架构其实就是MVC的具体的实现的一种设计模式。
src:
index:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通过c标签进行判断-->
<c:if test="${empty ls}">
<jsp:forward page="index.do"></jsp:forward>
</c:if>
<h2 style="text-align: center">zking购物商城界面</h2>
<hr />
<c:if test="${empty user.username}">
<p><a href="dl.jsp">登录</a></p>
</c:if>
<c:if test="${!empty user.username}">
<p>欢迎您 大哥——${user.username}</p>
</c:if>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tr>
<th>商品编号</th>
<th>商品名称</th>
<th>商品类型</th>
<th>商品图片</th>
<th>商品价格</th>
<th>商品库存</th>
<th>商品简介</th>
<th>操作</th>
</tr>
<!--通过c标签遍历 -->
<c:forEach items="${ls}" var="goods">
<tr>
<td>${goods.gid }</td>
<td>${goods.gname }</td>
<td>${goods.gtype }</td>
<td><img src="${goods.gimage}" width="80" heigth="50"/></td>
<td>${goods.gprice }</td>
<td>${goods.gkc }</td>
<td>${goods.ginfo }</td>
<td><button onclick="addCart(${goods.gid})">加入购物车</button></td>
</tr>
</c:forEach>
</table>
<script type="text/javascript">
//加入购物车的点击事件
function addCart(gid) {
window.location.href="addCart.do?gid="+gid;
}
</script>
</body>
</html>
cart:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>我的购物车</h2>
<hr />
<c:if test="${empty listCarts}">
在忙也要记得犒劳一下自己!!<a href="index.jsp">点我购物</a>
</c:if>
<c:if test="${!empty listCarts}">
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tr>
<th>购物车编号</th>
<th>商品名称</th>
<th>商品图片</th>
<th>商品单价</th>
<th>商品库数量</th>
<th>商品总价</th>
<th>操作</th>
</tr>
<!--通过c标签遍历 -->
<c:forEach items="${listCarts}" var="cart">
<tr>
<td>${cart.cid}</td>
<td>${cart.goods.gname }</td>
<td><img src="${cart.goods.gimage}" width="80" heigth="50" /></td>
<td>${cart.goods.gprice }</td>
<td>${cart.ccount}</td>
<td>${cart.ctotal }</td>
<td><a onclick="return confirm('确定要删除吗')" href="DeleteServlet.do?cid=${cart.cid}">删除</a>
<button>修改</button></td>
</tr>
</c:forEach>
</table>
<P style="text-align: right">
<button
style="background: yellow; color: red; font-weight: bold; width: 100px; height: 50px; border-radius: 30px; cursor: pointer;"
onclick="buy()">点我结算</button>
</P>
</c:if>
<script type="text/javascript">
function buy() {
location.href = "FindCartInfoServlet";
}
</script>
</body>
</html>
确认订单:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>确认订单</h3>
<h6>确认收货地址</h6>
<input id="oaddress" type="text" style="width:100%;height:40px;"/>
<br/><br/><br/><br/>
<hr/>
<h6>确认订单信息</h6>
<p>商品总件数:${sessionScope.maps.sumCount}</p>
<h6>商品信息</h6>
<c:forEach items="${sessionScope.maps.ls}" var="cart">
<span>
<span>${cart.goods.gname}</span>
<img src="${cart.goods.gimage }" width="100px" heigth="40px"/>
</span>
</c:forEach>
<hr/>
<p style="text-align: center">
<h1> 总金额:${sessionScope.maps.sumPrice}</h1>
</p>
<p style="text-align: right">
<button style="background: yellow;color:red;font-weight: bold;width:100px;height:50px;border-radius:30px; cursor: pointer;" onclick="confimOrder()">确认订单</button>
</p>
<script type="text/javascript">
function confimOrder() {
var oaddress=document.getElementById("oaddress").value;
if(!oaddress){
alert("请输入地址在确认订单");
return
}
location.href="ConfirmOrderServlet?oaddress="+oaddress;
}
</script>
</body>
</html>
Servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.IGoodsBiz;
import com.zking.biz.impl.GoodsBiz;
import com.zking.entity.Goods;
import com.zking.entity.User;
/**
* Servlet implementation class GoodsListServlet
*/
@WebServlet("/index.do")
public class GoodsListServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
IGoodsBiz igb = new GoodsBiz();
List<Goods> ls=igb.getAll();
HttpSession session= request.getSession();
session.setAttribute("ls", ls);
String path=request.getServletContext().getContextPath();
response.sendRedirect(path+"/index.jsp");
}
}
servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.ICartBiz;
import com.zking.biz.impl.CartBizImpl;
import com.zking.entity.Cart;
import com.zking.entity.User;
@WebServlet("/FindCartInfoServlet")
public class FindCartInfoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//加入购物车的servlet
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
HttpSession session= request.getSession();
User user=(User) session.getAttribute("user");
//直接获取数据库数据
ICartBiz icb = new CartBizImpl();
List<Cart> ls= icb.getCartByUsersid(user.getUserid());
//获取总数量和总价格
int sumCount=0;
int sumPrice=0;
for (Cart cart : ls) {
sumCount+=cart.getCcount();
sumPrice+=cart.getCtotal();
}
Map<String, Object> maps= new HashMap<String,Object>();
maps.put("ls", ls);
maps.put("sumCount", sumCount);
maps.put("sumPrice", sumPrice);
session.setAttribute("maps", maps);
response.sendRedirect("confirmOrder.jsp");
}
}
servlet:判断用户是否登录
package com.zking.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.IUserBiz;
import com.zking.biz.impl.UserBizimpl;
import com.zking.entity.User;
@WebServlet("/DlServLet.do")
public class DlServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置编码方式
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charsert=utf-8");
// 获取session域对象值
HttpSession session = request.getSession();
// 获取out
PrintWriter out = response.getWriter();
// 接收表单提交过来的值
String name = request.getParameter("uname");// 拿到用户名
String pwd = request.getParameter("pwd");// 用户密码
// 调用biz层方法
IUserBiz iub = new UserBizimpl();
User y = iub.dl(name, pwd);
// 判断
if (y != null) {
// 把该用户存进去
session.setAttribute("user", y);
// 登录成功跳转页面
out.print("<script>alert('登录成功');location.href='index.jsp';</script>");
} else {
// 用户名密码错误
out.print("<script>alert('用户名或密码有误');location.href='dl.jsp';</script>");
}
}
}
servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.ICartBiz;
import com.zking.biz.impl.CartBizImpl;
import com.zking.entity.Cart;
import com.zking.entity.User;
@WebServlet("/DeleteServlet.do")
public class DeleteServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
//获得session
HttpSession session = request.getSession();
//接收jid
String cid=request.getParameter("cid");
//实例化biz层
ICartBiz icb = new CartBizImpl();
//调用方法
int n =icb.delCartByGid(Integer.valueOf(cid));
//userid
User user= (User)session.getAttribute("user");
List<Cart> listCarts= icb.getCartByUsersid(user.getUserid());
session.setAttribute("listCarts", listCarts);
response.sendRedirect("cart.jsp");
}
}
servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.ICartBiz;
import com.zking.biz.IOrderBiz;
import com.zking.biz.impl.CartBizImpl;
import com.zking.biz.impl.OrderBizimpl;
import com.zking.entity.Cart;
import com.zking.entity.Order;
import com.zking.entity.User;
@WebServlet("/ConfirmOrderServlet")
public class ConfirmOrderServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//加入购物车的servlet
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String oaddress=request.getParameter("oaddress");
//生成订单和订单详情
HttpSession session= request.getSession();
User user=(User) session.getAttribute("user");
//直接获取数据库数据
ICartBiz icb = new CartBizImpl();
List<Cart> ls= icb.getCartByUsersid(user.getUserid());
//获取总数量和总价格
int sumCount=0;
int sumPrice=0;
for (Cart cart : ls) {
sumCount+=cart.getCcount();
sumPrice+=cart.getCtotal();
}
Order order= new Order(user, sumCount, sumPrice, oaddress, 0);
//将当前用户的购物车集合进行set
order.setLs(ls);
//实例化Biz
IOrderBiz iob = new OrderBizimpl();
iob.addOrder(order);
}
}
servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zking.biz.ICartBiz;
import com.zking.biz.IGoodsBiz;
import com.zking.biz.impl.CartBizImpl;
import com.zking.entity.Cart;
import com.zking.entity.Goods;
import com.zking.entity.User;
/**
* Servlet implementation class AddCartServlet
*/
@WebServlet("/addCart.do")
public class AddCartServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//加入购物车的servlet
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取值
//userid
HttpSession session= request.getSession();
User user= (User)session.getAttribute("user");
System.out.println(user);
if("null".equals(user)) {
response.sendRedirect("dl.jsp");
}
String id=request.getParameter("gid");
int gid=0;
if(null!=id) {
gid=Integer.valueOf(id);
}
Cart c = new Cart();
IGoodsBiz igb = new com.zking.biz.impl.GoodsBiz();
Goods goods=igb.getGoodsById(gid);
c.setGoods(goods);
c.setUsers(user);
c.setCcount(1);
c.setCtotal();
ICartBiz icb = new CartBizImpl();
List<Cart> listCarts= icb.getCartByUsersid(user.getUserid());
boolean f = true;
if(null==listCarts) {
listCarts = new ArrayList<Cart>();
}else {
//遍历所有商品
for (Cart cart : listCarts) {
//判断
if(cart.getGoods().getGid()==c.getGoods().getGid()) {
cart.setCcount(cart.getCcount()+1);
cart.setCtotal();
//进行数据库更新
icb.updateCartByCidAndUserid(cart);
f=false;
break;
}
}
}
//加入购物车不是加入集合而是加入数据库库
if(f) {
icb.addCart(c);
}
//listCarts.add(c);
//加入后数据更新
listCarts= icb.getCartByUsersid(user.getUserid());
session.setAttribute("listCarts", listCarts);
response.sendRedirect("cart.jsp");
}
}