商城项目制作笔记

POJO

  • pojo指简单的Java对象, 是实体类entity和值对象VO 还有数据传输对象DTO的统称

  • Entity实体类, 通常实体类的属性和表的字段是一致的

  • DTO 数据传输对象, 当客户端给服务器传输参数时, 参数数量可能和实体类的数量不一致,会比实体类的数量要少,比如实体类中有10个属性, 客户端只传递了3个, 这样用实体类接收的话会有7个属性值为null, 使用DTO的好处是所有属性都有值, 只要发现了null则说明出错了 .

  • VO ValueObject值对象, 当从数据库里面查询数据时,有时查询字段数量会比实体类中的属性数量要少, 这样实体类中也会存在大量字段值为null,而且这些null也会从服务器响应给客户端,这样这些null值也会占用流量, VO的作用是查询几个字段在VO里面有存在几个属性, 这样就能避免网络传输时传递null.

  • 总结: 之前接收客户端传递过来数据时使用entity,接收从数据库查询回来的数据使用的也是entity, 以后 接收客户端传递过来的数据使用DTO, 接收从数据库中查询回来的数据使用VO

商城项目制作笔记_第1张图片

会话管理

  • 客户端和服务器之间进行数据交互遵循的是HTTP协议,此协议属于无状态协议即(一次请求对应一次响应,响应后断开连接)服务器无法跟踪客户端的请求,通过Cookie技术服务器可以给客户端添加一个凭证(类似于奶茶店的记杯数卡)
  • 通过会话管理技术可以保存客户端的数据,而客户端保存的是用户的数据.
  • Cookie数据保存在客户端
    • 保存时间:数据默认保存在浏览器内存中,当浏览器关闭时数据会清除,可以设置任意保存时间,设置完自定义的时间后,数据会保存到磁盘中,时间到了之后会从磁盘中清除.
    • 保存类型:只能保存字符串类型的数据
    • 保存数据量:Cookie每次发请求时都会带上Cookie一起发请求,是存在于请求头中的数据,所以数据量只能保存几k的数据
    • 应用场景:记住用户名和密码(要求保存时长较久)
  • Session:数据保存在服务器
    • 保存时间:数据保存在服务器的内存中,保存时长是半个小时,时间可以修改但不建议修改.(因为服务器内存资源比较紧张,所有用户的数据都保存到同一个服务器内存压力大)
    • 保存类型:可以保存任意对象类型的数据
    • 保存数据量:大小没有限制,但是不建议保存太大量的数据(因为服务器内存资源比较紧张)
    • 应用场景:记录登录状态

通过Cookie实现记住用户名和密码功能

  • 在登录成功时把用户名和密码通过Cookie保存 并发送给客户端
  • 在login.html页面 从cookie里面获取保存的用户名和密码,并显示到页面中
 //从Cookie中得到用户名和密码'username=admin; password=123456'
let arr = document.cookie.split(";");
//遍历cookie数组
 let count = 0;
 for (let cookie of arr) {
     //通过=再次拆分出key和value   username=admin
     let cookieArr = cookie.split("=");
     let key = cookieArr[0].trim();
     let value = cookieArr[1];
     //判断key是用户名 还是密码
     if (key=="username"){
         //created方法是Vue对象初始化过程中调用的方法
         //在Vue对象初始化完成之前不能通过v.的方式访问Vue对象
         //如果在初始化完成之前访问Vue对象可以通过this的方式访问
         //this代表的就是当前初始化过程中的Vue对象
         this.user.username = value;
         count++;
     }else if (key=="password"){
         this.user.password = value;
         count++
     }
 }
 //当count值等于2时说明之前记住了用户名和密码
 //如果值不是2 是1 或是0  则不需要打钩
 this.user.rem = count==2;

过滤器Filter

  • 使用过滤器 可以让客户端在请求到资源之前或请求资源之后 经过过滤器, 这样可以把请求多个资源时执行的相同的代码,写在过滤器里面, 这样可以起到代码重用的作用,从而提高开发效率.
  • 如何使用过滤器?
    • 创建过滤器类文件
    • 在Filter类里面添加以下代码
package cn.tedu.coolshark.filter;

import cn.tedu.coolshark.pojo.vo.UserVO;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//在urlPartterns里面配置需要当前过滤器处理的资源路径
@WebFilter(filterName = "MyFilter",urlPatterns = {"/admin.html",
        "/insertProduct.html","/insertBanner.html"})
public class MyFilter implements Filter {
    //过滤器初始化方法
    public void init(FilterConfig config) throws ServletException {
    }
    //过滤器销毁时执行的方法
    public void destroy() {
    }

    //在请求资源之前或之后会进入到此方法
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        //判断是否登录
        HttpServletRequest rt = (HttpServletRequest) request;
        HttpServletResponse re = (HttpServletResponse) response;
        //得到会话对象
        HttpSession session = rt.getSession();
        //从会话对象中得到登录的用户对象
        UserVO user = (UserVO) session.getAttribute("user");
        if (user!=null){//代表登录过 允许放行
            chain.doFilter(request, response);//放行
        }else{//没有登录 跳转到登录页面
            re.sendRedirect("/login.html");//重定向到登录页面
        }
    }
}
  • 在XXXXApplication.java类文件中添加@ServletComponentScan注解
  • 过滤器urlPatterns配置方式
    • 精确匹配: /admin.html /insertBanner.html
    • 后缀匹配: *.jpg *.html *.xxxx
    • 路径匹配: /product/* /user/*
    • 全部匹配: /* (匹配网站中所有资源)

你可能感兴趣的:(数据库)