写这篇博客的时候很激动,按耐不住心情,为什么呢。因为经过两周的时间终于完成了这个对于现在我来说比较庞大的一个项目。那么就切入正题吧,跟大家讲讲这个项目。
首先我需要讲清楚:(1)这里展示只是部分功能
(2)如果需要详细的功能可以私联
包括:数据库脚本及全部代码
(3)联系方式:
邮箱:ay_nzz@163.com
QQ: ay_nzz@163.com(是的你没有看错,跟邮箱一样哦~)
简介下关于易买网的各个功能模块:
前台:
(1)登录,注册(详解)
(2)按照分类查询商品
(3)加入购物车(详解)
(4)买家留言
(5)结账
后台:
(1)账号管理
(2)商品管理
(3)商品分类
(4)回复买家留言
(5)订单管理(详解)
一:项目都是由一层一层组织起来的,所以就用到分层
二:简单的分层后就需要来解决各个层的功能,首先是我们经常使用的BaseDao(连接数据库,增删改的应用)
友情提示:大部分的程序都可以用BaseDao但是需要注意数据库名称的更改以及数据库登录密码
1 /** 2 * 数据访问工具类 3 * @version 4 * @author 5 * 6 */ 7 public class BaseDao { 8 // 01. 基础内容的准备 9 private static final String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 10 private static final String url="jdbc:sqlserver://localhost:1433;DataBaseName=easybuy_group"; 11 private static final String username="sa"; 12 private static final String pwd="123"; 13 //02, 接口对象的准备 14 Connection con=null; 15 PreparedStatement ps=null; 16 public ResultSet rs=null; 17 /** 18 * 01.写一个用户获取到一个连接对象的方法,方法的返回值是Connection类型 19 * @return 连接对象 20 * @throws Exception 21 */ 22 public Connection getConnection() throws Exception{ 23 Class.forName(driver); 24 //什么条件下,构建connection对象 25 if (con==null||con.isClosed()) { 26 con=DriverManager.getConnection(url, username, pwd); 27 } 28 //同志们碰到一个 29 return con; 30 } 31 32 /** 33 * 通过连接池获取连接对象 34 * @return 35 * @throws Exception 36 */ 37 38 /** 39 * 执行查询操作 目的:返回一个读取器 40 * @param sql sql语句 41 * @param objs 参数列表 42 * @return 读取器对象 43 * @throws Exception 44 */ 45 public ResultSet executeQuery(String sql,Object... objs) throws Exception{ 46 con=getConnection(); 47 ps = con.prepareStatement(sql); 48 for (int i = 0; i < objs.length; i++) { 49 ps.setObject(i+1, objs[i]); 50 } 51 rs= ps.executeQuery(); 52 return rs; 53 } 54 55 /** 56 * 执行增删该操作 57 * @param sql sql语句 58 * @param objs 参数列表 59 * @return 受影响行数 60 * @throws Exception 61 */ 62 public int executeUpdate(String sql,Object... objs) throws Exception{ 63 con=getConnection(); 64 ps = con.prepareStatement(sql); 65 for (int i = 0; i < objs.length; i++) { 66 ps.setObject(i+1, objs[i]); 67 } 68 int count = ps.executeUpdate(); 69 return count; 70 } 71 /** 72 * 回收连接资源 73 * @throws Exception 74 */ 75 public void closeAll() throws Exception{ 76 //倒着回收 77 if(rs!=null){ 78 rs.close(); 79 } 80 if (ps!=null) { 81 ps.close(); 82 } 83 if(con!=null){ 84 con.close(); 85 } 86 } 87 88 }
三:entity实体类在这里不详细解释了。
四:impl包(实现功能较多不在这里做多解释)
前台:注册登录比较简单,但是注册用到ajax功能,相当于远程对比注册的用户名是否已经存在,话不多说上代码~
1 //功能模块二:注册功能 2 //添加到SQL 3 public int register(User user) throws Exception { 4 String sql = "insert into dbo.EASYBUY_USER(EU_USER_ID,EU_USER_NAME,EU_PASSWORD,EU_SEX,EU_BIRTHDAY, EU_IDENTITY_CODE, EU_EMAIL, EU_MOBILE, EU_ADDRESS, EU_STATUS, EU_LOGIN) values(?,?,?,?,?,?,?,?,?,?,?)"; 5 Object[] param={user.getEu_user_id(),user.getEu_user_name(),user.getEu_password(),user.isEu_sex(),user.getEu_birthday(),user.getEu_identity_code(),user.getEu_mobile(),user.getEu_email(),user.getEu_address(),user.getEu_status(),user.isEu_login()}; 6 return executeUpdate(sql,param); 7 }
1 //ajax的远端控制 2 public void doPost(HttpServletRequest request, HttpServletResponse response) 3 throws ServletException, IOException { 4 //解决中文乱码 5 request.setCharacterEncoding("utf-8"); 6 //实现UserDaoImpl类的对象 7 UserDaoImpl impl=new UserDaoImpl(); 8 String uName=request.getParameter("name"); 9 //String uName="admin"; 10 String msg=null; 11 if (uName!=null) { 12 try { 13 List<User> list=impl.GetUnameById(uName); 14 for (User user : list) { 15 if (uName.equals(user.getEu_user_id())) { 16 msg="true"; 17 break; 18 }else { 19 msg="false"; 20 } 21 } 22 } catch (Exception e) { 23 // 异常抓取 24 e.printStackTrace(); 25 } 26 } 27 response.getWriter().print(msg); 28 }
1 $(function(){ 2 //焦点移出表单时 3 $("#userId").blur(function(){ 4 ajax(); 5 }); 6 }); 7 function ajax(){ 8 //获取用户名 9 var uname=$("#userId").val(); 10 $.ajax({ 11 url:'<%=path%>/servlet/RegisterServlet', 12 type:'POST', 13 data:'name='+uname, 14 //data是从servlet回送的内容 15 success:function(data){ 16 if(data=="true"){ 17 $("#msg").html("该用户名已存在").addClass("error"); 18 }else{ 19 $("#msg").html("用户名可用").addClass("error"); 20 } 21 } 22 }); 23 }
那就挑一个难点吧,(后台)订单实现功能:
1 添加订单详情 2 public int addOrder_Detail(Order_Detail orde) throws Exception { 3 //EOD_ID, EO_ID, EP_ID, EOD_QUANTITY, EOD_COST 4 String sql="insert into easybuy_order_detail values(?,?,?,?)";//?代表数据库订单表有几列 5 Object[] objs={orde.getEo_id(),orde.getEp_id(),orde.getEod_quantity(),orde.getEod_cost()}; 6 return executeUpdate(sql, objs); 7 }
Servlet:
1 OrderGroupDaoImpl_wth ogdi=new OrderGroupDaoImpl_wth(); 2 public void doPost(HttpServletRequest request, HttpServletResponse response) 3 throws ServletException, IOException { 4 request.setCharacterEncoding("utf-8"); 5 String name=request.getParameter("userName"); 6 String id=request.getParameter("entityId"); 7 if (!name.isEmpty()&&!id.isEmpty()) { 8 //双条件查询 9 System.out.println("哈哈"); 10 try { 11 12 13 Map<Order, List<OrderGroup>> ordermap = ogdi.getOrderInfoByidAndName(id, name); 14 request.getSession().setAttribute("ordermap", ordermap); 15 request.getRequestDispatcher("/manage/order.jsp").forward(request,response); 16 } catch (Exception e) { 17 // TODO Auto-generated catch block 18 e.printStackTrace(); 19 } 20 21 }else if(name.isEmpty()&&!id.isEmpty()){ 22 //单号 23 24 try { 25 Map<Order, List<OrderGroup>> ordermap = ogdi.getOrderInfoByid(id); 26 request.getSession().setAttribute("ordermap", ordermap); 27 request.getRequestDispatcher("/manage/order.jsp").forward(request,response); 28 } catch (Exception e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } 32 33 }else if(!name.isEmpty()&&id.isEmpty()){ 34 //订货人 35 try { 36 Map<Order, List<OrderGroup>> ordermap = ogdi.getOrderInfoName(name); 37 request.getSession().setAttribute("ordermap", ordermap); 38 request.getRequestDispatcher("/manage/order.jsp").forward(request,response); 39 } catch (Exception e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 }else{ 44 //所有 45 try { 46 Map<Order, List<OrderGroup>> ordermap= ogdi.getOrderInfo(); 47 request.getSession().setAttribute("ordermap", ordermap); 48 request.getRequestDispatcher("/manage/order.jsp").forward(request,response); 49 } catch (Exception e) { 50 // TODO Auto-generated catch block 51 e.printStackTrace(); 52 } 53 54 } 55 56 } 57 58 }
再说一个加入购物车的功能:
1 Product_CategroyDaoImpl_wth si=new Product_CategroyDaoImpl_wth(); 2 public Product UploadPhoto(HttpServletRequest request, HttpServletResponse response){ 3 Product p1=new Product(); 4 try { 5 6 //上传的文件名 7 String uploadFileName=""; 8 //表单字段元素的name属性值 9 String filedName=""; 10 //请求信息中的内容是否是multipart类型 11 boolean ismultipart = ServletFileUpload.isMultipartContent(request); 12 //上传文件的储存路径(服务器文件系统上的绝对路径) 13 String pathString=request.getSession().getServletContext().getRealPath("/images/product"); 14 if (ismultipart) { 15 FileItemFactory factory=new DiskFileItemFactory(); 16 ServletFileUpload upload=new ServletFileUpload(factory); 17 try { 18 //解析form表单中所有文件 19 List<FileItem> items = upload.parseRequest(request); 20 Iterator<FileItem> iter = items.iterator(); 21 while (iter.hasNext()) { //依次处理每个文件 22 FileItem item = iter.next(); 23 //获取商品的编号 24 25 if (item.isFormField()) { //普通表单字段 26 filedName = item.getFieldName(); //表单字段的name属性值 27 if (filedName.equals("productName")) { 28 //商品名称 29 p1.setEp_name(item.getString("utf-8")); 30 System.out.println(p1.getEp_name()); 31 }else if(filedName.equals("productPrice")){ 32 //商品价格 33 p1.setEp_price(Float.valueOf(item.getString("utf-8"))); 34 System.out.println(p1.getEp_price()); 35 }else if(filedName.equals("productDetail")){ 36 //商品描述 37 p1.setEp_description(item.getString("utf-8")); 38 System.out.println(p1.getEp_description()); 39 }else if(filedName.equals("parentId")){ 40 int fenleiid=Integer.parseInt(item.getString("utf-8")); 41 //商品分类 二级分类 42 p1.setEpc_child_id(fenleiid); 43 //根据二级获取一级 44 int oneIdOfTwoId = si.OneIdOfTwoId(fenleiid); 45 //商品分类 一级分类 46 p1.setEpc_id(oneIdOfTwoId); 47 System.out.println(p1.getEpc_child_id()); 48 System.out.println(p1.getEpc_id()); 49 }else if(filedName.equals("productNumber")){ 50 //商品库存 51 p1.setEp_stock(Integer.parseInt(item.getString("utf-8"))); 52 System.out.println(p1.getEp_stock()); 53 } 54 }else { //文件表单字段 55 String fileName = item.getName(); 56 if (fileName!=null && !fileName.equals("")) { 57 File fullfile=new File(item.getName()); 58 File savFile=new File(pathString,fullfile.getName()); 59 item.write(savFile); 60 uploadFileName=fullfile.getName(); 61 p1.setEp_file_name(uploadFileName); 62 System.out.println("上传成功后的文件名是:"+uploadFileName); 63 64 } 65 } 66 } 67 68 } catch (FileUploadException e) { 69 // TODO Auto-generated catch block 70 e.printStackTrace(); 71 } 72 } 73 }catch (Exception e) { 74 // TODO Auto-generated catch block 75 e.printStackTrace(); 76 } 77 return p1; 78 } 79 80 }
(这里用到部分功能包在这里不做详细讲解需要功能包的可以私联)
五:在这里透露一下关于这个项目的jsp页面
总体讲一个比较精美的网站是少不了各个功能模块的“装饰”,只有亮点更多的网站才会收到大家的青睐。从易买网这个不大不小的项目可以看出来团队合作是很重要的,将来也好,现在也罢。这样的一个项目交给我们可能一个人是解决不了的,当然未来并不一定。
首先很感谢你可以看完这篇博客,其次如果你对这篇博客不满或者有有问题可以在下面提出来。如果有需要可以私联哦~