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>图片:</td>
<td><input type="file" name="imgurl"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="取消"></td>
</tr>
</table>
</form>
</body>
</html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<jsp:forward page="/home.jsp"></jsp:forward>
</body>
</html>
home.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!--
Created by Artisteer v2.6.0.35446
Base template (without user's data) checked by http://validator.w3.org : "This page is valid XHTML 1.0 Transitional"
-->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Estore购物商城</title>
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
<!--[if IE 6]><link rel="stylesheet" href="style.ie6.css" type="text/css" media="screen" /><![endif]-->
<!--[if IE 7]><link rel="stylesheet" href="style.ie7.css" type="text/css" media="screen" /><![endif]-->
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript">
var focus_width = 632;
var focus_height = 320;
var picPath;
var linkUrl = "";
var swfPath = "adImage.swf";
var sp = "|";
var banners = new Array("images/screen1.jpg", "images/screen2.jpg",
"images/screen3.jpg", "images/screen4.jpg", "images/screen5.jpg",
"images/screen6.jpg");
var links = new Array("#", "#", "#", "#", "#", "#");
for (var i = 0; i < banners.length; i++) {
if (i == banners.length - 1) {
sp = "";
}
picPath += banners[i] + sp;
var index = picPath.indexOf("undefined");
if (index != -1) {
picPath = picPath.substr(index + 9, picPath.length);
}
linkUrl += links[i] + sp;
}
window.onload = function() {
var username = document.getElementById("username");
//username.value = window.decodeURI("${cookie.remember.value}");
username.value = window.decodeURIComponent("${cookie.remember.value}",
"utf-8");
}
</script>
</head>
<body>
<div id="art-main">
<div class="art-sheet">
<div class="art-sheet-tl"></div>
<div class="art-sheet-tr"></div>
<div class="art-sheet-bl"></div>
<div class="art-sheet-br"></div>
<div class="art-sheet-tc"></div>
<div class="art-sheet-bc"></div>
<div class="art-sheet-cl"></div>
<div class="art-sheet-cr"></div>
<div class="art-sheet-cc"></div>
<div class="art-sheet-body">
<div class="art-header">
<div class="art-header-png"></div>
<div class="art-header-jpeg"></div>
<div class="art-logo">
<h1 id="name-text" class="art-logo-name">
<a href="#">Estore购物商城</a>
</h1>
<div id="slogan-text" class="art-logo-text">快乐的购物天堂...</div>
</div>
</div>
<div class="art-nav">
<div class="l"></div>
<div class="r"></div>
<ul class="art-menu">
<li><a href="#" class="active"><span class="l"></span><span
class="r"></span><span class="t">主页</span> </a></li>
<li><a href="#"><span class="l"></span><span class="r"></span><span
class="t">商品分类</span> </a>
<ul>
<li><a href="#">图书、电子书刊、音像</a></li>
<li><a href="#">电子数码</a>
<ul>
<li><a href="#">家用电器</a></li>
<li><a href="#">手机数码</a></li>
<li><a href="#">电脑、办公</a></li>
</ul></li>
<li><a href="#">家居、家具、家装、厨具</a></li>
</ul></li>
<li><a href="#"><span class="l"></span><span class="r"></span><span
class="t">关于我们</span> </a></li>
<c:if test="${not empty existUser}">
<li>当前用户:${existUser.username }</li>
<li><a href="${pageContext.request.contextPath }/logout">注销</a>
</li>
</c:if>
<c:if test="${empty existUser }">
<li>未登录</li>
</c:if>
</ul>
</div>
<div class="art-content-layout">
<div class="art-content-layout-row">
<div class="art-layout-cell art-content">
<div class="art-post">
<div class="art-post-tl"></div>
<div class="art-post-tr"></div>
<div class="art-post-bl"></div>
<div class="art-post-br"></div>
<div class="art-post-tc"></div>
<div class="art-post-bc"></div>
<div class="art-post-cl"></div>
<div class="art-post-cr"></div>
<div class="art-post-cc"></div>
<div class="art-post-body">
<div class="art-post-inner art-article">
<div class="art-postmetadataheader">
<h2 class="art-postheader">商品促销信息</h2>
</div>
<div class="art-postcontent">
<!-- article-content -->
<script type="text/javascript" src="mutilpleFlash.js"></script>
<!-- /article-content -->
</div>
<div class="cleared"></div>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="art-post">
<div class="art-post-tl"></div>
<div class="art-post-tr"></div>
<div class="art-post-bl"></div>
<div class="art-post-br"></div>
<div class="art-post-tc"></div>
<div class="art-post-bc"></div>
<div class="art-post-cl"></div>
<div class="art-post-cr"></div>
<div class="art-post-cc"></div>
<div class="art-post-body">
<div class="art-post-inner art-article">
<div class="art-postmetadataheader">
<h2 class="art-postheader">热卖商品销售中</h2>
</div>
<div class="art-postcontent">
<!-- article-content -->
<p>
<span class="art-button-wrapper"> <span class="l">
</span> <span class="r"> </span> <a class="art-button"
href="${pageContext.request.contextPath}/product?action=findAllProduct">更多商品...</a>
</span>
</p>
<div class="cleared"></div>
<div class="art-content-layout overview-table">
<div class="art-content-layout-row">
<c:forEach items="${ps}" var="p" varStatus="vs">
<div class="art-layout-cell">
<div class="overview-table-inner">
<h4>${p.pname }</h4>
<a
href="${pageContext.request.contextPath}/findProductId?id=${p.id}"><img
src="${pageContext.request.contextPath }${p.imgurl}"
width="55px" height="55px" alt="an image" class="image" />
</a>
<p>价格: ¥${p.price}</p>
<p>
<a
href="${pageContext.request.contextPath}/findProductId?id=${p.id}">速速抢购</a>
</p>
</div>
</div>
<c:if test="${vs.count%6==0 and !(vs.last)}">
<!-- 判断当前已经有6个商品且不是最后一个元素,则这一行结束,重新开启一行 -->
</div>
<div class="art-content-layout-row">
</c:if>
</c:forEach>
</div>
<!-- end row -->
<!-- forEach结束之后是否需要在关闭行标签,加入最后一行不够6个时行标签是开着的 -->
</div>
<!-- end table -->
</div>
<!-- /article-content -->
<div class="cleared"></div>
</div>
<div class="cleared"></div>
</div>
</div>
</div>
<div class="art-layout-cell art-sidebar1">
<div class="art-vmenublock">
<div class="art-vmenublock-body">
<div class="art-vmenublockheader">
<div class="l"></div>
<div class="r"></div>
<div class="t">导航菜单</div>
</div>
<div class="art-vmenublockcontent">
<div class="art-vmenublockcontent-tl"></div>
<div class="art-vmenublockcontent-tr"></div>
<div class="art-vmenublockcontent-bl"></div>
<div class="art-vmenublockcontent-br"></div>
<div class="art-vmenublockcontent-tc"></div>
<div class="art-vmenublockcontent-bc"></div>
<div class="art-vmenublockcontent-cl"></div>
<div class="art-vmenublockcontent-cr"></div>
<div class="art-vmenublockcontent-cc"></div>
<div class="art-vmenublockcontent-body">
<!-- block-content -->
<ul class="art-vmenu">
<li><a href="page.html?i1"><span class="l"></span><span
class="r"></span><span class="t">主页</span> </a></li>
<li><a
href="${pageContext.request.contextPath }/add_product.jsp"><span
class="l"></span><span class="r"></span><span class="t">添加商品</span>
</a></li>
<li><a href="page.html?i4"><span class="l"></span><span
class="r"></span><span class="t">查看商品</span> </a></li>
<li><a href="page.html?i5"><span class="l"></span><span
class="r"></span><span class="t">查看购物车</span> </a></li>
<li><a href="page.html?i6"><span class="l"></span><span
class="r"></span><span class="t">查看订单</span> </a></li>
<li><a href="page.html?i7"><span class="l"></span><span
class="r"></span><span class="t">关于我们</span> </a></li>
<li><a href="page.html?i8"><span class="l"></span><span
class="r"></span><span class="t">联系方式</span> </a></li>
</ul>
<!-- /block-content -->
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="art-block">
<div class="art-block-body">
<div class="art-blockheader">
<div class="l"></div>
<div class="r"></div>
<div class="t">用户登陆</div>
</div>
<div class="art-blockcontent">
<div class="art-blockcontent-tl"></div>
<div class="art-blockcontent-tr"></div>
<div class="art-blockcontent-bl"></div>
<div class="art-blockcontent-br"></div>
<div class="art-blockcontent-tc"></div>
<div class="art-blockcontent-bc"></div>
<div class="art-blockcontent-cl"></div>
<div class="art-blockcontent-cr"></div>
<div class="art-blockcontent-cc"></div>
<div class="art-blockcontent-body">
<!-- block-content -->
<div>
<form method="post" id="loginForm"
action="${pageContext.request.contextPath }/login">
<table>
<tr>
<td>用户名</td>
<td><input type="text" value="" name="username"
id="username" /><span>${map["username.error"] }</span><br />
</td>
</tr>
<tr>
<td>密 码</td>
<td><input type="text" value="" name="password"
id="password" /><span>${map["password.error"] }</span>
</td>
</tr>
<tr>
<td colspan="2"><input type="checkbox"
name="remember" value="on" />记住用户 <input
type="checkbox" name="autologin" value="on" />自动登陆</td>
</tr>
<tr>
<td colspan="1"><span class="art-button-wrapper">
<span class="l"> </span> <span class="r"> </span> <input
class="art-button" type="submit" name="loginbtn"
value="登陆" />
</span></td>
<td colspan="1"><span class="art-button-wrapper">
<span class="l"> </span> <span class="r"> </span> <a
href="${pageContext.request.contextPath}/register.jsp"><input
class="art-button" type="button" name="registerbtn"
value="注册" /> </a>
</span></td>
<span>${requestScope["login.failure"]}</span>
</table>
</form>
</div>
<!-- /block-content -->
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="art-block">
<div class="art-block-body">
<div class="art-blockheader">
<div class="l"></div>
<div class="r"></div>
<div class="t">查询商品</div>
</div>
<div class="art-blockcontent">
<div class="art-blockcontent-tl"></div>
<div class="art-blockcontent-tr"></div>
<div class="art-blockcontent-bl"></div>
<div class="art-blockcontent-br"></div>
<div class="art-blockcontent-tc"></div>
<div class="art-blockcontent-bc"></div>
<div class="art-blockcontent-cl"></div>
<div class="art-blockcontent-cr"></div>
<div class="art-blockcontent-cc"></div>
<div class="art-blockcontent-body">
<!-- block-content -->
<div>
<form method="get" id="newsletterform"
action="javascript:void(0)">
<input type="text" value="" name="email" id="s"
style="width: 95%;" /> <span class="art-button-wrapper">
<span class="l"> </span> <span class="r"> </span> <input
class="art-button" type="submit" name="search" value="查询" />
</span>
</form>
</div>
<!-- /block-content -->
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="art-block">
<div class="art-block-body">
<div class="art-blockheader">
<div class="l"></div>
<div class="r"></div>
<div class="t">联系信息</div>
</div>
<div class="art-blockcontent">
<div class="art-blockcontent-tl"></div>
<div class="art-blockcontent-tr"></div>
<div class="art-blockcontent-bl"></div>
<div class="art-blockcontent-br"></div>
<div class="art-blockcontent-tc"></div>
<div class="art-blockcontent-bc"></div>
<div class="art-blockcontent-cl"></div>
<div class="art-blockcontent-cr"></div>
<div class="art-blockcontent-cc"></div>
<div class="art-blockcontent-body">
<!-- block-content -->
<div>
<img src="images/contact.jpg" alt="an image"
style="margin: 0 auto;display:block;width:95%" /> <br />
<b>公司信息</b><br /> 传智播客<br /> 电子邮箱: <a
href="mailto:[email protected]">[email protected]</a><br />
<br /> 电话: (010)51552112 <br /> 传真: (010)51552110
</div>
<!-- /block-content -->
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</div>
</div>
</div>
</div>
<div class="cleared"></div>
<div class="art-footer">
<div class="art-footer-t"></div>
<div class="art-footer-l"></div>
<div class="art-footer-b"></div>
<div class="art-footer-r"></div>
<div class="art-footer-body">
<a href="#" class="art-rss-tag-icon" title="RSS"></a>
<div class="art-footer-text">
<p>
<a href="#">关于我们</a> | <a href="#">联系我们</a> | <a href="#">人才招聘</a>
| <a href="#">商家入驻</a><br /> 版权 © 2012 ---. 传智播客 版权所有.
</p>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</div>
<div class="cleared"></div>
</div>
</body>