网上商城第五天笔记

27 篇文章 0 订阅
23 篇文章 0 订阅

一.我的订单的分析

1.第一步:查询用户所有的订单集合
第二步:对订单集合进行遍历,查询出每一个订单下的所有的订单项

二.我的订单的后端代码实现

 1.header.jsp中
 我的订单:<a href="${pageContext.request.contextPath}/product?method=myOrders"
 2.ProductServlet中
 //获得我的订单
 public void myOrders(){
HttpSession session = request.getSession();
User user = (User)session.getAttribute("user");
if(user==null){
//没有登录
response.sendRedirect(request.getContextPath()+"/login.jsp");
return;

}
ProductService service = new ProductService();
//查询该用户的所有的订单
//集合中的每一个Order对象的数据是不完整的缺少List<OrderItem>
List<Order> orderList = service.findAllOrders(user.getUid());
//循环所有的订单,为每个订单填充订单项集合的信息
if(orderList!=null){
for(Order order:orderList){
//获得每一个订单的oid
String oid = order.getOid();
//查询该订单的所有订单项
List<Map<String,Object>>  mapList = service.findAllOrderItemByOid(oid);
//将mapList转换成List<OrderItem> orderItems
for(Map<String,Object> map : mapList){
//从map中取出count subtotal 封装到OrderItem中
OrderItem item = new OrderItem();
BeanUtils.populate(item,map);
//从map中取出pimage,pname, shop_price封装到Product中
Product product = new Product();
BeanUtils.populate(product,map);

//将Product封装到OrderItem 
item.setProduct(product);
//将OrderItem封装到order中的orderItemList中
order.getOrderItems().add(item);


}

}
}
//orderList封装完整了
request.setAttribute("orderList",orderList);
request.getRequestDispatcher("/order_list.jsp").forward(request,response);

 }
 3.ProductService中
 //获得指定用户的订单集合
 public List<Order> findAllOrders(String uid){
ProductDao dao = new ProductDao();
List<Order> orderList = dao.findAllOrders(uid);
return orderList;
 }
 //查询该订单的所有订单项
 public List<Map<String,Object>>  findAllOrderItemByOid(String oid){
ProductDao dao = new ProductDao();
List<Map<String,Object>>  mapList = dao.findAllOrderItemByOid(oid);
return mapList;
 }
 4.ProductDao中
 public List<Order> findAllOrders(String uid)throws SQLException{
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select * from orders where uid=?";
return runner.query(sql,new BeanListHandler<Order>(Order.class),uid);

 }
  publicList<Map<String,Object>> findAllOrderItemByOid(String oid)throws SQLException{
QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "select i.count,i.subtotal,p.pname,p.shop_price,p.pimage  from orderitem i,product p where i.pid=p.pid and i.oid=?";
List<Map<String,Object>> mapList =  runner.query(sql,new MapListHandler(),oid);
return mapList;

 }

三. 我的订单的前端代码实现

1.order_list.jsp中
<%@ taglib.....
<c:forEach items="${orderList}" var="order">
<c:forEach items="${order.orderItems}" var="orderItem">
<img src="${pageContext.request.contextPath}/${orderItem.product.pimage}"
${orderItem.product.pname}
${orderItem.product.shop_price}
${orderItem.count}
${orderItem.subtotal}
订单编号:后面${order.state==0?"未付款":"已付款"}
</c:forEach>
</c:forEach>


 

四.权限控制

1.filter中新建
UserLoginPrivilegeFilter 
doFilter中
//校验用户是否登录
HttpServletRequest request = (HttpServletRequest)request;
HttpServletResponse response = (HttpServletResponse)response;
HttpSession session = request.getSession();
//判断用户是否已经登录
User user = (User) session.getAttribute("user");
if(user==null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
return ;

}
chain.doFilter(request,response);
2.web.xml中
<filter>
<filter-name>UserLoginPrivilegeFilter</filter-name>
<filter-class>com.itheima.web.filter.UserLoginPrivilegeFilter</filter-class>
</filter>
<filter-mapping>
` <filter-name>UserLoginPrivilegeFilter</filter-name>
<url-pattern>/privilege/*</url-pattern>
</filter-mapping>
3.新建privilege文件夹
放入order_list.jsp
权限控制敲代码之前就应该这样设计,属于粗粒度权限控制
实际开发中自己写,这里不实现

五.用户的注销

1.header.jsp中
欢迎你后面加一个退出
<li><a href="${pageContext.request.contextPath}/user?method=logout">退出</a></li>
2.UserServlet中
//用户注销
public void logout{
HttpSession session = request.getSession();
//从session中将user删除
session.removeAttribute("user");
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
如果有自动登录的话,记得注销的同时,清除cookie

六.文件上传的介绍和快速入门

1.上传组件
<form action="/WEB32/fileuploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="filename">
<input type="submit" value="上传文件">
</form>
2.服务器端
导入两个包io包和fileupload
新建FileuploadServlet
doGet中{
//接受上传文件,5个步骤
//1.创建磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.创建文件上传的核心类
ServletFileUpload upload = new ServletFileUpload();

//3.解析request---获得文件项集合
List<FileItem> parseRequest = upload.parseRequest(request);
//4.遍历文件项集合
for(FileItem item : parseRequest){
//5.判断普通表单项/文件上传项
boolean formField = item.isFormField();//是否是一个普通表单项
if(formField){
String fieldName = item.getFieldName();
String fieldValue = item.getString();
System.out.println(fieldName+":"+fieldValue);
}else{
//文件上传
//获得文件的名称
String fileName = item.getName();
//获得上传文件的内容
InputStream in = item.getInputStream();
//将in中的数据拷贝到服务器上
String path = this.getServletContext().getRealPath("upload");
OutputStream out = new FileOutputStream(path+"/"+fileName);
int len = 0;
byte[] buffer = new byte[1024];
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
in.close();
out.close();


}
}
}



七.文件上传详解

package com.itheima;


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;


public class FileuploadServlet2 extends HttpServlet {


public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


try {


//1、创建磁盘文件项工厂
//作用:设置缓存文件的大小  设置临时文件存储的位置
String path_temp = this.getServletContext().getRealPath("temp");
//DiskFileItemFactory factory = new DiskFileItemFactory(1024*1024, new File(path_temp));
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*1024);
factory.setRepository(new File(path_temp));
//2、创建文件上传的核心类
ServletFileUpload upload = new ServletFileUpload(factory);
//设置上传文件的名称的编码
upload.setHeaderEncoding("UTF-8");


//ServletFileUpload的API
boolean multipartContent = upload.isMultipartContent(request);//判断表单是否是文件上传的表单
if(multipartContent){
//是文件上传的表单
//***解析request获得文件项集合
List<FileItem> parseRequest = upload.parseRequest(request);
if(parseRequest!=null){
for(FileItem item : parseRequest){
//判断是不是一个普通表单项
boolean formField = item.isFormField();
if(formField){
//username=zhangsan
String fieldName = item.getFieldName();
String fieldValue = item.getString("UTF-8");//对普通表单项的内容进行编码

System.out.println(fieldName+"----"+fieldValue);

//当表单是enctype="multipart/form-data"时 request.getParameter相关的方法
//String parameter = request.getParameter("username");

}else{
//文件上传项
//文件的名
String fileName = item.getName();
//获得上传文件的内容
InputStream in = item.getInputStream();
String path_store = this.getServletContext().getRealPath("upload");
OutputStream out = new FileOutputStream(path_store+"/"+fileName);
IOUtils.copy(in, out);
in.close();
out.close();

//删除临时文件
item.delete();

}
}
}


}else{
//不是文件上传表单
//使用原始的表单数据的获得方式 request.getParameter();
}
} catch (FileUploadException e) {
e.printStackTrace();
}




}


public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值