package cn.itcast.estore.web.servlet;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
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;
import cn.itcast.estore.domain.Product;
import cn.itcast.estore.service.ProductService;
import cn.itcast.estore.utils.FileUploadUtils;
import cn.itcast.estore.utils.PicUtils;
public class ProductServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
if ("addProduct".equals(action)) {
// 将数据封装到Product中
Product product = new Product();
Map<String, String> map = null;
try {
map = getProductMap(request);
BeanUtils.populate(product, map);
// 生成缩略图
String source_imgurl = map.get("imgurl");
PicUtils picUtils = new PicUtils(this.getServletContext()
.getRealPath("/uploadImages") + source_imgurl);
// 以高度为基准,等比例缩放图片
// picUtils.resizeByHeight(picUtils.getSrcHeight());
// 设置自定义宽、高缩放图片
picUtils.resize(55, 55);
// 调用service完成数据插入
ProductService service = new ProductService();
service.addProduct(product);
// 重定向到add_product_success.jsp
request.getRequestDispatcher("/index.jsp").forward(request,
response);
return;
} catch (FileUploadException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} else if ("findAllProduct".equals(action)) {
// 调用service完成数据查询
ProductService service = new ProductService();
try {
List<Product> ps = service.findAddProduct();
// 将ps保存在request中,转发到home.jsp
request.setAttribute("ps", ps);
request.getRequestDispatcher("/index.jsp").forward(request,
response);
return;
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// 封装上传商品信息
public Map<String, String> getProductMap(HttpServletRequest request)
throws FileUploadException, FileNotFoundException, IOException {
// 封装商品数据信息
Map<String, String> map = new HashMap<String, String>();
// 封装商品id
String UUid = UUID.randomUUID().toString();
map.put("id", UUid);
// 1.创建 DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
// 2.创建ServletFileUpload
ServletFileUpload upload = new ServletFileUpload(factory);
// 解决上传文件中文名称乱码
upload.setHeaderEncoding("utf-8");
// 3.底层通过request获取数据,进行解析,将解析的数据封装到List<FileItem>
List<FileItem> items = upload.parseRequest(request);
// 4.循环遍历
for (FileItem item : items) {
// 判断是否是上传组件
if (item.isFormField()) {
// 非上传组件
String fileName = item.getFieldName();
String context = item.getString();
context = new String(context.getBytes("iso-8859-1"), "utf-8");
// 封装非组件数据
map.put(fileName, context);
} else {
// 上传组件
// 获取上传文件名称
String filename = item.getName();
filename = FileUploadUtils.getRealName(filename);
// 获取随机文件名
String randomName = FileUploadUtils.getUUIDFileName(filename);
// 获取uploadImages发布后的绝对磁盘路径
String parentPath = this.getServletContext().getRealPath(
"uploadImages");
// 获取随机目录
String randomDir = FileUploadUtils
.getRandomDirectory(randomName);
File rd = new File(parentPath, randomDir);
// 如果目录不存在,就创建
if (!rd.exists()) {
rd.mkdirs();
}
// 复制上传文件
IOUtils.copy(item.getInputStream(), new FileOutputStream(
new File(rd, randomName)));
// 封装imgUrl
map.put("imgurl", "/uploadImages" + randomDir + "/"
+ randomName);
}
}
return map;
}
}
add_product.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>增加商品</title>
</head>
<body>
<form
action="${pageContext.request.contextPath }/product?action=addProduct"
method="post" enctype="multipart/form-data">
<table border="2px" align="center">
<tr>
<td>商品名称:</td>
<td><input type="text" name="pname"></td>
</tr>
<tr>
<td>价钱:</td>
<td><input type="text" name="price"></td>
</tr>
<tr>
<td>类别:</td>
<td><select name="category">
<option>----请选择类别-----</option>
<option value="日常用品">日常用品</option>
<option value="生活用户">生活用户</option>
<option value="美颜">美颜</option>
</select></td>
</tr>
<tr>
<td>数量:</td>
<td><input type="text" name="num"></td>
</tr>
<tr>
<td>描述:</td>
<td><textarea rows="5" cols="20" name="desc"></textarea></td>
</tr>
<tr>
<td>图片: