JavaWeb_10-框架和项目

自定义框架(ORM框架),持久层框架(mybatis,hibernate)

MVC框架(springmvc,struts2)

目标:完成自定义springmvc框架

项目流程:

1.首页

加载出最新的前四个商品(按更新时间降序排列)

异步请求:按时间排序选到前四个

热销商品:在订单明细表中找出前三个卖的最好商品信息(按照productId进行分组,统计数量,按照数量降序排序,取出符合条件的产品id降序排列,再根据id取到数据库信息)

image-20200814160317606

分类:暂时不需要parentId进行递归,直接查询出所有分类信息进行显示;显示一个div,里面是分类名称,要求都是超链接,点击进去根据分类id进行商品列表展示

购物车(悬浮div,显示有多少件商品)

搜索:根据搜索的信息来查询指定的商品,过多的话要分页;右面的更多商品要显示所有商品

首页点击购物车,进入购物车;点击去结算,进入结算页面

首页右上角登录信息,如果用户已登录,显示用户名字,并显示安全退出按钮,不显示登录注册按钮;没登录,不显示安全退出,显示登陆注册

image-20200814161325911

个人中心,我的订单要实现页面跳转

一、表设计

基本五个表:用户表,订单表,订单明细表,商品表,商品分类表

订单表(最麻烦的就是查订单)

里面要存详细地址,而不是要存主键,因为用户如果要改地址,应该查的是以前真实的地址,存主键查的就是现在的地址,真实地址会消失;同理,订单明细表里的单价总价也不能少,因为要保留当时的价格信息,这都不是冗余,必须要有。

image-20200826094157378

订单和订单条目表,一个订单对应多个订单条目表

二、页面

页面复用

image-20200826102036918

用ajax复用页面

image-20200826101707211

把list3页面直接放到div中,可以不要head和body什么的,布局好直接放进去

image-20200826101656174

2.1 首页布局

使用页面复用

image-20200826105518249

image-20200826145108596

用target控制iframe的位置,否则是在左侧显示,插在哪就在哪显示

2.2 只能响应一次

后面不能再写转发或重定向

image-20200827095719313

同理或者字符流或者字节流,不能又字符又字节

2.3 静态包含(只能在jsp中使用)

jsp中以@开头的标签,叫做指令image-20200827100535508

jsp中只有三个指令page;taglib;include(静态包含)

用一个标签也可以引入页面

image-20200827100800901

iframe和ajax复用页面在任何页面都能使用

2.3 frameset(框架集)

建议后台管理时用,门户网站不推荐,iframe更灵活,用iframe也可以实现这种布局

三个页面在一起,点一个链接显示在其他两个页面中

image-20200827101112283

子框架,在内容中嵌入页面

image-20200827101245209

framset不能有页面内容,只能引入页面,把屏幕分成几块网页

image-20200827101326607

上面是出不来的,它和body是冲突的,要去掉body

布局

左边25,中间50,剩下的给右边

image-20200827101539991

上下分成两个部分,上面25,剩下给下面,下面再嵌套一个frameset,分成左右两块,左边25,剩下给右边

image-20200827101747922

三、 用户退出

image-20200827112259777

3.1 域

Cookie

​ 在网页

Session

​ 也在服务器,每个用户只能访问自己的信息

​ 浏览器运行一次期间所有的操作对应一个sessionId,只要session还在,你操作存储的数据都在,都能找到,你只能找到你的数据

如果在期间登录n个账号,也是对应一个sessionId

但是不同浏览器对应不同的session

Application

​ 共享数据

Web数据都是键值对格式key-value

四、 购物车

Cookie: 不可以存对象,要用json存对象

​ 失效时间:默认浏览器关闭(换个浏览器就没有了)

Session:可以存对象

​ 同一浏览器同一浏览器

​ 失效时间:默认30分钟

​ 关闭浏览器,cookie没了,虽然数据在服务器保存30分钟,但是sessionId没了,找不到数据

数据库:

​ 永久保存

​ 登录才能使用购物车

​ 京东

没有登陆,有购物车(登录后要合并购物车)

image-20200827160120795

拦截器

多放一层来拦截

image-20200827160815023

没有session信息,购物车拦截成功去登陆页面

既要拦截页面,也要拦servlet,以后框架都只是拦截处理器,拦截后端才是最核心要的

image-20200827161043087

默认拦请求,转发不拦截,自己要配置

image-20200827162016333

image-20200827162028105

拦住右边的是核心

image-20200827162249889

添加购物车(session做法,区别于ajax数据库操作,别搞混)

image-20200828093156581

image-20200828093902937

session取值不写成员变量也可以,它只认get方法

image-20200828094555807

image-20200828223713239

钱用科学计数

不能直接传小数,一定先把小数变成字符串,再传数

否则计算之前保存数据的时候就存错了,已经不准确了

image-20200828095203260

购物车中的一条记录

image-20200828095558968

购物车:一个购物车有多个购物条目

商品建map集合,可以根据key去重,有了cartitem,cart建不建都可以,建cart只是为了去重,实体和表不必一一对应,不是有实体就要建一个表,只要能实现相关关系就可以,不建cart建一个map集合道理是一样的

同一商品添加多次,应该是一个条目key:商品id

image-20200828100107315

遍历的时候还用list的形式

image-20200828100457775

有表应该在dao层去操作数据

image-20200828100830749

不能直接这么添加,同key的商品会覆盖

image-20200828101301272

要进行判断

image-20200828101703253

写不写都行,引用数据用的是同一个地址,改了就跟着改了

image-20200828102129732

image-20200828102116347

删除购物车:删除key

image-20200828102322005

image-20200828102353536

用session的时候没有数据库,所以没有购物车,有数据库直接显示就可以了;所以在登录的时候给session一个购物车

image-20200828104654950

和上面同理,引用类型不用再次存储,改了就是改了

image-20200828105137868

在el里判断cart里cartitems的长度,ajax判断json是否为空

导入jstl里封装的函数库标签

image-20200828105441411

image-20200828105848151

页面:

image-20200828111150954

image-20200828111252478

cart表设计

一张表

image-20200828113643377

两张表,其实购物车表完全没必要

image-20200828113747496

五、订单

5.1 事务的控制

1.原生方法

添加订单是否失败要用事务来控制,事务控制在业务层,要保证是同一个链接(用同一个collection来操作数据库)

image-20200829095204157

实例

image-20200829100521057

第一:要用同一个连接,下面两个连接控制不住

image-20200829101118478第二:要设置自动提交为假

image-20200829101330218

第三、手动控制

没异常提交,有异常就在catch里回滚

image-20200829101546953

2.封装的方法

可以控制一张表的两个数据,也可以控制多张表的一个数据

image-20200829102232420

封装写的不好的地方

image-20200829104940173

5.2 批处理

一次添加多条数据,

循环调用也可以做到,但每次都要创建链接和关闭连接,就不太好

1.原生方法:只创建了一个连接,一组一组的set进去

image-20200829105646323

2.封装方法

image-20200829110136462

把参数打包成二维数组传进去

image-20200829110833903

5.3 添加订单

添加订单表和订单条目表时要同时添加,需要事务的控制,而添加订单条目表的时候要进行批处理添加

dao

image-20200829144452543

image-20200829144810595

service

image-20200829145159997

页面

image-20200829145743928

servlet

过滤器

image-20200829145628479

image-20200829151109050

注意:提交订单后要清空这个用户的购物车

5.4 一对多,不要连表

一个订单对应多个订单条目,连表会造成很多重复的订单

image-20200831094551333

image-20200831100920583

5.5

image-20200831104412245

image-20200831104614209

5.4 支付

调用第三方接口

银行

image-20200901095128024

image-20200901104003449

image-20200901104318995

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值