天下无难事,只怕有心人。天下天易事,只怕粗心人。——袁枚
当你看当这句话的时候也许你现在对项目不知所措;也许你现在对项目一知半解;也许你对项目并未满载而归;但是不要放弃、不要气馁,因为我们还有时间、信念和坚持。小伙伴们崛起吧!!!
一、思路梳理
1)首先搭建前后台的页面
2)其次前端开发
01、登录外加验证码
02、注册
03、前台首页(导航栏和左侧栏一级和二级分类)
04、默认情况下对所有商品进行分页
05、新闻动态
06、商品最近浏览
07、商品详情
08、单项购买和加入购买车
09、前台留言
3)最后后台开发
01、用户管理
02、新闻管理
03、评价管理
04、商品管理
05、分类管理
06、订单管理
二、难点攻克
1.注册(Ajax技术)
ajax的外部引用在js进行引用,在js页面引用,js会转向servlet
$(function(){ $("#userId").blur(function(){//"userId"是用户的Id ajax();//调用这个方法 }); }); function ajax(){ //获取用户名 var uname=$("#userId").val(); $.ajax({ url:'/EasyBuy/AjxServlet', type:'POST', data:'name='+uname, //回调函数data代表servlet会送数据 success:function(data){ //mag:false true if(data=="true"){ //不能注册 $("#userSpan").html("不能注册"); }else{ $("#userSpan").html("可以注册");//这个数据是和数据库进行对比的 } } }); }
2、购物车的思路
先在实体类里面定义:一个购物车 一个商品
其次根据当前需要的条件建立接口和实现类
接下来建立servlet在将servlet进行调用===============下面是判断购物的商品个数
package cn.happy.servlet; import java.io.IOException; import java.util.LinkedHashMap; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.happy.dao.imp.OrderAddDaoImp; import cn.happy.entity.Cart; import cn.happy.entity.CartItem; import cn.happy.entity.Product; public class ProductServlet extends HttpServlet { /* 出品人:执念 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /* 出品人:执念 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { LinkedHashMap<String,Cart> map = new LinkedHashMap<String, Cart>(); // 将用到购物车的订单list k:商品编号 v:商品对象 String oper=request.getParameter("oper");//获取页面的操作值oper String name=(String)request.getSession().getAttribute("admin"); if(name==null){ request.getRequestDispatcher("/servlet/Login?haha=haha").forward(request, response); }else { if(oper!=null && oper!=""){ //判定操作数不等于空不等于空字符串 if(oper.equals("view")){ //传过来的值为view时候 Product proInfoById = dao.getProInfoById(Integer.parseInt(request.getParameter("pid")));//获取当前的id request.setAttribute("procduct",proInfoById);//根据id进行查询详细信息 request.getRequestDispatcher("/product-view.jsp").forward(request, response);//进行转发到购物车的详情中 }else{ doAdd(request, response); } }else{ response.sendRedirect(request.getContextPath()+"/shopping.jsp"); } } /* if(name!=null){ //判断名字不等于null if(oper!=null && oper!=""){ doAdd(request, response); }else{ response.sendRedirect("/shopping.jsp"); } }else{ response.sendRedirect("/login.jsp"); } */ } OrderAddDaoImp dao = new OrderAddDaoImp(); private void doAdd(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ CartItem citem=(CartItem)request.getSession().getAttribute("CartItem");//获取citem进行一个取值 String id= request.getParameter("pid");//获取页面的id boolean flag=true;//默认当前的状态为true if(citem==null){ //如果citem获取的值为null citem = new CartItem();//从新获取 citem.setLmap(new LinkedHashMap<String, Cart>());//将他加入集合里 } for (String item : citem.getLmap().keySet()) {//遍历集合的数量 Cart cart= citem.getLmap().get(item); Cart cz=new Cart(); cz.setEp_id(Integer.parseInt(id));//根据id进行+1 if(cart.equals(cz)){//1判断获取页面的值和实体进行对比如果一样进行++ citem.getLmap().get(item).setEp_num(citem.getLmap().get(item).getEp_num()+1); flag=false; break; } } if(flag){ //2如果没有添加过那么进行新的添加新的商品 Cart cz=new Cart(); Product proinfo = dao.getProInfoById(Integer.parseInt(id));//获取商品的id cz.setEp_id(proinfo.getEP_ID()); cz.setOrderName(proinfo.getEP_NAME()); cz.setEq_floatprice(proinfo.getEP_PRICE()); cz.setEp_num(1); cz.setEP_FILE_NAME(proinfo.getEP_FILE_NAME()); citem.getLmap().put(id,cz);//添加到map集合 } citem.setOrdermoney(); request.getSession().setAttribute("CartItem",citem); response.getWriter().print("true"); //response.sendRedirect("/EasyBuy/shopping.jsp"); } }
三、商品浏览
主要用到了排序和cookie=========接下来servlert
package cn.happy.servlet; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.LinkedList; import java.util.List; 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 cn.happy.dao.imp.NewsDynamicImp; import cn.happy.dao.imp.OrderAddDaoImp; import cn.happy.entity.News; import cn.happy.entity.Product; import cn.happy.entity.ProductCategory; public class NewsServlet extends HttpServlet { /** 方言 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** 方言 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { NewsDynamicImp ndi = new NewsDynamicImp(); OrderAddDaoImp dao = new OrderAddDaoImp(); String hh = request.getParameter("judge"); if(hh!=null&&hh.equals("liulan")){ //获取商品编号 int id = Integer.parseInt(request.getParameter("id")); try { // String proHistory = getHistory(request, String.valueOf(id)); Cookie cookie = new Cookie("proHistory", proHistory); // cookie.setMaxAge(3600*60*24*365); response.addCookie(cookie); String myid = cookie.getValue(); List mylist = Arrays.asList(myid.split("_")); Product pro = null; List<Product> li = new ArrayList<Product>(); for (Object item : mylist) { //调用根据商品编号获取商品详细信息的方法 pro = ndi.SelectAllCommodityByID(Integer.parseInt(item.toString())); li.add(pro); } request.getSession().setAttribute("pro", li); Product proInfoById = dao.getProInfoById(id);//获取当前的id//购物车的 request.setAttribute("procduct",proInfoById);//根据id进行查询详细信息 request.getRequestDispatcher("/product-view.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } }else{ List<News> list = null; List<Product> list1 = null; List<ProductCategory> list2 = null; try { list = ndi.SelectAllNews(); list1 = ndi.SelectAllCommodity(); list2 = ndi.SelectCommodityClassification(); } catch (Exception e) { e.printStackTrace(); } request.getSession().setAttribute("list", list); request.getSession().setAttribute("commodity", list1); request.getSession().setAttribute("class1", list2); request.getRequestDispatcher("/servlet/IndexPageServlet").forward(request, response); //request.getRequestDispatcher("/index.jsp").forward(request, response); } } private String getHistory(HttpServletRequest request, String id){ //获取用户所有携带的cookie //可能情况 //第一次访问:proHistory=null 1 proHistory=1 //非第一次:proHistory=3_2_5 1 proHistory=1_3_2 //非第一次:proHistory=3_1_5 1 proHistory=1_3_5 //非第一次:proHistory=3_2 1 proHistory=1_3_2 //拆解出cookies集合 Cookie[] cookies = request.getCookies(); //浏览过的商品形成的大字符串 String proHistory=null; for (int i = 0; cookies!=null&&i < cookies.length; i++) { if(cookies[i].getName().equals("proHistory")){ proHistory=cookies[i].getValue(); break; } } if(proHistory==null){ return id; } //根据_分割数据 //在java中 代表转义字符 等,而 \ 代表一个反斜杠 而.代表一个元字符 //要表示一个.就需要用 要用. //所以"\." 在实际编译中 就代表 . List mylist = Arrays.asList(proHistory.split("\_")); LinkedList<String> list = new LinkedList<String>(); list.addAll(mylist); if(list.contains(id)){//集合中含有该商品 list.remove(id); list.addFirst(id); } else { if(list.size()>=3){ list.removeLast(); list.addFirst(id); } else { list.addFirst(id); } } StringBuffer sb = new StringBuffer(); for (String item : list) { sb.append(item+"_"); } return sb.deleteCharAt(sb.length()-1).toString(); } }
四、商品分类(后台的)
主要:就是分析一二级菜单主要用到两张表,一级id两张表要一样;二级id两张表要不同。=========servlet
package cn.happy.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.happy.dao.imp.HProductCategoryDaoImpl; import cn.happy.entity.ProductCategory; public class HProductClassServlet extends HttpServlet { /* 出品人:执念 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /* 出品人:执念 */ HProductCategoryDaoImpl productCategoryDaoImpl=new HProductCategoryDaoImpl(); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解决乱码 request.setCharacterEncoding("utf-8"); String oper=request.getParameter("oper"); if(oper.equals("list")){//进入分类管理页面 load(request,response); request.getRequestDispatcher("/manage/productClass.jsp").forward(request, response); }else if(oper.equals("add")){//做中转站,携带数据到add.jsp页面 load(request,response); request.getRequestDispatcher("/manage/productClass-add.jsp").forward(request, response); }else if(oper.equals("addtrue")){//进行真正的添加操作 add(request,response); }else if(oper.equals("delChildCate")){//删除选中的子分类 delChileCate(request,response); }else if(oper.equals("delPcate")){//删除选中的一级分类 delPCate(request,response); }else if(oper.equals("modify")){//做中转站 携带数据到modify.jsp页面 modify(request,response); }else if(oper.equals("modifytrue")){//进行真正的修改操作 modifytrue(request,response); } } /** * 将所有的一级分类 、 二级分类放入作用域 */ public void load(HttpServletRequest request, HttpServletResponse response){ try { //所有的一级分类 并放入作用域 List<ProductCategory> parentList=productCategoryDaoImpl.getAllParentCate(); request.setAttribute("parentList", parentList); //所有的二级分类 并放入作用域 List<ProductCategory> childList=productCategoryDaoImpl.getAllChildCate(); request.setAttribute("childList", childList); } catch (Exception e) { e.printStackTrace(); } } /** * 进行真正的添加操作 * */ public void add(HttpServletRequest request, HttpServletResponse response){ //获取待添加分类的根分类 String pcate=request.getParameter("parentId"); //获取待添加的分类的名称 String cate=request.getParameter("className"); ProductCategory productCategory=new ProductCategory(); productCategory.setEPC_NAME(cate); productCategory.setEPC_PARENT_ID(Integer.parseInt(pcate)); try { boolean flag=productCategoryDaoImpl.add(productCategory); if(flag){//添加成功 System.out.println("添加成功!"); }else{ System.out.println("添加失败!"); } request.getRequestDispatcher("/servlet/HProductClassServlet?oper=list").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } /** * 删除选中的二级分类 * * */ public void delChileCate(HttpServletRequest request, HttpServletResponse response){ //获取选中删除的二级分类的id String id=request.getParameter("id"); try { boolean flag=productCategoryDaoImpl.delChildCate(Integer.parseInt(id)); if(flag){//删除成功 System.out.println("删除成功!"); }else{ System.out.println("删除失败!"); } request.getRequestDispatcher("/servlet/HProductClassServlet?oper=list").forward(request, response); } catch (NumberFormatException e) { e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 删除选中的一级分类 * */ public void delPCate(HttpServletRequest request, HttpServletResponse response){ //获取选中的一级分类的id String pid=request.getParameter("id"); try { boolean flag=productCategoryDaoImpl.delPcate(Integer.parseInt(pid)); if(flag){ System.out.println("删除成功!"); }else{ System.out.println("删除失败!"); } request.getRequestDispatcher("/servlet/HProductClassServlet?oper=list").forward(request, response); } catch (NumberFormatException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 做修改的中转站 * */ public void modify(HttpServletRequest request, HttpServletResponse response){ load(request,response); //获取要修改的分类的编号 String id=request.getParameter("id"); //根据分类编号查找该分类的信息 try { ProductCategory productCategory=productCategoryDaoImpl.getInfoById(Integer.parseInt(id)); //将该信息放入作用域,便于前台展示 request.setAttribute("productCategory", productCategory); //根据查找回来的信息获取其父id 获取父分类的相关信息 ProductCategory PCategory=productCategoryDaoImpl.getInfoById(productCategory.getEPC_PARENT_ID()); //放入作用域 request.setAttribute("PCategory", PCategory); //转发 request.getRequestDispatcher("/manage/productClass-modify.jsp").forward(request, response); } catch (NumberFormatException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 进行真正的修改操作 * */ public void modifytrue(HttpServletRequest request, HttpServletResponse response){ //获取要修改的分类的编号 String id=request.getParameter("id"); System.out.println(id); //获取修改后的内容 String value=request.getParameter("className"); //获取修改后是一级分类还是二级分类 所属分类编号 String pid=request.getParameter("parentId"); ProductCategory productCategory=new ProductCategory(); productCategory.setEPC_ID(Integer.parseInt(id)); productCategory.setEPC_NAME(value); productCategory.setEPC_PARENT_ID(Integer.parseInt(pid)); //进行修改操作 try { boolean flag=productCategoryDaoImpl.modifyByid(productCategory); if(flag){//修改成功 System.out.println("修改成功!"); }else{ System.out.println("修改失败!"); } request.getRequestDispatcher("/servlet/HProductClassServlet?oper=list").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } }
主要分享这些关键代码。日后更新。