专栏首页黑泽君的专栏day20_day23课堂笔记

day20_day23课堂笔记

day20_day23课堂笔记

一、概述

  做一个项目:bookStore图书商城   目的:将前期学过的知识进行整合。

    1. 商城首页 index.jsp

    2. 在首页上点击类别链接时会跳转到 product_list.jsp 页面展示相关商品信息

    3. 新用户注册页面

    4. 当我们点击我的帐户

        如果用户没有登陆,则跳转到 login.jsp 页面

        如果用户登陆了,角色是普通用户,则跳转到 myAccount.jsp 页面

        如果用户已经登陆,并且它的角色是管理员,则跳转到 /admin/login/home.jsp 页面

    5. 点击购物车,跳转到 cart.jsp 页面展示出购物车中商品信息

    6.搜索操作

        会对输入的信息与商品的名称进行 模糊匹配 ,将查询出的数据在 product_list.jsp 页面展示出来

二、分述

1.  关于用户的操作(普通注册的用户)

    1.1 用户信息的修改操作     1.2 用户订单查询的操作     1.3 用户退出(注销)的操作

        用户信息的修改操作:

            对于普通注册用户,它可以修改除了 会员邮箱 与 会员名 之外其它信息

        用户订单查询的操作

            用户可以查询出自己的订单,可以查看订单详情,可以删除已支付的订单

        用户退出

            本质就是将存储到 session 中的 User对象 invalidate(); 销毁掉

    1.4 关于商品查看         查看所有商品信息         查看类别商品信息         查看类似名称的商品信息         查看某个商品的详细信息     1.5 关于购物车         将商品添加到购物车         查看购物车中商品信息         对购物车中商品信息修改及删除     1.6 关于订单操作         生成订单         当前用户所有订单的查看         查看订单的详细信息         删除订单         如果订单为支付,我们可以点击进行支付操作     1.7 支付操作         支付页面是 pay.jsp

2.  关于后台商城管理的操作

    2.1 商品管理         商品查看    a) 查看所有商品信息    b) 多条件查询         商品编辑    对商品信息修改(上传操作)         商品删除    a) 删除一件商品           b) 批量删除         商品添加     (上传操作)         下载销售榜单

    2.2 订单管理         查看所有的订单         多条件查询订单         查看订单详细信息         订单删除

3.  数据库设计

    通过ER图来描述(实体关系图)

    只画了简单的实体关系图(属性没有添上)

    数据库的架构设计图如下:

三、功能具体实现(部分功能)

1.  注册用户

        register.jsp ——> RegistServlet ——> UserService ——> UserDao

        注册成功后,需要发送一封激活邮件。

        在UserService中调用dao中addUser方法扣,执行下面代码:

        我们需要创建一个 ActiveUserServlet 这样一个 servlet。

        注意:在激活时,需要考虑激活码的时间限制。

2.  登陆用户

        login.jsp ——> LoginServlet ——> UserService ——> UserDao

        在登陆时,需要考虑用户的状态是否激活,如果没有激活,用户名与密码正确,也不能登陆。

3.  关于点击在 product_list.jsp 页面上点击“我的帐户”的操作

        注意:在其他页面上的点击“我的帐户”没有做,目前只做了这一个页面的。

        注意:如果用户没有登陆,则 session 中就不会有User对象,那么会跳转到 login.jsp。

                  如果用户已经登陆了,则 session 中就会有User对象,会根据用户的角色跳转。

        1. 在 head.jsp 中将我们的帐户的链接:

            <a href="login.jsp">我的帐户</a>

            修改成访问

            <a href="${pageContext.request.contextPath}/myAccount">我的帐户</a>

        2. 创建一个 MyAccountServlet

4.  关于注册用户登陆后的操作

用户信息修改操作

            从数据库中将用户信息查询出来,回显

            <a href="${pageContext.request.contextPath}/findUserById?id=${user.id}">用户信息修改</a>

            创建一个 FindUserByIdServlet  完成用户查找回显功能。

            对数据进行修改操作

            创建 ModifyUserServlet 完成修改操作。

            注意:修改后,要将user从session中销毁,重新登陆。

用户退出操作

            <a href="${pageContext.request.contextPath}/logout">用戶退出</a>

            在LogOutServlet完成退出操作

5. 关于首页上的商品类别查询的操作

        根据类别查询后的数据最终要在product_list.jsp页面展示,并且是分页显示:

            select * from products limimt m,n where category=?

        如果点击的是全部商品目录就是查询所有:

            select * from products limimt m,n

        代码实现:

            在menu_seacher.jsp页面上类别连接

            <a href="${pageContext.request.contextPath}/pageServlet?category=文学">文学</a>

        需要创建一个pageServlet

            这个servlet中与我们之前写的分页的servlet唯一的区别就是需要再获取一个类别属性

            String category=request.getParameter(“category”);

        再调用service,dao查询出数据返回 PageBean

6. 关于订单的操作

前台-订单操作

        a) 生成订单

        b) 查看订单(查看当前用户所有订单)

        c) 查看订单详情(查看某一个订单的信息)

        d) 删除订单

后台-订单操作

        a) 查看订单(查看所有用户的订单)

        b) 按条件查询订单(1. 收货人查询   2. 订单号查询)

        c) 删除订单


a) 生成订单 

        将订单数据 insert 到 orders 表中(批处理)

        将订单相关数据 insert 到 orderitem 表中(批处理)

        update修改 products 表中的 pnum

    在 order.jsp 页面上

    点击提交订单,就应该创建一个订单。

    订单生成思路图:

    创建一个 CreateOrderServlet ,它是用于接收 order.jsp 页面的请求的。

    在CreateOrderServlet中完成什么操作?

        1. 收集订单相关数据封装成一个 Order 对象

        2. 调用 OrderService 完成订单生成操作。

            注意:在 OrderService 中完成订单的生成需要事务控制。


b) 查看订单(查看当前用户所有订单) 

    查询订单详情

    可以有两种写法:

        1.  写一条sql语句,得到信息

        2.  写n条sql语句,得到信息

    代码如下图所示:


7. 在线支付操作

    方式一:直接与各个银行做接口

        优点:快捷。

        缺点:需要针对于不同银行做实现,并且银行接口变动,你也需要变动。 维护工作量极大。

    方式二:使用第三方支付

        优点:不需要考虑银行,只与第三方支付进行交互。开发工作量极低。

        缺点:第三方支付需要一定的时间,并且会收取一定的费用。

    常见第三方支付公司

    易宝支付开发所需工具

    本次案例我们使用第三方支付

         我们使用的是易宝支付http://www.yeepay.com/

         前提条件:

            1. 必须申请一个商家用户商家帐户: 10001126856

            2. 需要网上银行

            3. 真实ip地址

        支付流程:

        pay.jsp提交时会访问一个PayOnlineServlet,在这个PayOnlineServlet中我们需要将传递给第三方支付公司的信息获取到封装成表格,并发送给第三方支付公司。

            问题1:发送信息有哪些?

                查看接口文档。

            问题2:信息向哪发送? 

                正式请求地址:https://www.yeepay.com/app-merchant-proxy/node

            问题3:第三方支付公司反馈信息怎样处理?

                按照接口文档来处理。

        第三方支付公司反馈信息为:

        http://localhost:8080/product/callBackServlet?p1_MerId=10001126856&r0_Cmd=Buy&r1_Code=1&r2_TrxId=914221214141971I&r3_Amt=0.01

        &r4_Cur=RMB&r5_Pid=&r6_Order=2cab9734-e148-44c8-a167-eed72e4abca0&r7_Uid=&r8_MP=&r9_BType=1&ru_Trxtime=20150531161117

        &ro_BankOrderId=2767595753150531&rb_BankId=BOC-NET&rp_PayDate=20150531161116&rq_CardNo=&rq_SourceFee=0.0&rq_TargetFee=0.0

        &hmac=7f60261451a3f8f51cacaa1bcd5592c4


8. 权限控制

    1. url级别的控制,使用Filter,来拦截指定的路径,控制资源访问。 粗粒度权限控制。

    2. 自定义标签。

            后续会更新。。。

    3. Annotation(注解)+动态代理+工厂模式(扩展)。细粒度权限控制。      

        我们可以对行为拦截(拦截service行为)。

        使用 动态代理 与 Annotation 来完成。

        原理:我们在Userservice中使用自定义注解,这个自定义注解是用于定义当前行为访问需要的权限。(注意:我们这个项目把接口省略了,直接写的实现类,虽不规范,但是简洁!)

        步骤:

            1. 我们先自定义一个注解类(注意:自定义注解不是类,本质上是一个接口,但是叫法上我们以类相称,虽不正确,但是亲切!)

            2. 我们在Userservice中使用自定义注解

            3. 后面不知道该怎么做了。。。


9. 代码重构(优化Servlet)

  • 对servlet进行重构,在实际开发中,一般情况下是一个功能模块对应一个servlet,简单说,就是UserServlet、ProductServlet、OrderServlet、CartServlet。

    步骤:

    1. 创建一个 UserServlet,配置 web.xml

        <url-pattern>/user</url-pattern>

    2. 获得发送请求的参数URI

            URL: 统一资源定位符(俗称:网址)

            URI: 统一资源标识符

http://localhost:8080/day07_03_myApp1/1.html

            URL= 协议 主机IP(端口号) URI(当前应用的资源路径)

        例如:http://localhost:8080/product/user?method=register

    优化一:

    以UserServlet为例

        RegisterServlet、LoginServlet、 ActiveUserServlet、LogOutServlet、ModifyUserServlet、MyAccountServlet、FindUserServlet

        在UserServlet中完成以下方法对应以上的Servlet完成的功能,把之前的Servlet中的代码粘过来放到每个功能下即可,如下图所示:

        问题:这些方法怎样被调用呢?反过来说,当我们点击页面上的登陆或注册或……怎样找到这些方法呢?如下图所示:

            1. 先删除之前的web.xml中配置的servlet映射,添加新的servlet映射:

            2. 修改其他页面的跳转链接,例如:

            3. 在UserServlet中完成下列代码:

            同理:可以按照这种方式完成OrderServlet、ProductServlet、CartServlet功能。

            注意:添加商品操作不抽取,因为它是文件上传,也就是说,关于商品添加或修改操作的,只要涉及到上传就不抽取。   

        经过这样抽取(封装)后,Servlet变少了,代码简洁了,但问题又来了,添加功能后,UserServlet就需要修改,这样不好,不够健壮,那就继续封装!

优化二:

反射思想:

    UserServlet.java中,不就是变量(字段)和方法吗?UserServlet.java编译后,生成UserServlet.class文件,

    UserServlet.java里面的变量(字段)和方法在内存中就有了相应的位置,我们把这些“位置”看成对象,而整个.class文件我们看成Class对象,直接从内存的高度去获取和使用它们。示例如下:  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UltraEdit(UE)如何设置去掉.bak备份文件?

    使用UltraEdit(UE)打开文件,修改保存后,会产生.bak备份文件,感觉很不爽,如何去掉呢?

    黑泽君
  • linux中各种文件的颜色表示是什么意思?

    =============================================================================

    黑泽君
  • 大数据技术之_18_大数据离线平台_01_项目开发流程+大数据常用应用/分析平台/业务处理方式+数据分析平台的数据来源+数据处理的流程+项目集群的规模+需求分析+技术架构/选型

      明确项目到底需要做什么,以及最终做成什么样子,需求分析不明确,项目周期就不明朗,项目完成度无法把控,技术分控无法实现,而且也无法了解项目发展的主体方向。其中...

    黑泽君
  • 5W2H,帮助你梳理B端产品业务流程

    在产品设计的过程中,不可避免的会涉及到产品的业务流程的设计,业务流程往往是多用户、多角色、甚至是多企业协作最终完成最终目标。

    Dorothy
  • 想知道你的对象用微信和谁聊得最多吗?一个代码告诉你

    在生活中、工作中经常使用微信与好友聊天,有时候聊天的消息多到自己都不知道有多少,有用户就很好奇,这该怎么查看与好友的聊天记录数量呢? ? 今天告诉大家一个方法,...

    企鹅号小编
  • 2014密码时代已死?六种旨在取代传统密码位置的新奇想法

    今年早些时候,Adobe公司遭受数据泄露产生的的毁灭性破坏凸显出了这样一个事实现状:我们大多数人讨厌密码,而且我们中的很多人真的是非常非常的懒。 将近2...

    FB客服
  • 【数据可视化专题】数据可视化:前端数据之美如何展示?

    随着 web 技术的蓬勃发展,前端的展示、交互越来越复杂,在用户的访问、操作过程中产生了大量的数据。由此,前端的数据分析也变得尤为重要。当然,对于站长来说,你可...

    小莹莹
  • 风险预警|​大型票务网站用户密码遭泄露,导致用户被骗超百万!

    腾讯云安全
  • 个性化推荐是不是伪命题

    最近,有一位网友在微博上说,推荐是不是个伪命题?连续几天试用了据说很好的某头条,某资讯以及某快报,感觉逃脱不了看什么就是什么的套路。也有人说,这是Exploit...

    华章科技
  • 圣诞雪花纷飞自定义View

    github地址:https://github.com/shuaijia/JSBaseDemo/blob/master/app/src/main/java/co...

    蜻蜓队长

扫码关注云+社区

领取腾讯云代金券