模仿天猫商城的J2EE商城网站项目后端7—servlet包

目录

BaseForeServlet.java

ForeServlet.java

BaseBackServlet.java

UserServlet.java

ProductServlet.java

CategoryServlet.java

ProductImageServlet.java

PropertyServlet.java

OrderServlet.java


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";
	}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值