MVC

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

MVC模式最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。

MVC可对程序的后期维护和扩展提供了方便,并且使程序某些部分的重用提供了方便。而且MVC也使程序简化,更加直观。

控制器Controller:对请求进行处理,负责请求转发;Servlet

特点:控制器接收用户输入并调用模型和视图去完成用户的需求

视图View:界面设计人员进行图形界面设计;JSP

特点:a、视图是用户看到并与之交互的界面

b、向用户显示相关的数据

c、接受用户的输入

d、不进行任何实际的业务处理

模型Model:程序编写程序应用的功能(实现算法等等)、数据库管理;Java对象
用于处理管理数据库、处理业务逻辑、封装实体数据 JavaBean

特点:一个模型能为多个视图提供数据

注意,MVC不是Java的东西,几乎现在所有B/S结构的软件都采用了MVC设计模式。但是要注意,MVC在B/S结构软件并没有完全实现,例如在我们今后的B/S软件中并不会有事件驱动!

实现MVC购物车的绑值和加入购物车初始版:

实体类和数据库辅助类该怎么写还是怎么写

//实体类:商品类
package com.zking.mvc.cart.entity;import java.io.Serializable;public class Goods implements Serializable{private static final long serialVersionUID = -2858362891359151911L;private int gid;private String gname;private int gprice;private String ginfo;private String gpath;private int gkc;private String gtype;public Goods() {// TODO Auto-generated constructor stub}public Goods(int gid, String gname, int gprice, String ginfo, String gpath, int gkc, String gtype) {super();this.gid = gid;this.gname = gname;this.gprice = gprice;this.ginfo = ginfo;this.gpath = gpath;this.gkc = gkc;this.gtype = gtype;}public Goods(String gname, int gprice, String ginfo, String gpath, int gkc, String gtype) {super();this.gname = gname;this.gprice = gprice;this.ginfo = ginfo;this.gpath = gpath;this.gkc = gkc;this.gtype = gtype;}public int getGid() {return gid;}public void setGid(int gid) {this.gid = gid;}public String getGname() {return gname;}public void setGname(String gname) {this.gname = gname;}public int getGprice() {return gprice;}public void setGprice(int gprice) {this.gprice = gprice;}public String getGinfo() {return ginfo;}public void setGinfo(String ginfo) {this.ginfo = ginfo;}public String getGpath() {return gpath;}public void setGpath(String gpath) {this.gpath = gpath;}public int getGkc() {return gkc;}public void setGkc(int gkc) {this.gkc = gkc;}public String getGtype() {return gtype;}public void setGtype(String gtype) {this.gtype = gtype;}@Overridepublic String toString() {return "Goods [gid=" + gid + ", gname=" + gname + ", gprice=" + gprice + ", ginfo=" + ginfo + ", gpath=" + gpath+ ", gkc=" + gkc + ", gtype=" + gtype + "]";}}
//购物车类
package com.zking.mvc.cart.entity;import java.io.Serializable;public class Cart  implements Serializable{private static final long serialVersionUID = 5969840860422993319L;private int cid;private Goods goods;private User user;private int count;private int ctotal;public Cart() {// TODO Auto-generated constructor stub}public int getCid() {return cid;}public void setCid(int cid) {this.cid = cid;}public Goods getGoods() {return goods;}public void setGoods(Goods goods) {this.goods = goods;}public User getUsers() {return user;}public void setUsers(User user) {this.user = user;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public int getCtotal() {return ctotal;}public void setCtotal() {this.ctotal = this.getGoods().getGprice() * this.getCount();}public Cart(int cid, Goods goods, User user, int count, int ctotal) {this.cid = cid;this.goods = goods;this.user = user;this.count = count;this.ctotal = ctotal;}@Overridepublic String toString() {return "Cart [cid=" + cid + ", goods=" + goods + ", users=" + user + ", count=" + count + ", ctotal=" + ctotal+ "]";}}

三层架构该怎么写就怎么写

下面是servlet里面的代码用来实现绑值和加入购物车:

绑值代码:

package com.zking.mvc.cart.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.mvc.cart.biz.IGoodsBiz;
import com.zking.mvc.cart.biz.impl.GoodsBizImpl;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.User;@WebServlet("/GoodsListServlet")
public class GoodsListServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//servlet作用:负责处理用户的请求以及响应//1.设置字符编码request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("utf-8");//2.获取参数  省略//3.封装  调用biz判断IGoodsBiz igb=new GoodsBizImpl();List<Goods> listGoods = igb.queryGoodsAll();//数据保存在域对象中//获取域对象 sessionHttpSession session =  request.getSession();session.setAttribute("listGoods", listGoods);//获取当前项目的绝对路径String path =  request.getServletContext().getContextPath();// /web_mvc_cart_t280//4.响应response.sendRedirect("index.jsp");}}

页面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!--通过taglib引入JSTL标准标签库  --><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><!--通过c标签判断是否在域对象中存在数据--><c:if test="${empty listGoods }"><jsp:forward page="GoodsListServlet"></jsp:forward></c:if><h2 style="text-align:center">zkingzz购物首页</h2><hr/><p>欢迎您!大佬先生--${users.username}</p><table border="1" cellspacing="0" cellpadding="0" width="100%" ><tr><th>商品编码</th><th>商品名称</th><th>商品价格</th><th>操作</th></tr><!--通过c标签遍历数据  --><c:forEach items="${listGoods}" var="goods"><tr><td>${goods.gid}</td><td>${goods.gname}</td><td>${goods.gprice}</td><td><button onclick="addCart(${goods.gid})">加入购物车</button></td></tr></c:forEach></table><script type="text/javascript">//加入购物车的点击事件function addCart(gid) {//alert(gid);window.location.href="AddCartServlet?gid="+gid;}</script>
</body>
</html>

加入购物车:

package com.zking.mvc.cart.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.mvc.cart.biz.ICartBiz;
import com.zking.mvc.cart.biz.IGoodsBiz;
import com.zking.mvc.cart.biz.impl.CartBizImpl;
import com.zking.mvc.cart.biz.impl.GoodsBizImpl;
import com.zking.mvc.cart.entity.Cart;
import com.zking.mvc.cart.entity.Goods;
import com.zking.mvc.cart.entity.User;@WebServlet("/AddCartServlet")
public class AddCartServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//jrebel  热部署插件//加入加购物车的servlet//System.out.println("进来了!");//1.设置字符集编码request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//2.获取location带过来的gidString id = request.getParameter("gid");int gid = 0;if(null!=id) {gid = Integer.valueOf(id);}//数据封装Cart c = new Cart();//将gid Userid ccount ctotal 封装到cart实体对象中IGoodsBiz igb = new GoodsBizImpl();Goods goods = igb.getGoodsByGid(gid);//useridHttpSession session = request.getSession();User user = (User)session.getAttribute("users");c.setGoods(goods);c.setUsers(user);c.setCount(1);c.setCtotal();//System.out.println(c);//要想将封装好的购物车信息 保存到数据库中//先获取当前这个登录用户的购物车ICartBiz icb = new CartBizImpl();List<Cart> listCarts =  icb.getCartByUsersid(user.getUserid());//如果购物车List<Cart> listCarts = null;boolean flag = true;//如果该用户第一次进入 构建一个新的购物车 实例化if(null == listCarts ) {listCarts = new ArrayList<Cart>();}else {//非第一次//遍历所有的商品for (Cart cart : listCarts) {//判断当前加入的与购物车已有的进行匹配if(cart.getGoods().getGid() == c.getGoods().getGid()) {//不需要重复添加 修改数量和总价格cart.setCount(cart.getCount()+1);cart.setCtotal();//进行一个数据库的更新icb.editCartByCidAndUserid(cart);flag = false;break;}}}//问题:加入购物车 不是加入集合 而是加到数据库//listCarts.add(c);if(flag) {icb.addCart(c);}//加入后数据要继续更新listCarts =  icb.getCartByUsersid(user.getUserid());session.setAttribute("listCarts", listCarts);response.sendRedirect("cart.jsp");}}

页面代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1>我的购物车</h1><p><a href="index.jsp">返回首页</a></p><hr/><table border="1" cellspacing="0" cellpadding="0" width="100%" ><tr><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>${cart.goods.gprice}</td><td>${goods.ccount}</td><td>${goods.ctotal}</td><td><button>删除</button><button>修改</button></td></tr></c:forEach></table>
</body>
</html>

以上就是初始版的MVC购物车项目

Javaweb (MVC购物车01)相关推荐

  1. JavaWeb MVC购物车(1)

    目录 一.MVC是什么? 二. 项目文件  MVC购物车(1)主要实现功能 三.登录功能的制作 四..页面过滤器的制作 五.全部商品的显示 六..购物车商品的添加 七.购物车数量加减&总价计算 ...

  2. APS.NET MVC + EF (01)---Linq和Lambda表达式

    APS.NET MVC + EF (01)---Linq和Lambda表达式 1.1 Linq介绍 LINQ全称 Language Integrated Query(语言集成查询).为我们提供一种统一 ...

  3. JavaWeb——MVC与三层架构

    文章目录 JavaWeb--MVC与三层架构 1.三层架构 2.MVC 3.MVC与三层架构的对应联系 4.MVC与三层架构的区别 JavaWeb--MVC与三层架构 1.三层架构 三层架构 (3-t ...

  4. 【MVC购物车】购买和加入购物车功能

    书接上回: [MVC购物车]类关系 1 建表 DROP TABLE IF EXISTS `product`; CREATE TABLE `product` (`id` int(11) DEFAULT ...

  5. javaweb之MVC购物车(加入购物车,订单,订单详情)

    MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型.视图和控制器三个基本部分.用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一 ...

  6. javaweb实现购物车功能

    本篇文章讲的是如何使用javaweb相关知识模拟购物车功能 (web练手小项目) 使用到的相关知识(部分知识点在文章中简单涉及到): html  cs  javascript  jsp  servle ...

  7. javaweb学习心得-01(西部开源-秦疆随堂笔记)

    maven maven 创建一个maven项目的过程 1.在maven官网下载安装包 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzwwfNnx-163583458 ...

  8. 回溯算法之购物车(0-1 背包问题)

    1.问题(参考趣学算法) 央视有一个大型娱乐节目- 购物街,舞台上模拟超市大卖场,有很多货物,每个嘉宾分配一个购物车,可以尽情的装满购物车,购物车装的价值最高者取胜.假设 n 个物品和 1个购物车,每 ...

  9. 基于javaweb mvc模式的图书馆管理系统(不含框架)

    最近没更博客,趁今晚有时间把近期的学习记录以及遇到的一些问题贴出来吧,也算是对最近工作的总结. 因为最近的笔记都整理在了Typora上,所以贴出来还是比较简单的. 上干货之前先简单说一下最近的学习过程 ...

最新文章

  1. mysql服务器的启动方式有哪几种_Mysql启动的方式(四种)
  2. C++ 实例化对象 p-printX()
  3. mysql表损坏自动修复工具_对MySQL数据表(已损坏)的修复
  4. SurfaceFlinger中queueBuffer与dequeueBuffer作用(十二)
  5. 竞拍网站服务器配置,GOM引擎新区竞拍脚本,GOM传奇服务端设置竞拍的方法和教程...
  6. MSC.MD.NASTRAN.V2010\
  7. YUV和RGB格式分析
  8. 免费真实增加网站访问量的方法
  9. EXCEL,锁定单元格后往下拉,但后面需要继续复制粘贴时又希望步锁定,该怎么办?小技巧,先把$ 替换为空后再粘贴
  10. pytorch实用工具总结(GFLOPs如何计算)
  11. 国外开放的硕博论文、期刊、数据库下载网站
  12. vue电商实战-黑马-01
  13. 研究人员开发实时歌词生成技术以激发歌曲创作灵感
  14. linux:framebuffer驱动之ssd1363驱动和fbtft驱动修改
  15. 电脑服务器修改穿越火线不卡,windows10玩穿越火线画面不流畅怎么办
  16. AI_Cousera笔记(吴恩达)_开篇
  17. 大数据破解污染图谱 北风与雾霾啥关系
  18. DASCTF部分复现
  19. 吃鸡更新找不到服务器,绝地求生PUBGExperimentalServer为什么找不到_绝地求生PUBGExperimentalServer安装方法_玩游戏网...
  20. android 充话费接口,福禄充值(com.kamenwang.app.android) - 3.6.545 - 应用 - 酷安

热门文章

  1. WIFI 安卓Android系统手机通过USB连接电脑上网
  2. ASP。NET学习七
  3. python实现将图片添加水印并设置为桌面背景
  4. 如何给pdf添加书签
  5. python抓取数据,pandas 处理并存储为excel
  6. Unity3d花屏处理
  7. 在阿里做了五年技术主管,我有话想跟你说~
  8. 如何看待honor荣耀时隔两月再次发布新品
  9. 工具篇:远程文件传输工具 scp
  10. 从使命召唤手游国际版将于暑假公测 谈论代理IP在游戏中的作用