zoukankan      html  css  js  c++  java
  • JavaWeb之控制层整理-网上书店(二十二)

    后台控制

    //过滤器已经实现编码问题
    String op = request.getParameter("op");
    if("addCategory".equals(op)) {
    	addCategory(request,response);
    } else if("showAllCategories".equals(op)) {
    	showAllCategories(request,response);
    } else if("addBookUI".equals(op)) {
    	addBookUI(request,response);
    } else if ("addBook".equals(op)) {
    	addBook(request,response);
    } else if("showAllBooks".equals(op)) {
    	showAllBooks(request,response);
    } else if("login".equals(op)) {
    	login(request,response);
    } else if("managerLogout".equals(op)) {
    	managerLogout(request,response);
    }		
    一、 添加分类(添加分类模块--链接)
    	1. 添加分类将表单数据添加到Category中
    	2. 调用业务逻辑方法进行添加到数据库中
    	3. 添加成功提示
    		response.getWriter().write("<font color='green'>保存成功</font>");
    	4. 否则
    		response.getWriter().write("<font color='red'>保存失败,类别已经存在</font>");
    	
    二、 显示所有分类(查询分类模块--链接)
    	1. 调用业务方法查询所有分类
    	2. 将categories设置到request域中
    	3. 转发到/manager/showAllCategories.jsp
    
    三、 链接到添加书籍页面(添加图书模块--链接)
    	1. 调用业务方法查询所有分类
    	2. 将categories设置到request域中
    	3. 转发到/manager/addBookUI.jsp
    
    四、 添加书籍(添加图书模块--链接)
    	1. 判断是enctype是否是multipart,如果不是提示信息,返回
    		response.getWriter().write("请选择正确的enctype类型<a href='"+request.getContextPath()+"/manager/addBookUI.jsp'>返回操作</a>");
    	2. 创建文件上传对象,解析请求参数,创建book对象
    	3. 遍历解析到的请求对象,如果是普通字段,直接获取字段名和值,通过BeanUtils工具设置到book对象中
    	4. 如果不是上传字段
    		1). 得到文件名,唯一文件名+扩展名FilenameUtils.getExtension,将文件名设置到book对象中
    		2). 获取文件存储路径,如果路径不存在就创建该目录
    		3). 构建子目录,将子目录存储到book的path中
    		4). 将上传文件写入存储路径中
    	5. 	调用业务方法将book添加到数据库中
    		request.setAttribute("msg","<script type='text/javascript'>alert('文件保存成功');</script>");
    	6. 为了重新获取书籍分类,要重新查所有分类再转发到/manager/addBookUI.jsp
    
    五、 显示书籍(查看图书模块--链接)
    	1. 获取请求页码
    	2. 调用业务方法查询PageBean对象 findBookPageByPageNum(pageNum)
    	3. 设置url地址,pb.setUrl(request.getContextPath()+"/servlet/ManagerServlet?op=showAllBooks");
    	4. 将page设置到request域中
    	5. 转发到"/manager/listBooks.jsp"

    前台控制

    String op = request.getParameter("op");
    if("showIndex".equals(op)) {
    	showIndex(request, response);
    } else if("listBookByCategory".equals(op)) {
    	listBookByCategory(request,response);
    } else if("buyBook".equals(op)) {
    	buyBook(request,response);
    } else if("delOneItem".equals(op)) {
    	delOneItem(request,response);
    } else if("delMultiItem".equals(op)) {
    	delMultiItem(request, response);
    } else if("changeItemNum".equals(op)) {
    	changeItemNum(request,response);
    } else if("regist".equals(op)) {
    	regist(request,response);
    } else if("active".equals(op)) {
    	active(request,response);
    } else if("login".equals(op)) {
    	login(request,response);
    } else if("logout".equals(op)) {
    	logout(request,response);
    } else if("getOrders".equals(op)) {
    	getOrders(request,response);
    } else if("showOrders".equals(op)) {
    	showOrders(request,response);
    } else if("pay".equals(op)) {
    	pay(request,response);
    } else if("payUI".equals(op)) {
    	payUI(request,response);
    }
    一、 显示前台主页(首页模块-->链接)
    	1. 查询所有分类,将分类的集合categories设置到request域中
    	2. 获取请求的页码,调用业务方法通过页码查找书籍得到一个PageBean对象
    	3. 设置url、设置page到request域中
    	4. 转发到listBooks.jsp中
    二、 按照分类查询所有书籍
    	1. 查询所有分类,将分类的集合categories设置到request域中
    	2. 获取请求参数:页码和分类的id(categoryId)
    	3. 调用业务方法,查找PageBean对象通过页码和分类id
    	4. 设置url、设置request域中对象page
    	5. 转发到listBooks.jsp
    三、 购买链接
    	1. 获取书籍bookId
    	2. 调用业务方法通过bookId查找书籍findBookId(bookId)
    	3. 获取session,从session域中查找购物车cart
    	4. 若cart为空,创建cart对象,将cart设置到session域中
    	5. 将书籍添加到购物车中
    	6. AJax响应数据,response.getWriter().write("<font color='red'>购买成功,如需查看您购买的物品,请点击购物车</font");
    四、 删除单个项目
    	1. 获取请求参数bookdId
    	2. session域查找cart
    	3. 在购物车中移除该bookid
    	4. 重定向到showCart.jsp
    五、 删除多个项目
    	1. 获取请求的ids一个数组
    	2. 获取session中的cart
    	3. 遍历ids,通过购物车进行移除
    	4. 重定向到/showCart.jsp
    
    六、 改变购物项数量
    	1. 获取数量和书籍编号num/bookId
    	2. 将获取的数量强转一个int类型newNum,要作异常处理
    	3. 获取session对象,获取session对象的购物车
    	4. 如果购物车不为空,并且购物项大于0
    		通过书籍编号查找该购物项,设置该购物项的数量
    	5. 重定向到showCart.jsp
    七、 注册用户(Customer)
    	1. 将请求的注册信息注入到Customer对象中
    	2. 设置客户id/code(激活码)
    	3. 调用业务方法进行注册用户registCustomer(c)
    	4. 注册成功提示信息
    		response.getWriter().write(
    					"注册成功,激活码已发送到您的" + c.getEmail() + "信件中...");
    	5. 如果注册时有异常就对其提示注册失败
    	
    	#发送邮件
    	1. 开启一个SendMail类专用于发送邮件的线程
    	2. 构造接收客户信息和请求地址的构造函数
    	3. 定义props集合存储协议...
    	4. 创建Session、MemeMessage(邮件信息)
    	5. 设置发送者、接收类型、主题、内容
    		message.setContent("欢迎加入黑马<br/>如需激活您的账户<a href='http://localhost:8080/"+context+"/servlet/ClientServlet?op=active&username="+c.getUsername()+"&code="+c.getCode()+"'>激活</a>欢迎骚扰~", "text/html;charset=UTF-8");
    		保存邮件改变信息,message.saveChanges();
    	6. 	通过session对象得到一个火箭,设置用户名、密码connect
    	7. 设置发送messsage对象,和接受者
    	
    八、 激活邮件处理
    	1. 获取用户名和激活码
    	2. 调用业务方法进行激活activedCustomer(username, code)
    	3. 提示信息
    		response.getWriter().write("激活成功");
    		response.setHeader("Refresh", "2;URL="+request.getContextPath());
    	4. 否则提示服务器忙
    
    九、 登录操作
    	1. 获取用户名、密码请求参数
    	2. 调用业务方法进行验证loginCustomer(username, password)
    	3. 如果得到的用户为空,提示信息
    		response.getWriter().write("提示用户名和密码错误或者未激活,2秒后跳到登录页面");
    		response.setHeader("Refresh", "2;URL="+request.getContextPath()+"/login.jsp");
    	4. 	否则就将用户customer设置到session域中
    	5. 提示登录成功
    		response.getWriter().write("登录成功,2秒后跳到主页");
    		response.setHeader("Refresh", "2;URL="+request.getContextPath());
    十、 注销操作
    	1. 移除session域中的用户customer
    	2. 提示信息
    		response.getWriter().write("注销成功,2秒后跳到登录页");
    		response.setHeader("Refresh", "2;URL="+request.getContextPath()+"/login.jsp");
    	
    十一、 生成订单getOrder
    	1. 得到session对象,从session域中查找customer
    	2. 如果用户为空跳转
    		response.sendRedirect(request.getContextPath()+"/login.jsp");
    		return;
    	3. 从session域中获取购物车对象
    	4. 创建Orders对象
    	5. 设置订单号OrdersNum,设置总金额、总数量、设置订单对应的Customer
    	6. 遍历购物车中的购物项
    	7. 获取每一个购物项
    	8. 创建LineItem对象,存储订单明细
    	9. 设置订单明细的id,设置数量,小计,设置对应的书籍Book
    	
    	10. 将订单明细添加到订单中orders
    	11. 调用业务方法生成订单信息genOrders(orders);
    	12. 将订单设置到request域中,转发到pay.jsp
    		request.setAttribute("o", orders);
    		request.getRequestDispatcher("/pay.jsp").forward(request, response);
    		
    十二、 	显示订单(我的订单)showOrders
    	1. 从session域中查找customer
    	2. 如果customer为空重定向到/login.jsp
    	3. 调用业务方法获取所有订单findOrdersByCustomerId(c.getId())
    	4. 将订单设置到request域中
    	5. 转发到/showCustomerOrders.jsp

    在线支付

    一、 结算购物车商品pay
    	1. 获取订单号orderid、金额money、银行类型pd_FrpId
    	2. 封装参数
    		url="http://localhost:8080/"+request.getContextPath()+"/servlet/PaymentResponse"
    		String hmac = PaymentUtil.buildHmac(...);
    	3. 将参数设置到request域中,转发到sure.jsp
    	4. sure.jsp表单提交到https://www.yeepay.com/app-merchant-proxy/node
    	5. 建立PaymentResponse类,获取request域中的值
    	6. 验证数据是否有效PaymentUtil.verifyCallback
    	7. 如果有效
    		r1_Code:1代表成功
    		r9_BType:2代表服务器点对点通信,若设置2就必须会写sucess
    		if("1".equals(r1_Code)) {
    			if("2".equals(r9_BType)) {
    				response.getWriter().write("success");
    			}
    		}
    	8. 如果if("1".equals(r1_Code))成功,调用业务方法findOrdersByOrdersNum(r6_Order)
    	9. 将查询到的订单修改状态,然后再调用业务方法更新订单
    	10. 提示信息
    		response.getWriter().write("支付成功!,<a href='http://localhost:8080/"+request.getContextPath()+"/showCustomerOrders.jsp'>点击返回订单页面</a>");
    
    二、 我的订单中(付款操作)
    	1. 获取session对象,从session中查找customer
    	2. 如果为空跳转到
    		response.sendRedirect(request.getContextPath()+"/login.jsp");
    		return;
    	3. 获取订单号,调用业务方法查询该订单
    	4. 将查询到的订单设置到request域中
    	5. 转发到/pay.jsp中

    权限控制

    一、 用户登录
    	1. 获取请求的参数username&password
    	2. 业务层进行验证登录,返回user对象
    	3. 判断user是否为空,若不为空设置到session域中
    		重定向manager/index.jsp;
    	4. 若为空
    		response.getWriter().write("错误的用户名或密码,请重新登录");
    		跳转到login/login.jsp
    		
    二、 用户注销
    	1. 从session域中移除user对象
    	2. 重定向/login/login.jsp
    	
    #### 权限过滤器(基于URI地址过滤权限问题)
    	1. 对于登录、注销、获取Ajax引擎不需要过滤,所以这几个采用直接放行
    	2. 获取请求地址getRequestURI(),获取请求参数getQueryString(),如果请求参数不为空,拼接uri地址
    	3. 替换应用名为空字符串,为了在后面和权限中的地址做判断
    	4. 获取session中的user对象,如果user为空,重定向到后台登录页/login/login.jsp
    	5. 创建菜单集合menus,用作存储数据库中查询到的集合
    	6. 调用业务方法,通过user查找Role权限集合 service.findUserRoles(user);
    	7. 遍历权限集合,然后获得每一个权限对象,通过权限对象获取菜单集合service.findMenuRole(role);
    	8. 将查到的菜单集合添加到menus中
    	9. 定义一个变量hasPermission,判断是否有该权限
    	10. 遍历menus,判断菜单模块中的地址是否和请求的地址是否相等,如果相等设置hasPermission为true,break;
    	11. 如果hasPermission为true,直接放行,否则就提示没有权限
  • 相关阅读:
    JS调用App方法及App调用JS方法
    提升用户体验之 选用合适的鼠标光标
    js仿QQ拖拽删除
    Linux下安装 mongodb
    QQ分享-定制分享卡片
    js判断浏览器语言实现网站国际化
    js复制内容到剪切板
    为什么会有堆内存和栈内存之分
    Avro实现RPC
    zookeeper学习day01
  • 原文地址:https://www.cnblogs.com/codingpark/p/4292130.html
Copyright © 2011-2022 走看看