day05_JavaWeb企业实战项目

第1章 任务

1_权限过滤器
2_查询所有分类
3_修改分类信息
4_查询商品信息
5_上传商品信息(重点)
6_利用工厂模式解耦

第2章 1_权限过滤器

2.1 场景

项目运行过程,希望某些资源不能被用户直接访问到,只有登录后才可以访问.例如:购物车页面,购物详情,购物列表等资源.

2.2 解决方案

创建一个自定义过滤器,在过滤器中为这些资源分别配置好路径,在过滤器中判断用户是否登录,登录成功,放行,没有登录,返回提示信息

2.3 步骤实现

1_创建过滤器,为过滤器配置不同的路径
2_实现过滤器代码

PS:一个过滤器配置不同的路径
/resource/*

第3章 查看所有分类

3.1 复习frameset框架

PS:target属性(_self,_blank,_name)

3.2 dtree组件

由JS实现树形菜单组件,开源免费,使用简单
如何使用

1_导入dtree.js
2_导入dtree.css
3_导入dtree下所有的图片
4_在页面中实现以下语句
   var d=new dTree(“d”);
   d.openAll();  d.closeAll();
//param1: 当前节点id
//param2: 父节点id
//param3: 节点上的文字描述
//param4: 跳转路径
//param5: 提示信息
//param6: 发生变化的frame的name属性值
d.add('010201','0102','分类管理’,
     '${pageContext.request.contextPath}/admin/category/list.jsp','','mainFrame');

3.3 查看所有分类原理分析

在这里插入图片描述

3.4 步骤实现

1_准备工作
*创建AdminCategoryServlet
*修改链接 left.jsp
d.add(‘010201’,‘0102’,‘分类管理’,
‘${pageContext.request.contextPath}/AdminCategoryServlet?method=findAllCats’,
‘’,‘mainFrame’);
2_AdminCategoryServlet
_>findAllCats
//获取全部分类信息
//全部分类信息放入request
//转发到/admin/category/list.jsp
3_service_dao
4_在/admin/category/list.jsp获取分类信息,完成响应

第4章 添加分类信息

4.1 页面跳转

*_/admin/category/list.jsp   js函数addCategory:
window.location.href = 
"${pageContext.request.contextPath}/AdminCategoryServlet?method=addCategoryUI";
*_/AdminCategoryServlet___>addCategoryUI
   return/admin/category/add.jsp”;

4.2 原理分析

在这里插入图片描述

4.3 步骤实现

1_ /admin/category/add.jsp
设置form >method ,action
设置form表单下各种input标签的name属性
2_AdminCategoryServlet
>addCategory
//获取分类名称
//创建分类ID
//调用业务层添加分类功能
//重定向到查询全部分类信息
3_CategoryService___>CategoryDaoImp

PS:在CategoryService及时更新redis中缓存的信息
总结: 虽然使用redis可以提升项目性能,但是带来开发量. 开发中,如果对redis缓存中的数据发生了更新操作,及时更新redis缓存信息,否则会造成数据不统一问题.

4.4 删除分类思路

问题:删除分类的时候,由于分类被很多商品所参照,无法删除
解决方案1
先删除所有向关联的商品信息,删除分类
解决方案2
设置所有的商品上cid列的值为null/其他分类ID
解决方案3
设计分类表多增加一个列(有效/无效)

第5章 查看商品信息

5.1 原理分析

在这里插入图片描述

5.2 步骤实现

1_修改连接 left.jsp
d.add(‘010401’,‘0104’,‘商品管理’,
‘/store_v5/AdminProductServlet?method=findAllProductsWithPage&num=1’,
‘提示信息’,‘mainFrame’);
2_AdminProductServlet___>findAllProductsWithPage
获取当前页
调用业务层查全部商品信息返回PageModel
将PageModel放入request
转发到/admin/product/list.jsp
3_ProductService
创建PageModel对象
关联集合
关联URL
4_/admin/product/list.jsp获取商品信息和分页数据

第6章 上传商品信息

6.1 上传的准备工作

1_表单method 必须为post
2_提供file组件
3_设置form标签的enctype属性为multipart/form-data
如果没有设置enctype浏览器是无法将文件自身传递到服务端

6.2 分析上传时HTTP协议的格式

POST  /TestUpload/ServletDemo01  HTTP/1.1
请求头
请求头
请求头

content-Type: multipart/form-data; boundary=---------------------------289271763422208
Content-Length: 12517

-----------------------------289271763422208
Content-Disposition: form-data; name="username"

11111
-----------------------------289271763422208
Content-Disposition: form-data; name="password"

22222
-----------------------------289271763422208
content-Disposition: form-data; name="userhead"; filename="11.bmp"
content-Type: image/bmp

BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
BMV/二进制乱码数据,代表图片自身自身自身自身自身自身自身自身自身自身自身自身自身
-----------------------------289271763422208--

PS:如果设置了表单form标签的enctype属性之后,请求体部分的内容的格式发生更改
传统的方式:
username=tom&password=1234&userhead=11.bmp

结论:
1_如果设置了mutipart/form-data,在服务端是无法通过request.getParameter(name);
获取数据
2_可以通过request.getInputStream();获取请求体部分的数据
手动实现上传可行性是可以的.

6.3 利用commons-fileupload-1.2.1.rar实现上传

思路:
1_导入commons-fileupload-1.2.1.rar之后
2_执行很简单的3行语句,
3_获取到一个集合(对象)
将每对分割线中间的内容封装在FileItem对象上.
4_遍历集合
5_如果当前的FileItem对象是普通项
将普通项上name属性的值作为键,将获取到的内容作为值,放入MAP中
{username<>tom,password<>1234}
6_如果当前的FileItem对象是上传项
通过FileItem获取到输入流对象,通过输入流可以获取到图片二进制数据
在服务端创建一个空文件(后缀必须和上传到服务端的文件名后缀一致)
建立和空文件对应的输出流
将输入流中的数据刷到输出流中
释放资源
向map中存入一个键值对的数据 userhead<=> /image/11.bmp
{username<
>tom,password<>1234,userhead<=>image/11.bmp}
7_利用BeanUtils将MAP中的数据填充到user对象上
8_调用servcie_dao将user上携带的数据存入数据仓库,重定向到查询全部商品信息路径

问题:
1_如果文件重名发生覆盖问题
UUID
2_同目录下文件/目录过多,性能问题
在images下最多创建16个目录,任意一个目录进入之后最多创建16个目录,
最多创建8层目录.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值