JavaWeb书城项目总结

JavaWeb书城项目总结

知识点

学习内容:
1、显示主页面:
新建BookDAO 、 BookDAOImpl : getBookList()
新建BookService 、 BookServiceImpl : getBookList()
新建BookController : index()
编辑index.html

2、加商品到购物车,显示购物车中的购物项
首先要拿到用户的购物车才能方便判断
由上到下逐步细化;controller->service->DAO
加入购物项时要考虑原来购物车中有没有购物项,分两种情况加

3、购物车的详情页面
要加载用户的购物车信息,之前的getCart(User user)中的购物车项只有bookId,其他未赋值
通过getCartItemList(User user)对购物车项中的CartItem进行赋值才能够得到用户真正的购物车信息

4、结账:
1、订单表添加相关记录
2、订单详情表中添加购物车项的记录
3、购物车项表中删除对应的购物车项记录

5、订单页面的显示
orderListController->getOrderList Service DAO
thymeleaf的代码片段拷贝使代码重复使用

6、购物车编辑
7、精度问题(BigDecimal)
现象运算后的结果有很多小数
那为什么会出现这种情况呢?
因为不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。
注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值
CratItem类中的方法:
public Double getXj() {
BigDecimal bigDecimalPrice = new BigDecimal(getBook().getPrice()+"");
一般不建议使用new BigDecimal(Double)的形式,建议把Double转成字符串的形式
BigDecimal bigDecimalBuyCount = new BigDecimal(buyCount+"");
BigDecimal bigDecimalXj = bigDecimalPrice.multiply(bigDecimalBuyCount);
xj=bigDecimalXj.doubleValue();
return xj;
}
8、过滤器判断是否为合法用户(SessionFilter中还有很多不明白的知识)
9、验证码
1) 添加jar
2) 在web.xml文件中配置KaptchaServlet,以及配置相关的属性
3) 在页面上访问这个Servlet,然后这个Servlet做两件事情:
- 在页面上显示验证码图片
- 在session作用域中保存验证码信息,对应的key存储在Constans这个常量接口中
4) 用户在注册页面中输入验证码发送给服务器,那么需要和session中保存的进行比较

out.println("<script language='javascript'>alert('验证码不正确!!');window.location.href='page.do?operate=page&page=user/regist'<script>");
return null;
打印语与跳转语句只能二选一,否则打印失效

10、正则表达式:
三步骤:定义正则表达式、定义待检验的字符串、检验
1. 定义正则表达式对象
正则表达式定义有两个方式:
1) 对象形式
var reg = new RegExp("abc")
2) 直接量形式
var reg = /abc/;
3) 匹配模式:
- g 全局匹配
- i 忽略大小写匹配
- m 多行匹配
- gim这三个可以组合使用,不区分先后顺序
例如: var reg = /abc/gim , var reg = new RegExp("abc","gim");
2. 定义待校验的字符串

   3. 校验
     2)元字符
     . , \w , \W , \s , \S , \d , \D , \b , ^ , $
     
   4.    3)[]表示集合
          [abc] 表示 a或者b或者c
          [^abc] 表示取反,只要不是a不是b不是c就匹配
          [a-c] 表示a到c这个范围匹配
   
        4) 出现的次数
          * 表示多次 (0 ~ n )
          + 至少一次 ( >=1 )
          ? 最多一次 (0 ~ 1)
          {n} 出现n次
          {n,} 出现n次或者多次
          {n,m} 出现n到m次

11、注册页面的表单验证:

1. 注册页面表单验证
1)

有一个事件 onsubmit ,
onsubmit="return false" , 那么表单点击提交按钮时不会提交
onsubmit="return true" , 那么表单点击提交按钮时会提交

           2) 获取文档中某一个节点的方式:
                //DOM:Document
                //var unameTxt = document.getElementById("unameTxt");
                //BOM:Browser
                //document.forms[0].uname
      2. 原生的Ajax(了解)
        第一步: 客户端发送异步请求;并绑定对结果处理的回调函数
        1) <input type="text" name="uname" onblur="ckUname()"/>
        2) 定义ckUname方法:
           - 创建XMLHttpRequest对象
           - XMLHttpRequest对象操作步骤:
             - open(url,"GET",true)
             - onreadyStateChange 设置回调
             - send() 发送请求
           - 在回调函数中需要判断XMLHttpRequest对象的状态:
             readyState(0-4) , status(200)
        第二步:服务器端做校验,然后将校验结果响应给客户端

12、同步请求与异步请求:
    异步请求Ajax(异步的JavaScript and xml):局部刷新  能够减轻服务器负担,提高用户体验、减轻网络宽带压力
    原生的Ajax(了解)
        第一步: 客户端发送异步请求;并绑定对结果处理的回调函数
        1) <input type="text" name="uname" onblur="ckUname()"/>
        2) 定义ckUname方法:
           - 创建XMLHttpRequest对象
           - XMLHttpRequest对象操作步骤:
             - open(url,"GET",true)
             - onreadyStateChange 设置回调
             - send() 发送请求
           - 在回调函数中需要判断XMLHttpRequest对象的状态:
             readyState(0-4) , status(200)
        开发步骤:
              1) 创建XMLHttpRequest
              2) 调用open进行设置:"GET" , URL , true
              3) 绑定状态改变时执行的回调函数 - onreadystatechange
              4) 发送请求 - send()
              5) 编写回调函数,在回调函数中,我们只对XMLHttpRequest的readystate为4的时候感兴趣
                                        我们只对XMLHttpRequest的status为200的时候感兴趣

            0: (Uninitialized) the send( ) method has not yet been invoked.
            1: (Loading) the send( ) method has been invoked, request in progress.
            2: (Loaded) the send( ) method has completed, entire response received.
            3: (Interactive) the response is being parsed.
            4: (Completed) the response has been parsed, is ready for harvesting.

            0 - (未初始化)还没有调用send()方法
            1 - (载入)已调用send()方法,正在发送请求
            2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
            3 - (交互)正在解析响应内容
            4 - (完成)响应内容解析完成,可以在客户端调用了

项目流程

​ 1、项目结构;
​ 2、项目编码流程:
​ -先想好程序需要完成什么功能(一般用controller层接收需要完成的功能);
​ -根据功能逐步细化到service层、dao层;
​ -面向接口(先定义接口再编写具体实现类)
​ 3、知识性细节问题:
​ -数据库要基本操作;
​ -myssm(spring的底层)的理解;
​ -前后端交互的方式(dispatch到相应的controller)
​ -xml文件的配置(controller、service、dao之间的配置及依赖关系)

​ 4、信息搜集方式:
​ 看视屏下面的评论

posted @ 2022-06-16 11:42  今晚da老虎  阅读(78)  评论(0)    收藏  举报