目录
servlet+filter配合工作解析详见:
模仿天猫商城的J2EE商城网站项目后端——servlet+filter配合详细分析https://blog.csdn.net/qq_37154145/article/details/121623536
模仿天猫商城的J2EE商城网站项目后端6—dao包https://blog.csdn.net/qq_37154145/article/details/122478301
模仿天猫商城的J2EE商城网站项目后端8—filter包https://blog.csdn.net/qq_37154145/article/details/122519038
BaseForeServlet.java
package tmall.servlet;
import tmall.dao.*;
import tmall.util.Page;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 前台页面基本功能的servlet
* @author LSB
*/
public class BaseForeServlet extends HttpServlet {
// 为子类提供DAO对象
protected CategoryDAO categoryDAO = new CategoryDAO();
protected OrderDAO orderDAO = new OrderDAO();
protected OrderItemDAO orderItemDAO = new OrderItemDAO();
protected ProductDAO productDAO = new ProductDAO();
protected ProductImageDAO productImageDAO = new ProductImageDAO();
protected PropertyDAO propertyDAO = new PropertyDAO();
protected PropertyValueDAO propertyValueDAO = new PropertyValueDAO();
protected ReviewDAO reviewDAO = new ReviewDAO();
protected UserDAO userDAO = new UserDAO();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
// 分页信息start、count
int start = 0;
int count = 10;
if (null != req.getParameter("page.start") && null != req.getParameter("page.count")) {
start = Integer.parseInt(req.getParameter("page.start"));
count = Integer.parseInt(req.getParameter("page.count"));
}
Page page = new Page(start, count);
// 利用反射获取方法,并进行页面跳转
String method = (String) req.getAttribute("method");
Method m = this.getClass().getMethod(method, HttpServletRequest.class, HttpServletResponse.class,
Page.class);
String redirect = m.invoke(this, req, resp, page).toString();
if (redirect.startsWith("@")) {
resp.sendRedirect(redirect.substring(1));
} else if (redirect.startsWith("%")) {
resp.getWriter().print(redirect.substring(1));
} else {
req.getRequestDispatcher(redirect).forward(req, resp);
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
ForeServlet.java
package tmall.servlet;
import org.apache.commons.lang.math.RandomUtils;
import org.springframework.web.util.HtmlUtils;
import tmall.bean.*;
import tmall.dao.CategoryDAO;
import tmall.dao.OrderDAO;
import tmall.dao.ProductDAO;
import tmall.dao.ProductImageDAO;
import tmall.util.Page;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 前台页面功能servlet
* @author LSB
*/
public class ForeServlet extends BaseForeServlet {
/**
* 主页的数据处理
* @param request
* @param response
* @param page
* @return "home.jsp"
*/
public String home(HttpServletRequest request, HttpServletResponse response, Page page) {
System.out.println("=============================================================");
List<Category> categories = new CategoryDAO().list();
new ProductDAO().fill(categories);
new ProductDAO().fillByRow(categories);
request.setAttribute("categories", categories);
return "home.jsp";
}
/**
* 注册操作的数据处理
* @param request
* @param response
* @param page
* @return "register.jsp"/"@registerSuccess.jsp"
*/
public String register(HttpServletRequest request, HttpServletResponse response, Page page) {
String name = request.getParameter("name");
String password = request.getParameter("password");
name = HtmlUtils.htmlEscape(name);
System.out.println(name);
boolean exist = userDAO.isExist(name);
if (exist) {
request.setAttribute("msg", "用户名已经被使用,不能使用");
return "register.jsp";
}
User user = new User();
user.setName(name);
user.setPassword(password);
System.out.println(user.getName());
System.out.println(user.getPassword());
userDAO.add(user);
return "@registerSuccess.jsp";
}
/**
* 登录操作的数据处理
* @param request
* @param response
* @param page
* @return "@forehome"
*/
public String login(HttpServletRequest request, HttpServletResponse response, Page page) {
String name = request.getParameter("name");
name = HtmlUtils.htmlEscape(name);
String password = request.getParameter("password");
User user = userDAO.get(name, password);
if (null == user) {
request.setAttribute("msg", "账号密码错误");
return "login.jsp";
}
request.getSession().setAttribute("user", user);
return "@forehome";
}
/**
* 登出(退出登录)操作的数据处理
* @param request
* @param response
* @param page
* @return "@forehome"
*/
public String logout(HttpServletRequest request, HttpServletResponse response, Page page) {
request.getSession().removeAttribute("user");
return "@forehome";
}
/**
* 产品页面的数据处理
* @param request
* @param response
* @param page
* @return "product.jsp"
*/
public String product(HttpServletRequest request, HttpServletResponse response, Page page) {
int pid = Integer.parseInt(request.getParameter("pid"));
Product p = productDAO.get(pid);
List<ProductImage> productSingleImages = productImageDAO.list(p, ProductImageDAO.type_single);
List<ProductImage> productDetailImages = productImageDAO.list(p, ProductImageDAO.type_detail);
p.setProductSingleImages(productSingleImages);
p.setProductDetailImages(productDetailImages);
List<PropertyValue> pvs = propertyValueDAO.list(p.getId());
List<Review> reviews = reviewDAO.list(p.getId());
productDAO.setSaleAndReviewNumber(p);
request.setAttribute("reviews", reviews);
request.setAttribute("p", p);
request.setAttribute("pvs", pvs);
return "product.jsp";
}
/**
* 判断是否登录
* @param request
* @param response
* @param page
* @return "%success"/"%fail"
*/
public String checkLogin(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
if (null != user)
return "%success";
return "%fail";
}
/**
* Ajax登录操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"/"%fail"
*/
public String loginAjax(HttpServletRequest request, HttpServletResponse response, Page page) {
String name = request.getParameter("name");
String password = request.getParameter("password");
User user = userDAO.get(name, password);
if (null == user)
return "%fail";
request.getSession().setAttribute("user", user);
return "%success";
}
/**
* 分类页面的数据处理
* 兼商品排列方式处理,分别是:
* 按评论数量降序、按商品上架日期升序、按商品已售售数量升序、按价格升序、按照评论数量和已售数量综合(乘积)降序
* @param request
* @param response
* @param page
* @return "category.jsp"
*/
public String category(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category category = new CategoryDAO().get(cid);
new ProductDAO().fill(category);
new ProductDAO().setSaleAndReviewNumber(category.getProducts());
String sort = request.getParameter("sort");
if (null != sort) {
switch (sort) {
// 按评论数量降序排列
case "review":
Collections.sort(category.getProducts(), new Comparator<Product>() {
/*
* 重写compare方法
* p1、p2为上一句代码category.getProducts()获取的List<Product>中的两个元素product,p1下标<p2下标
* return<0,p2<p1,位置互换
* return>=0,p2>P1,位置不变
* 下面的所有case逻辑同理可推
*/
@Override
public int compare(Product p1, Product p2) {
return p2.getReviewCount() - p1.getReviewCount();
}
});
break;
// 按商品上架日期升序排列
case "date":
Collections.sort(category.getProducts(), new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
return p1.getCreateDate().compareTo(p2.getCreateDate());
}
});
break;
// 按商品已售售数量升序排列
case "saleCount":
Collections.sort(category.getProducts(), new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
return p1.getSaleCount() - p2.getSaleCount();
}
});
break;
// 按价格升序排列
case "price":
Collections.sort(category.getProducts(), new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
return (int) (p1.getPromotePrice() - p2.getPromotePrice());
}
});
break;
// 按照评论数量和已售数量综合(乘积)降序排列
case "all":
Collections.sort(category.getProducts(), new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
return p2.getReviewCount() * p2.getSaleCount() - p1.getReviewCount() * p1.getSaleCount();
}
});
break;
}
}
request.setAttribute("category", category);
return "category.jsp";
}
/**
* 搜索结果页面的数据处理
* @param request
* @param response
* @param page
* @return "searchResult.jsp"
*/
public String search(HttpServletRequest request, HttpServletResponse response, Page page) {
String keyword = request.getParameter("keyword");
List<Product> ps = new ProductDAO().search(keyword, 0, 20);
request.setAttribute("ps", ps);
return "searchResult.jsp";
}
/**
* 在商品浏览页面,点击购买数量按钮(“+”/“-”)的数据处理
* @param request
* @param response
* @param page
* @return "@forebuy?orderItemId=?"
*/
public String buyone(HttpServletRequest request, HttpServletResponse response, Page page) {
int pid = Integer.parseInt(request.getParameter("pid"));
int num = Integer.parseInt(request.getParameter("num"));
Product p = productDAO.get(pid);
int orderItemId = 0;
User user = (User) request.getSession().getAttribute("user");
// 遍历此用户对应的所有订单项,如果其产品id等于p.getId(),就对对应订单项的数量追加,不等于,则新建订单项
boolean found = false;
List<OrderItem> orderItems = orderItemDAO.listByUser(user.getId());
for (OrderItem orderItem : orderItems) {
if (orderItem.getProduct().getId() == p.getId()) {
orderItem.setNumber(orderItem.getNumber() + num);
orderItemDAO.update(orderItem);
found = true;
orderItemId = orderItem.getId();
break;
}
}
if (!found) {
OrderItem orderItem = new OrderItem();
orderItem.setUser(user);
orderItem.setNumber(num);
orderItem.setProduct(p);
orderItemDAO.add(orderItem);
orderItemId = orderItem.getId();
}
return "@forebuy?orderItemId=" + orderItemId;
}
/**
* 点击购买按钮的数据处理
* @param request
* @param response
* @param page
* @return "buy.jsp"
*/
public String buy(HttpServletRequest request, HttpServletResponse response, Page page) {
String[] oiids = request.getParameterValues("orderItemId");
List<OrderItem> orderItems = new ArrayList<>(); // 购买(想要付钱的)订单中的订单项
float total = 0; // 订单总价
for (String strid : oiids) {
int orderItemId = Integer.parseInt(strid);
OrderItem orderItem = orderItemDAO.get(orderItemId);
total += orderItem.getProduct().getPromotePrice() * orderItem.getNumber();
orderItems.add(orderItem);
}
request.getSession().setAttribute("orderItems", orderItems);
request.setAttribute("total", total);
return "buy.jsp";
}
/**
* 将商品加入购物车操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"
*/
public String addCart(HttpServletRequest request, HttpServletResponse response, Page page) {
int pid = Integer.parseInt(request.getParameter("pid"));
Product product = productDAO.get(pid);
int num = Integer.parseInt(request.getParameter("num"));
User user = (User) request.getSession().getAttribute("user");
boolean found = false;
List<OrderItem> orderItems = orderItemDAO.listByUser(user.getId());
for (OrderItem orderItem : orderItems) {
if (orderItem.getProduct().getId() == product.getId()) {
orderItem.setNumber(orderItem.getNumber() + num);
orderItemDAO.update(orderItem);
found = true;
break;
}
}
if (!found) {
OrderItem orderItem = new OrderItem();
orderItem.setUser(user);
orderItem.setNumber(num);
orderItem.setProduct(product);
orderItemDAO.add(orderItem);
}
return "%success";
}
/**
* 购物车页面的数据处理
* @param request
* @param response
* @param page
* @return "cart.jsp"
*/
public String cart(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
List<OrderItem> orderItems = orderItemDAO.listByUser(user.getId());
request.setAttribute("orderItems", orderItems);
return "cart.jsp";
}
/**
* 改变订单项操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"/"%fail"
*/
public String changeOrderItem(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
if (null == user) {
return "%fail";
}
int pid = Integer.parseInt(request.getParameter("pid"));
int number = Integer.parseInt(request.getParameter("number"));
List<OrderItem> orderItems = orderItemDAO.listByUser(user.getId());
for (OrderItem orderItem : orderItems) {
if (orderItem.getProduct().getId() == pid) {
orderItem.setNumber(number);
orderItemDAO.update(orderItem);
break;
}
}
return "%success";
}
/**
* 删除订单项操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"/"%fail"
*/
public String deleteOrderItem(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
if (null == user) {
return "%fail";
}
int orderItemId = Integer.parseInt(request.getParameter("orderItem"));
orderItemDAO.delete(orderItemId);
return "%success";
}
/**
* 创建订单(下单)操作的数据处理
* @param request
* @param response
* @param page
* @return "@forealipay?oid=?&total=?"
*/
public String createOrder(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
List<OrderItem> orderItems = (List<OrderItem>) request.getSession().getAttribute("orderItems");
if (orderItems.isEmpty()) {
return "@login.jsp";
}
String address = request.getParameter("address");
String post = request.getParameter("post");
String receiver = request.getParameter("receiver");
String mobile = request.getParameter("mobile");
String userMessage = request.getParameter("userMessage");
Order order = new Order();
String orderCode = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + RandomUtils.nextInt(10000);
order.setOrderCode(orderCode);
order.setAddress(address);
order.setPost(post);
order.setReceiver(receiver);
order.setMobile(mobile);
order.setUserMessage(userMessage);
order.setCreateDate(new Date());
order.setUser(user);
order.setStatus(OrderDAO.waitPay);
orderDAO.add(order);
float total = 0;
for (OrderItem orderItem : orderItems) {
orderItem.setOrder(order);
orderItemDAO.update(orderItem);
total += orderItem.getProduct().getPromotePrice() * orderItem.getNumber();
}
return "@forealipay?oid=" + order.getId() + "&total=" + total;
}
/**
* 支付宝付款页面的处理
* @param request
* @param response
* @param page
* @return "alipay.jsp"
*/
public String alipay(HttpServletRequest request, HttpServletResponse response, Page page) {
return "alipay.jsp";
}
/**
* 付款页面的数据处理
* @param request
* @param response
* @param page
* @return "payed.jsp"(付款成功后展示)
*/
public String payed(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order order = orderDAO.get(oid);
order.setStatus(OrderDAO.waitDelivery);
order.setPayDate(new Date());
new OrderDAO().update(order);
request.setAttribute("o", order);
return "payed.jsp";
}
/**
* 已购买商品页面的数据处理
* @param request
* @param response
* @param page
* @return "bought.jsp"
*/
public String bought(HttpServletRequest request, HttpServletResponse response, Page page) {
User user = (User) request.getSession().getAttribute("user");
List<Order> orders = orderDAO.list(user.getId(), OrderDAO.delete);
orderItemDAO.fill(orders);
request.setAttribute("os", orders);
return "bought.jsp";
}
/**
* 确认付款页面的数据处理
* @param request
* @param response
* @param page
* @return "confirmPay.jsp"
*/
public String confirmPay(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order o = orderDAO.get(oid);
orderItemDAO.fill(o);
request.setAttribute("o", o);
request.setAttribute("o", o);
return "confirmPay.jsp";
}
/**
* 确认订单(确认收货)页面的数据处理
* @param request
* @param response
* @param page
* @return "orderConfirmed.jsp"(确认后展现)
*/
public String orderConfirmed(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order o = orderDAO.get(oid);
o.setStatus(OrderDAO.waitReview);
o.setConfirmDate(new Date());
orderDAO.update(o);
return "orderConfirmed.jsp";
}
/**
* 删除订单操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"
*/
public String deleteOrder(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order o = orderDAO.get(oid);
o.setStatus(OrderDAO.delete);
orderDAO.update(o);
return "%success";
}
/**
* 评论展示的数据处理
* @param request
* @param response
* @param page
* @return "review.jsp"
*/
public String review(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order o = orderDAO.get(oid);
orderItemDAO.fill(o);
Product p = o.getOrderItems().get(0).getProduct();
List<Review> reviews = reviewDAO.list(p.getId());
productDAO.setSaleAndReviewNumber(p);
request.setAttribute("p", p);
request.setAttribute("o", o);
request.setAttribute("reviews", reviews);
return "review.jsp";
}
/**
* 评论操作的数据处理
* @param request
* @param response
* @param page
* @return "@forereview?oid=?&showonly=true"
*/
public String doreview(HttpServletRequest request, HttpServletResponse response, Page page) {
int oid = Integer.parseInt(request.getParameter("oid"));
Order o = orderDAO.get(oid);
o.setStatus(OrderDAO.finish);
orderDAO.update(o);
int pid = Integer.parseInt(request.getParameter("pid"));
Product p = productDAO.get(pid);
String content = request.getParameter("content");
content = HtmlUtils.htmlEscape(content);
User user = (User) request.getSession().getAttribute("user");
Review review = new Review();
review.setContent(content);
review.setProduct(p);
review.setCreateDate(new Date());
review.setUser(user);
reviewDAO.add(review);
return "@forereview?oid=" + oid + "&showonly=true";
}
}
BaseBackServlet.java
package tmall.servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import tmall.dao.*;
import tmall.util.Page;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* 网站后台管理Servlet的统一父类
* 负责重复性工作:
* 1、为CategoryServlet、UserServlet等子类提供CRUD及edit接口;
* 2、对DAO进行实例化;3、获取并处理分页信息;
* 3、从前端获取前面filter设置的method并调用method;
* 4、进行前端页面跳转;
* 5、解析上传的文件(图片)
* @author LSB
*/
public abstract class BaseBackServlet extends HttpServlet {
// 为子类提供CRUD及edit的抽象方法
public abstract String add(HttpServletRequest request, HttpServletResponse response, Page page); // 增
public abstract String delete(HttpServletRequest request, HttpServletResponse response, Page page); // 删
public abstract String edit(HttpServletRequest request, HttpServletResponse response, Page page); // edit
public abstract String update(HttpServletRequest request, HttpServletResponse response, Page page); // 改
public abstract String list(HttpServletRequest request, HttpServletResponse response, Page page); // 查
// 为子类提供各DAO类对象
protected CategoryDAO categoryDAO = new CategoryDAO();
protected OrderDAO orderDAO = new OrderDAO();
protected OrderItemDAO orderItemDAO = new OrderItemDAO();
protected ProductDAO productDAO = new ProductDAO();
protected ProductImageDAO productImageDAO = new ProductImageDAO();
protected PropertyDAO propertyDAO = new PropertyDAO();
protected PropertyValueDAO propertyValueDAO = new PropertyValueDAO();
protected ReviewDAO reviewDAO = new ReviewDAO();
protected UserDAO userDAO = new UserDAO();
@Override
public void service(HttpServletRequest request, HttpServletResponse response) {
try {
/*获取分页信息并进行处理*/
int start = 0;
int count = 5;
try {
start = Integer.parseInt(request.getParameter("page.start"));
} catch (Exception e) {
}
try {
count = Integer.parseInt(request.getParameter("page.count"));
} catch (Exception e) {
}
Page page = new Page(start, count);
String method = (String) request.getAttribute("method"); // 假设method=list,Servlet=CategoryServlet
/*
* 借助反射,调用对应的方法利用反射,调用对应业务类的方法
* 注意此处的 this 并不是指本类的对象,而是具体的业务类,如 CategoryServlet 对象
* 为什么呢?因为上面的 filter 跳转目的地是 CategoryServlet
* 而CategoryServlet 又继承了BaseBackServlet。也就是说,其实BaseBackServlet 只是作为CategoryServlet 的一个部分运行而已
*/
Method m = this.getClass().getMethod(method, javax.servlet.http.HttpServletRequest.class,
javax.servlet.http.HttpServletResponse.class, Page.class); // CategoryServlet.list(..)
/*
* 下面这句代码,通过反射,调用CategoryServlet.list()
* 也是从这句代码,程序开始跳转到子类中运行——如CategoryServlet.list()中——直到子类return
*/
String redirect = m.invoke(this, request, response, page).toString(); // redirect="admin/listCategory.jsp";
/*根据方法的返回值redirect,进行相应的客户端跳转,服务端跳转,或者仅仅是输出字符串*/
if (redirect.startsWith("@"))
response.sendRedirect(redirect.substring(1)); // 客户端跳转,即重定向,原request会失效
else if (redirect.startsWith("%"))
response.getWriter().print(redirect.substring(1)); // 输出字符串
else
request.getRequestDispatcher(redirect).forward(request, response); // 服务端跳转
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 解析上传的文件(其实就是图片)
* @param request
* @param params
* @return is
*/
public InputStream parseUpload(HttpServletRequest request, Map<String, String> params) {
InputStream is = null;
try {
DiskFileItemFactory factory = new DiskFileItemFactory(); // DiskFileItemFactory,以便接下来将图片文件封装成FileItem实例,并将其保存在内存
ServletFileUpload upload = new ServletFileUpload(factory); // 利用ServletFileUpload关联FileItem列表
factory.setSizeThreshold(1024 * 10240); // 设置上传文件的大小限制为10M
List items = upload.parseRequest(request); // 解析request为FileItem的List
// 利用迭代器遍历items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {// 文件表单,进入输入流
System.out.println("上传文件:进入获取输入流。!item.isFormField为true,为文件表单");
// item.getInputStream() 获取上传文件的输入流
is = item.getInputStream();
} else {// 普通表单,不进入输入流
System.out.println("上传文件:未进入获取输入流。!item.isFormField为false,为普通表单");
String paramName = item.getFieldName();
String paramValue = item.getString();
System.out.println(paramName + ":" + paramValue);
paramValue = new String(paramValue.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
params.put(paramName, paramValue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return is;
}
}
UserServlet.java
package tmall.servlet;
import tmall.bean.User;
import tmall.util.Page;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class UserServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
List<User> users = userDAO.list(page.getStart(), page.getCount());
int total = userDAO.getTotal();
page.setTotal(total);
request.setAttribute("users", users);
request.setAttribute("page", page);
return "admin/listUser.jsp";
}
}
ProductServlet.java
package tmall.servlet;
import tmall.bean.Category;
import tmall.bean.Product;
import tmall.bean.Property;
import tmall.bean.PropertyValue;
import tmall.util.Page;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class ProductServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category c = categoryDAO.get(cid);
String name = request.getParameter("name");
String subTitle = request.getParameter("subTitle");
System.out.println("originalPrice:" + request.getParameter("originalPrice"));
float originalPrice = Float.parseFloat(request.getParameter("originalPrice"));
float promotePrice = Float.parseFloat(request.getParameter("promotePrice"));
int stock = Integer.parseInt(request.getParameter("stock"));
Product p = new Product();
p.setCategory(c);
p.setName(name);
p.setSubTitle(subTitle);
p.setOriginalPrice(originalPrice);
p.setPromotePrice(promotePrice);
p.setStock(stock);
productDAO.add(p);
return "@admin_product_list?cid=" + cid;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Product p = productDAO.get(id);
productDAO.delete(id);
return "@admin_product_list?cid=" + p.getCategory().getId();
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Product p = productDAO.get(id);
request.setAttribute("p", p);
return "admin/editProduct.jsp";
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category c = categoryDAO.get(cid);
int id = Integer.parseInt(request.getParameter("id"));
int stock = Integer.parseInt(request.getParameter("stock"));
float originalPrice = Float.parseFloat(request.getParameter("originalPrice"));
float promotePrice = Float.parseFloat(request.getParameter("promotePrice"));
String subtitle = request.getParameter("subTitle");
String name = request.getParameter("name");
Product p = new Product();
p.setName(name);
p.setSubTitle(subtitle);
p.setOriginalPrice(originalPrice);
p.setPromotePrice(promotePrice);
p.setStock(stock);
p.setId(id);
p.setCategory(c);
productDAO.update(p);
return "@admin_product_list?cid=" + p.getCategory().getId();
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category category = categoryDAO.get(cid);
List<Product> ps = productDAO.list(cid, page.getStart(), page.getCount());
int total = productDAO.getTotal(cid);
page.setTotal(total);
page.setParam("&cid=" + category.getId());
request.setAttribute("ps", ps);
request.setAttribute("category", category);
request.setAttribute("page", page);
return "admin/listProduct.jsp";
}
/**
* 编辑属性值页面的数据处理
* @param request
* @param response
* @param page
* @return "admin/editProductValue.jsp"
*/
public String editPropertyValue(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Product p = productDAO.get(id);
request.setAttribute("p", p);
List<Property> pts = propertyDAO.list(p.getCategory().getId());
propertyValueDAO.init(p);
List<PropertyValue> pvs = propertyValueDAO.list(p.getId());
request.setAttribute("pvs", pvs);
return "admin/editProductValue.jsp";
}
/**
* 更新属性值操作的数据处理
* @param request
* @param response
* @param page
* @return "%success"
*/
public String updatePropertyValue(HttpServletRequest request, HttpServletResponse response, Page page) {
int pvid = Integer.parseInt(request.getParameter("pvid"));
String value = request.getParameter("value");
PropertyValue pv = propertyValueDAO.get(pvid);
pv.setValue(value);
propertyValueDAO.update(pv);
return "%success";
}
}
CategoryServlet.java
package tmall.servlet;
import tmall.bean.Category;
import tmall.util.ImageUtil;
import tmall.util.Page;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class CategoryServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
Map<String, String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
String name = params.get("name");
Category c = new Category();
c.setName(name);
categoryDAO.add(c);
File imageFolder = new File(request.getSession().getServletContext().getRealPath("img/category"));
File file = new File(imageFolder, c.getId() + ".jpg");
try {
if (null != is && 0 != is.available()) {
try (FileOutputStream fos = new FileOutputStream(file)) {
byte b[] = new byte[1024 * 1024];
int length = 0;
while (-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
// 通过如下代码,把文件保存为jpg格式
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "@admin_category_list";
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
categoryDAO.delete(id);
return "@admin_category_list";
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Category c = categoryDAO.get(id);
request.setAttribute("c", c);
return "admin/editCategory.jsp";
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
Map<String, String> params = new HashMap<>();
InputStream is = super.parseUpload(request, params);
System.out.println(params);
String name = params.get("name");
int id = Integer.parseInt(params.get("id"));
Category c = new Category();
c.setId(id);
c.setName(name);
categoryDAO.update(c);
File imageFolder = new File(request.getSession().getServletContext().getRealPath("img/category"));
File file = new File(imageFolder, c.getId() + ".jpg");
file.getParentFile().mkdirs();
try {
if (null != is && 0 != is.available()) {
try (FileOutputStream fos = new FileOutputStream(file)) {
byte b[] = new byte[1024 * 1024];
int length = 0;
while (-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
// 通过如下代码,把文件保存为jpg格式
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "@admin_category_list";
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
List<Category> categories = categoryDAO.list(page.getStart(), page.getCount());
int total = categoryDAO.getTotal();
page.setTotal(total);
request.setAttribute("thecs", categories);
request.setAttribute("page", page);
return "admin/listCategory.jsp";
}
}
ProductImageServlet.java
package tmall.servlet;
import tmall.bean.Product;
import tmall.bean.ProductImage;
import tmall.dao.ProductImageDAO;
import tmall.util.ImageUtil;
import tmall.util.Page;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ProductImageServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
InputStream is = null;
// 提交上传文件时的其他参数
Map<String, String> params = new HashMap<>();
// 解析上传
is = parseUpload(request, params);
// 根据上传的参数生成productImage对象
String type = params.get("type");
int pid = Integer.parseInt(params.get("pid"));
Product p = productDAO.get(pid);
// 数据库操作
ProductImage pi = new ProductImage();
pi.setType(type);
pi.setProduct(p);
productImageDAO.add(pi);
// 确定目标文件夹,生成文件
String fileName = pi.getId() + ".jpg";
String imageFolder;
String imageFolder_small = null;
String imageFolder_middle = null;
if (ProductImageDAO.type_single.equals(pi.getType())) { // 图片为单张图片的文件夹路径
imageFolder = request.getSession().getServletContext().getRealPath("img/productSingle");
imageFolder_small = request.getSession().getServletContext().getRealPath("img/productSingle_small");
imageFolder_middle = request.getSession().getServletContext().getRealPath("img/productSingle_middle");
} else { // 图片为详情图片的文件夹路径
imageFolder = request.getSession().getServletContext().getRealPath("img/productDetail");
}
File f = new File(imageFolder, fileName); // 生成文件
f.getParentFile().mkdirs(); // 若目标文件夹不存在,则新建目标文件夹,避免抛出异常
// 复制文件到磁盘
try {
if (null != is && 0 != is.available()) {
try (FileOutputStream fos = new FileOutputStream(f)) {
byte[] bytes = new byte[1024 * 1024];
int length = 0;
while (-1 != (length = is.read(bytes))) {
fos.write(bytes, 0, length);
}
fos.flush();
// 通过如下代码,把文件保存为jpg格式
BufferedImage img = ImageUtil.change2jpg(f);
ImageIO.write(img, "jpg", f);
if (ProductImageDAO.type_single.equals(pi.getType())) {
File f_small = new File(imageFolder_small, fileName);
File f_middle = new File(imageFolder_middle, fileName);
ImageUtil.resizeImage(f, 56, 56, f_small);
ImageUtil.resizeImage(f, 217, 190, f_middle);
}
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
return "@admin_productImage_list?pid=" + p.getId();
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
ProductImage pi = productImageDAO.get(id);
productImageDAO.delete(id);
if (ProductImageDAO.type_single.equals(pi.getType())) {
String imageFolder_single = request.getSession().getServletContext().getRealPath("img/productSingle");
String imageFolder_small = request.getSession().getServletContext().getRealPath("img/productSingle_small");
String imageFolder_middle = request.getSession().getServletContext()
.getRealPath("img/productSingle_middle");
File f_single = new File(imageFolder_single, pi.getId() + ".jpg");
f_single.delete();
File f_small = new File(imageFolder_small, pi.getId() + ".jpg");
f_small.delete();
File f_middle = new File(imageFolder_middle, pi.getId() + ".jpg");
f_middle.delete();
} else {
String imageFolder_detail = request.getSession().getServletContext().getRealPath("img/productDetail");
File f_detail = new File(imageFolder_detail, pi.getId() + ".jpg");
f_detail.delete();
}
return "@admin_productImage_list?pid=" + pi.getProduct().getId();
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
int pid = Integer.parseInt(request.getParameter("pid"));
Product p = productDAO.get(pid);
List<ProductImage> pisSingle = productImageDAO.list(p, ProductImageDAO.type_single);
List<ProductImage> pisDetail = productImageDAO.list(p, ProductImageDAO.type_detail);
request.setAttribute("p", p);
request.setAttribute("pisSingle", pisSingle);
request.setAttribute("pisDetail", pisDetail);
return "admin/listProductImage.jsp";
}
}
PropertyServlet.java
package tmall.servlet;
import tmall.bean.Category;
import tmall.bean.Property;
import tmall.util.Page;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class PropertyServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category c = categoryDAO.get(cid);
String name = request.getParameter("name");
Property p = new Property();
p.setCategory(c);
p.setName(name);
propertyDAO.add(p);
return "@admin_property_list?cid=" + cid;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Property p = propertyDAO.get(id);
propertyDAO.delete(id);
return "@admin_property_list?cid=" + p.getCategory().getId();
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Property p = propertyDAO.get(id);
request.setAttribute("p", p);
return "admin/editProperty.jsp";
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category c = categoryDAO.get(cid);
int id = Integer.parseInt(request.getParameter("id"));
String name = request.getParameter("name");
Property p = new Property();
p.setCategory(c);
p.setId(id);
p.setName(name);
propertyDAO.update(p);
return "@admin_property_list?cid=" + p.getCategory().getId();
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
int cid = Integer.parseInt(request.getParameter("cid"));
Category category = categoryDAO.get(cid);
List<Property> ps = propertyDAO.list(cid, page.getStart(), page.getCount());
int total = propertyDAO.getTotal(cid);
page.setTotal(total);
page.setParam("&cid=" + category.getId());
request.setAttribute("ps", ps);
request.setAttribute("c", category);
request.setAttribute("page", page);
return "admin/listProperty.jsp";
}
}
OrderServlet.java
package tmall.servlet;
import tmall.bean.Order;
import tmall.dao.OrderDAO;
import tmall.util.Page;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
public class OrderServlet extends BaseBackServlet {
@Override
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String delete(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String edit(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String update(HttpServletRequest request, HttpServletResponse response, Page page) {
return null;
}
@Override
public String list(HttpServletRequest request, HttpServletResponse response, Page page) {
List<Order> orders = orderDAO.list(page.getStart(), page.getCount());
orderItemDAO.fill(orders);
int total = orderDAO.getTotal();
page.setTotal(total);
request.setAttribute("orders", orders);
request.setAttribute("page", page);
return "admin/listOrder.jsp";
}
/**
* 确认发货操作的数据处理
* @param request
* @param response
* @param page
* @return "@admin_order_list"
*/
public String delivery(HttpServletRequest request, HttpServletResponse response, Page page) {
int id = Integer.parseInt(request.getParameter("id"));
Order order = orderDAO.get(id);
order.setDeliveryDate(new Date());
order.setStatus(OrderDAO.waitConfirm);
orderDAO.update(order);
return "@admin_order_list";
}
}