完成订单查询、展示、在线支付功能
实体说明
- 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
需求说明:权限控制,例如用户在未登录的情况下,不能查看订单、购物车。
技术步骤分析:
- 编写PrivilegeFilter
1.1 创建class PrivilegeFilter 实现javax.servlet.Filter接口
1.2 重写init、doFilter、destroy三个方法 - 重写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);
}
}
- 修改配置文件
<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 - 查询订单
需求说明:将上节购物车生成的订单,分页展示出来
步骤实现:
- header.jsp上修改 我的订单 超链接
<a href="/day18/order?method=findAllByPage&curPage=1">我的订单</a>
- 在OrderServlet中编写findAllByPage方法
2.1 获取登录状态,若未登录需先登录
2.2 获取当前页curPage
2.3 调用Service 返回PageBean
2.4 将PageBean加入域中 请求转发 - 在product_list.jsp上修改
案例2 - 订单详情
需求说明:对未进行付款的订单显示付款按钮,点击付款进入订单详情页面
步骤分析:
- 付款按钮超链接
- 在OrderServlet中编写getById方法
- 调用Service根据订单id oid 查询订单order 内容
3.1 从数据库中查询order并封装
3.2 查询product 和 orderItem
3.3 将Product加入到OrderItem
3.4 遍历OrderItem 加入到order.items - 返回封装好的order 加入到域中
案例3 - 在线支付
需求说明:点击付款后,输入姓名、地址、电话等信息,选择方式支付,并接受回调信息
步骤分析:
- 点击product_info里确认订单按钮,post提交表单到/day18/order?method=pay
1.1 使用隐藏域将oid提交<input type="hidden" / value="${order.oid}">
- 编写pay方法
2.1 获取参数、address、name、telephone、oid
2.2 调用Service通过oid从数据库获取order的java bean对象
2.3 将参数设置给order
2.4 将order写回数据库
2.5 组织参数发送给支付第三方(提前写好了) - 编写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到数据库
网友评论