线上盲盒销售系统总结

项目功能:

前台:登陆注册,用户中心,公告查看,购物车,商品购买,评论
后台:商品管理 ,类别管理,公告管理,评论管理,用户管理,订单管理

项目目录分析:

项目采用MVC设计模式(model view controler)使用servlet作为控制器,servicec层实现业务逻辑,dao层负责数据库操作。util作为工具类,其中对数据库的jdbc操作进行了封装,使我们对数据库的增删改查更加方便,页面的分页也是通过这个来实现的。
在这里插入图片描述

详细目录分析

项目的service与dao层的都是接口,具体实现分别在serviceimpl与daoimpl类中在这里插入图片描述
该系统使用JavaWeb语言实现,其实质使完成的是一个对于数据库的增删改查功能,具体的实现方式类似,下面给出示例:
具体实现示例:
添加商品实例:
首先是找到添加商品的按钮:
在这里插入图片描述
代码位于admin文件夹下的menus.jsp
在这里插入图片描述

<td colspan="1" height="20" align="right"><span><a href="${pageContext.request.contextPath}/MenuServlet?action=addshop">
<button type="button" class="btn btn-info">添加商品</button>
</a></span></td>

点击按钮后,可以看到跳转到MenuServlet中,并传递了一个action=addshop的参数
MenuServlet.java
在这里插入图片描述
超链接的形式,接收使用的是doGet方法,在这里我们看到其参数实际上是告诉我们要去执行哪个方法。去执行addshop方法,我们找到addshop方法:

private void addshop(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		List<Types> types=typeservice.getTypesAll();
		request.setAttribute("types", types);
		request.getRequestDispatcher("/admin/addmenu.jsp").forward(request, response);
	}

可以看到,其方法执行了一个查询所有类别的功能后便跳转到了addmenu.jsp
那么,为什么要查询类别呢,这个方法有什么用呢?
我们看一下getTypeAll的具体实现了什么?
它的最终实现是在TypeDaoImpl.java文件中

	public List<Types> getTypesAll() {
    
    
		// TODO Auto-generated method stub
		String sql="select * from type";
		List list=null;
		try {
    
    
			list=dbutil.getQueryList(Types.class, sql, null);
		} catch (Exception e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

他执行了一个查询所有类别的方法,其中getQueryList便是我们工具类中封装的查询方法,用于简化数据库查询中需要加载数据库驱动,创建执行对象等步骤。
再返还到addmenu.jsp中,我们便知道为何要查询所有类别了
在这里插入图片描述
我们需要在添加商品时进行商品类别选择,那么这块在jsp页面是如何实现的呢?

<select class="form-control" style="width:400px" name="typename" id="typename">
		<c:forEach items="${requestScope.types }" var="type">
									
	    <option value="${type.type }" selected="selected">${
    
    type.type }</option>
									
        </c:forEach>

使用一个下拉列表,将查询的方法输出显示出来,使用的是el表达式来实现
那么在这个页面中我们输入相应的商品信息后执行跳转:

<form action="${pageContext.request.contextPath}/MenuServlet?action=add" method="post"
name="form1" enctype="multipart/form-data">

表单提交,跳转到MenuServlet中执行add方法

response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		PrintWriter out=response.getWriter();
		//创建SmartUpLoad对象
		SmartUpload smartUpload=new SmartUpload();
		//执行上传初始化
		smartUpload.initialize(this.getServletConfig(),request, response);
		try {
    
    
			//执行上传
			smartUpload.upload();
			//4获取用户输入的菜品信息
			//注意:在使用了该插件后,要这样获取数据
			String name = smartUpload.getRequest().getParameter("menuname");
			String detail = smartUpload.getRequest().getParameter("description");
			String typename = smartUpload.getRequest().getParameter("typename");
			String price = smartUpload.getRequest().getParameter("price");
			
			//获取上传的文件对象
			SmartFile file = smartUpload.getFiles().getFile(0);//获取第一个文件,因为只能上传一个文件
			//获取上传文件的名称
			String imgpath = "img/" + file.getFilePathName();
			//对Menus对象赋值
			Menu shop=new Menu();
			shop.setName(name);
			shop.setDescription(detail);
			shop.setImage(imgpath);
			shop.setType(typename);
			shop.setPrice(price);
			int result = menuservice.addShop(shop);
			if (result == 1) {
    
    
				//保存上传文件
				smartUpload.save("/img");
				out.write("<script>"+"alert('add successful');"
						+"window.location.href='"+request.getContextPath()+"/MenuServlet?action=findAll&&curPage=1'; "
							+"</script>");
			} else {
    
    
				out.write("<script>"+"alert('add failed');"
						+"window.location.href='"+request.getContextPath()+"/MenuServlet?action=findAll&&curPage=1'; "
							+"</script>");
			}
		} catch (Exception e) {
    
    
			// TODO: handle exception
			e.printStackTrace();
		}

实现上传的代码较多,在这里我们用到了一个上传插件,我们的servlet本身是没有上传文件处理的功能的,因此我们使用了这个插件
在这里,其将我们的输入数据封装到Menu对象中,执行了添加的数据库操作
在MenuDaoImpl.java中:

public int addShop(Menu shop) {
    
    
		// TODO Auto-generated method stub
		String sql="insert into menu (name,image,description,price,type) values(?,?,?,?,?)";
		Object[] objs={
    
    shop.getName(),shop.getImage(),shop.getDescription(),shop.getPrice(),shop.getType()};
		int result=0;
		try {
    
    
			result=dbutil.execute(sql, objs);
		} catch (Exception e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}

可以看到,由于我们的工具类封装,添加数据的操作也极为简单,需要的是sql语句与相应的参数即可,在执行完数据库插入数据操作后,其会返还数据受影响行数,当返还1时说明插入成功。此时便会再次返回到方法调用处,将该方法的返回值给result,判断是否插入成功。
在这里插入图片描述
至此,关于商品的添加操作便实现了,其他功能也是沿用相同的方法,需要对应不同的sql语句即可。

猜你喜欢

转载自blog.csdn.net/pengxiang1998/article/details/105902458