Shop项目Servlet抽取

来源:互联网 发布:怎么获取股票数据 编辑:程序博客网 时间:2024/05/21 06:43

随着项目开发,servlet越来越多,所以分层向上抽取。

创建 productServlet,UserServlet。继承 BaseServlet

BaseServlet利用反射,传递方法名字执行各项功能。

抽取过后修改前端页面各项需要修改的地址即个位.jsp页面,web配置


BaseServlet

package com.itheima.web.servlet;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@SuppressWarnings("all")public class BaseServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");try {//1.获得请求的method的名称String methodName = request.getParameter("method");//2.获得当前被访问对象的字节码对象Class clazz = this.getClass();//ProductServlet.class------UserServlet//3.获得当前这个字节码对象中的指定方法Method method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);//4. 执行相应的方法method.invoke(this, request,response);} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {e.printStackTrace();}}}



productServlet抽取结果

package com.itheima.web.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.google.gson.Gson;import com.itheima.domain.Cart;import com.itheima.domain.CartItem;import com.itheima.domain.Category;import com.itheima.domain.PageBean;import com.itheima.domain.Product;import com.itheima.service.ProductService;import com.itheima.utils.JedisPoolUtils;import redis.clients.jedis.Jedis;public class ProductServlet extends BaseServlet {/*public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取方法名String methodName = request.getParameter("method");if (methodName.equals("categoryList")) {CategoryList(request, response);} else if (methodName.equals("index")) {index(request, response);} else if (methodName.equals("productInfo")) {productInfo(request, response);} else if (methodName.equals("productListByCid")) {productListByCid(request, response);}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}*/// 模块中功能方法的区分//清空购物车public void clearCart(HttpServletRequest request, HttpServletResponse response) throws IOException  {HttpSession session = request.getSession();session.removeAttribute("cart");//跳转回cart.jspresponse.sendRedirect(request.getContextPath()+"/cart.jsp");}//在购物车删除购物项public void delProFromCart(HttpServletRequest request, HttpServletResponse response) throws IOException  {//获取pidString pid = request.getParameter("pid");//获取购物车项HttpSession session = request.getSession();Cart cart = (Cart) session.getAttribute("cart");if(cart!=null) {Map<String, CartItem> cartItems = cart.getCartItems();//修改cart的总计double total = cart.getTotal()-cartItems.get(pid).getSubtotal();cart.setTotal(total);//删除购物项cartItems.remove(pid);}//放回session域session.setAttribute("cart", cart);//跳转回cart.jspresponse.sendRedirect(request.getContextPath()+"/cart.jsp");}//将商品添加到购物车public void addProductToCart(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession();ProductService service = new ProductService();//获得放在购物车商品的pidString pid = request.getParameter("pid");//获得这次商品的购买数int buyNum = Integer.parseInt(request.getParameter("buyNum"));//获得paoduct对象Product product = service.findProductByPid(pid);//计算这次小计double subtotal = product.getShop_price()*buyNum;/*//封装cartItemCartItem carItem = new CartItem();carItem.setBuyNum(buyNum);carItem.setProduct(product);carItem.setSubtotal(subtotal);*///获取购物车,判断session中是否已经有购物车 ,没有就创建Cart cart = (Cart) session.getAttribute("cart");if(cart==null) {cart = new Cart();}//将购物项放到车中---key是pid//先判断购物车中是否已将包含此购物项了 ----- 判断key是否已经存在//如果购物车中已经存在该商品----将现在买的数量与原有的数量进行相加操作、Map<String, CartItem> cartItems = cart.getCartItems();double newSubtotal =product.getShop_price()*buyNum;if(cartItems.containsKey(pid)) {//购物车已经有该商品//获取之前的购物车项CartItem oldCartItem = cartItems.get(pid);//之前和现在相加后的最后购买数量buyNum=oldCartItem.getBuyNum()+buyNum;//之前和现在相加后的最后购买小计newSubtotal=oldCartItem.getSubtotal()+subtotal;}//封装最终的购物车项CartItem carItem = new CartItem();carItem.setBuyNum(buyNum);carItem.setProduct(product);carItem.setSubtotal(newSubtotal);//将购物项存到购物车中cartItems.put(pid, carItem);//计算计算购物车总计double total = cart.getTotal()+subtotal;cart.setTotal(total); //车再次放回sessionsession.setAttribute("cart", cart);//直接跳转到购物车页面response.sendRedirect(request.getContextPath()+"/cart.jsp");}// 1.获取商品分类列表public void categoryList(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {ProductService service = new ProductService();// 先从缓存查看是否存在categoryList 如果没有从数据库查找,再存到redis缓存,如果有,直接调用Jedis jedis = JedisPoolUtils.getJedis();String categoryListJson = jedis.get("categoryListJson");if (categoryListJson == null) {System.out.println("缓存没有数据,查找数据库");// 获取商品分类List<Category> categoryList = service.findAllCategory();Gson gson = new Gson();categoryListJson = gson.toJson(categoryList);jedis.set("categoryListJson", categoryListJson);}/*// 获取商品分类List<Category> categoryList = service.findAllCategory();Gson gson = new Gson();String categoryListJson = gson.toJson(categoryList);*/response.setContentType("text/html;charset=UTF-8");response.getWriter().write(categoryListJson);}// 2.获取热门商品与最新商品集合public void index(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ProductService service = new ProductService();// 获取热门商品List<Product> hotProductList = service.findHotProduct();// 获取最新商品List<Product> newProductList = service.findNewProduct();// 把集合传到域request.setAttribute("hotProductList", hotProductList);request.setAttribute("newProductList", newProductList);// 转发request.getRequestDispatcher("/index.jsp").forward(request, response);}// 3.商品详细信息页面public void productInfo(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取pidString pid = request.getParameter("pid");String cid = request.getParameter("cid");String currentPage = request.getParameter("currentPage");ProductService service = new ProductService();// 根据pid查询商品Product product = service.findProductByPid(pid);// 根据cid查询分类Category category = service.findCategoryByPid(cid);// 传到request域,转发request.setAttribute("category", category);request.setAttribute("product", product);request.setAttribute("cid", cid);request.setAttribute("currentPage", currentPage);// 获得客户端携带的cookie 获得名字pids的cookie// 转发前创建cookie,存储pidString pids = pid;Cookie[] cookies = request.getCookies();if (cookies != null) {for (int i = 0; i < cookies.length; i++) {if ("pids".equals(cookies[i].getName())) {pids = cookies[i].getValue();String[] split = pids.split("-");List<String> asList = Arrays.asList(split);LinkedList<String> list = new LinkedList<String>(asList);// 判断当前集合是否包含现在的pidif (list.contains(pid)) {// 包含当前商品的pidlist.remove(pid);list.addFirst(pid);} else {// 不包含当前pidlist.addFirst(pid);}// 将集合转为字符串[3,1,2]转为3-1-2StringBuffer sb = new StringBuffer();for (int j = 0; j < list.size(); j++) {sb.append(list.get(j));sb.append("-");}// 去掉最后的-pids = sb.substring(0, sb.length() - 1);}}}Cookie cookie_pids = new Cookie("pids", pids);response.addCookie(cookie_pids);request.getRequestDispatcher("/product_info.jsp").forward(request, response);}// 4.根据分类cid获取商品集合public void productListByCid(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获得cidString cid = request.getParameter("cid");// 获取当前页String currentPageStr = request.getParameter("currentPage");if (currentPageStr == null) {currentPageStr = "1";}int currentPage = Integer.parseInt(currentPageStr);int currentCount = 12;// 根据cid找pageBeanProductService service = new ProductService();PageBean pageBean = service.getPageBeanByCid(cid, currentPage, currentCount);// 定义一个手机历史商品的集合ArrayList<Product> histroyProductList = new ArrayList<Product>();// 获得客户端携带的名为pids的cookieCookie[] cookies = request.getCookies();// 获取浏览过的商品if (cookies != null) {for (Cookie cookie : cookies) {if ("pids".equals(cookie.getName())) {String pids = cookie.getValue();String[] split = pids.split("-");for (int i = 0; i < split.length && i < 7; i++) {Product product = service.findProductByPid(split[i]);histroyProductList.add(product);}}}}request.setAttribute("pageBean", pageBean);request.setAttribute("cid", cid);request.setAttribute("histroyProductList", histroyProductList);request.getRequestDispatcher("product_list.jsp").forward(request, response);}}


原创粉丝点击