Day21

作者: 开发猛男 | 来源:发表于2019-05-23 23:10 被阅读0次

完成订单查询、展示、在线支付功能

实体说明

  • PageBean
    分页展示的时候就用PageBean
public class PageBean<E> {
        //list保存等待展示的内容 可以是order,product...
    private List<E> list;
        //当前页
    private Integer curPage;
        //每页展示内容的个数
    private Integer pageSize;
        //总页数,通过totalCount / pageSize 计算
    private Integer totalPage;
        //总内容条数
    private Integer totalCount;
        ...
}

技术点:

权限控制-粗粒度-filter
需求说明:权限控制,例如用户在未登录的情况下,不能查看订单、购物车。
技术步骤分析:
  1. 编写PrivilegeFilter
    1.1 创建class PrivilegeFilter 实现javax.servlet.Filter接口
    1.2 重写init、doFilter、destroy三个方法
  2. 重写doFilter方法
public class PrivilegeFilter implements Filter{
  @Override
  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain){
    //2.1 强转
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) resp;
    //2.2 逻辑
    User user = request.getSession().getAttribute("user");
    if(user == null){
       request.setAttribute("msg","请先登录!");
       request.getRequestDispatcher("/jsp/msg.jsp").forward(request,response);
       return null;
    }
    //2.3放行
     chain.doFilter(request, response);
  }
}
  1. 修改配置文件
<filter>
  <filter-name>PrivilegeFilter</filter-name>
  <filter-class></filter-class>
</filter>
<filter-mapping>
  <filter-name>PrivilegeFilter</filter-name>
  <servlet-name></servlet-name>
  <url-pattern></url-pattern>
</filter-mapping>
弹出层-layer

使用方法:
1.复制layer文件夹
2.导入jQuery
3.导入layer.js

url-pattern匹配
  • 完全匹配 /jsp/order_info.jsp
  • 前缀匹配 /jsp/*
  • 后缀匹配 /*.jsp

案例1 - 查询订单

需求说明:将上节购物车生成的订单,分页展示出来
步骤实现:
  1. header.jsp上修改 我的订单 超链接
    <a href="/day18/order?method=findAllByPage&curPage=1">我的订单</a>
  2. 在OrderServlet中编写findAllByPage方法
    2.1 获取登录状态,若未登录需先登录
    2.2 获取当前页curPage
    2.3 调用Service 返回PageBean
    2.4 将PageBean加入域中 请求转发
  3. 在product_list.jsp上修改

案例2 - 订单详情

需求说明:对未进行付款的订单显示付款按钮,点击付款进入订单详情页面
步骤分析:
  1. 付款按钮超链接
  2. 在OrderServlet中编写getById方法
  3. 调用Service根据订单id oid 查询订单order 内容
    3.1 从数据库中查询order并封装
    3.2 查询product 和 orderItem
    3.3 将Product加入到OrderItem
    3.4 遍历OrderItem 加入到order.items
  4. 返回封装好的order 加入到域中

案例3 - 在线支付

需求说明:点击付款后,输入姓名、地址、电话等信息,选择方式支付,并接受回调信息
步骤分析:
  1. 点击product_info里确认订单按钮,post提交表单到/day18/order?method=pay
    1.1 使用隐藏域将oid提交<input type="hidden" / value="${order.oid}">
  2. 编写pay方法
    2.1 获取参数、address、name、telephone、oid
    2.2 调用Service通过oid从数据库获取order的java bean对象
    2.3 将参数设置给order
    2.4 将order写回数据库
    2.5 组织参数发送给支付第三方(提前写好了)
  3. 编写callback方法 (回调,在merchantInfo.properties设置)
    数据根据GET方式提交到/order?method=callback?链接
    3.1 获取返回的各参数
    3.2 根据数字签名hmac判断回调数据是否真实,来自支付公司
    3.3 判断交易结果返回类型
    3.3.1 r9_BType ==1 浏览器重定向,用户支付成功后,浏览器重定向页面,通知用户和商户,若在此之前用户关闭页面,则商户不会被通知。
    3.3.2 r9_BType==2 服务器点对点通知,无论是否重定向通知商户,第三方支付服务器都会通知到商户。
    3.4 获取order java bean对象,修改order状态state到数据库

相关文章

网友评论

      本文标题:Day21

      本文链接:https://www.haomeiwen.com/subject/jxhmzqtx.html