任务
1_上传
2_利用工厂解耦
3_查询订单
4_异步加载显示详情
5_修改订单状态
6_将项目部署到LINUX上
第1章上传
1.1上传准备工作
*_Form method=”post”
*_Form
*_Form enctype=”multiprt/form-data”
1.2上传协议格式
Post /TestUpload/ServletDemo http/1.1
请求头
请求头
请求头
…multipart/form-data…;boundary=------------21423412
content-type:image/bmp
content-length:143214
------------21423412
…name=”username”
Tom
------------21423412
…name=”password”
1234
------------21423412
…name=”userhead”;filename=”11.bmp”
图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据图片二进制数据------------21423412–
结论:
1_如果在表单中设置了enctype=multipart/form-data属性之后,在服务端利用
request.getParameter(name); 无法获取到数据
原因: request.getParameter(name); 获取的是请求体中键值对的数据或者路径之后
键值对的数据 http://localhost:8080/TestUpload/ServletDemo?username=tom
2_request.getInputStream() 可以获取到请求体中全部内容 ,理论上就可以利用这个API
实现手动上传
1.3利用工具实现上传思路 commons-fileupload.jar commons-io.jar
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层目录.
1.4原理分析
1.5步骤实现
1.5.1_页面跳转
*_准备工作
/admin/product/list.jsp ,修改了 addProduct() 函数中的链接
window.location.href = “
p
a
g
e
C
o
n
t
e
x
t
.
r
e
q
u
e
s
t
.
c
o
n
t
e
x
t
P
a
t
h
/
A
d
m
i
n
P
r
o
d
u
c
t
S
e
r
v
l
e
t
?
m
e
t
h
o
d
=
a
d
d
P
r
o
d
u
c
t
U
I
"
;
∗
/
a
d
m
i
n
/
p
r
o
d
u
c
t
/
a
d
d
.
j
s
p
遍
历
分
类
信
息
<
s
e
l
e
c
t
n
a
m
e
=
"
c
i
d
"
>
<
c
:
f
o
r
E
a
c
h
i
t
e
m
s
=
"
{pageContext.request.contextPath}/AdminProductServlet?method=addProductUI"; *_/admin/product/add.jsp 遍历分类信息 <select name="cid"> <c:forEach items="
pageContext.request.contextPath/AdminProductServlet?method=addProductUI";∗/admin/product/add.jsp遍历分类信息<selectname="cid"><c:forEachitems="{allCats}” var=“c”>
${c.cname}
</c:forEach>
1.5.2_实现上传
1_准备工作
*_设置form: method=post enctype=”multipart/form-data”
*确定form标签下的各个组件的name属性的值保持合法一致
2
第2章2_利用工厂解耦
我们当前的开发末实现,service层对DAO层有依赖,例如在UserServcieImp中出现了
UserDao userDao=new UserDaoImp(); 这条语句.
假如我们做了一个产品OA,但是我们没有办法确定客户采用什么样的数据库,此时我们需要
需要为当前项目开发不同的数据库的版本,例如为oracle,sqlserver,mysql分别开发不同的DAO的实现,但是在项目具体的运行时,我们由无法确定到底执行那种版本.
我们可以通过配置文件来配置dao层的各个具体的实现.
Eg: 在src下创建一个application.xml文件,内容如下
之后我们采用一个工厂来通过读取配置文件创建不同的对象来实现解耦
第3章查询订单
3.1原理
3.2步骤实现
1_准备工作 /admin/left.jsp
d.add(‘010501’,‘0105’,‘订单管理’,
d.add(‘010501’,‘0105’,‘订单管理’,’
p
a
g
e
C
o
n
t
e
x
t
.
r
e
q
u
e
s
t
.
c
o
n
t
e
x
t
P
a
t
h
/
A
d
m
i
n
O
r
d
e
r
S
e
r
v
l
e
t
?
m
e
t
h
o
d
=
f
i
n
d
O
r
d
e
r
s
′
,
′
′
,
′
m
a
i
n
F
r
a
m
e
′
)
;
d
.
a
d
d
(
′
01050
2
′
,
′
010
5
′
,
′
未
付
款
的
订
单
′
,
′
{pageContext.request.contextPath}/AdminOrderServlet?method=findOrders','','mainFrame'); d.add('010502','0105','未付款的订单','
pageContext.request.contextPath/AdminOrderServlet?method=findOrders′,′′,′mainFrame′);d.add(′010502′,′0105′,′未付款的订单′,′{pageContext.request.contextPath}/AdminOrderServlet?method=findOrders&state=1’,’’,‘mainFrame’);
d.add(‘010503’,‘0105’,‘已付款订单’,’KaTeX parse error: Expected 'EOF', got '&' at position 70: …thod=findOrders&̲state=2','','ma…{pageContext.request.contextPath}/AdminOrderServlet?method=findOrders&state=3’,’’,‘mainFrame’);
d.add(‘010505’,‘0105’,‘已完成的订单’,’${pageContext.request.contextPath}/AdminOrderServlet?method=findOrders&state=4’,’’,‘mainFrame’);
2_AdminOrderServlet___>findOrders
获取订单状态
如果获取不到状态获取全部订单
如果可以获取到状态,查询不同状态的订单
将订单放入request
转发/admin/order/lis.jsp
3_OrderService____OrderDao
4_/admin/order/lis.jsp
获取全部订单信息完成响应
总结:本功能特点:多个链连共享相同的代码段
第4章异步加载显示订单详情
4.1原理
4.2步骤
1_将当前功能要实现最终效果先实现(静态效果)
2_用户点击订单详情按钮,向服务端发起ajax请求,向服务端传递订单id
3_服务端获取到订单ID,查询这个订单下所有的订单项以及订单项对应的商品信息,返回集合
4_将返回的集合转换为JSON格式字符串,响应到客户端
5_调试,排除2端错误
6_在客户端获取到服务端想回会的JSON格式的数据,将这些数据绑定在页面上
总结: Ajax功能,注意思路,开发步骤
第5章修改订单状态
5.1原理分析
5.2步骤实现
1_准备工作 admin/order/list.jsp
发货
2_AdminOrderServlet___>updateOrderByOid
获取订单ID
根据订单ID查询订单
设置订单状态
修改订单信息
重新定向到查询已发货订单
3_service__>dao
第6章将项目部署到linux系统上
1_导出SQL语句
2_启动linux,利用CTR连接
3_修改2个配置文件中的参数 c3p0.xml jedisUtils
4_导出项目,以war包形式
5_启动tomcat
6_利用sqlyong连接linux下的mysql,恢复数据
7_启动redis
8_利用fileziller将项目发送到linux上tomcat下的webapp下