JavaWeb的杂七杂八②

147 阅读4分钟

三层架构

三层架构划分

  • 表述层:负责处理浏览器请求、返回响应、页面调度
  • 业务逻辑层:负责处理业务逻辑,根据业务逻辑把持久化层从数据库查询出来的数据进行运算、组装,封装好后返回给表述层,也可以根据业务功能的需要调用持久化层把数据保存到数据库、修改数据库中的数据、删除数据库中的数据
  • 持久化层:根据上一层的调用对数据库中的数据执行增删改查的操作

image.png

image.png

模型对整个项目中三层架构的每一层都提供支持,具体体现是使用模型对象封装业务功能数据。

Java实体类有很多不同名称:

  • POJO:Plain old Java Object,传统的普通的Java对象
  • entity:实体类
  • bean或Java bean
  • domain:领域模型

模型开发的要求

ORM

ORM:Object Relative Mapping对象关系映射

对象:Java对象

关系:关系型数据库

映射:Java对象和数据库表之间的对应关系

Java类数据库表
属性字段/列
对象记录/行
属性按照驼峰式命名字段名各个单词之间用下划线分开

实体类的要求

  • 必须有一个无参构造器

    将来使用框架后,大量的对象都是框架通过反射来创建的。

    Class clazz = Class.forName("全类名");

    clazz.newInstance();

  • 通过getXxx()、setXxx()方法定义属性:getXxx()或setXxx()方法去掉get或set后,Xxx把首字母小写,得到的xxx就是属性名。

image.png

image.png

DAO概念

DAO:Data Access Object数据访问对象

DAL:Data Access Layer数据访问层

image.png

image.png

image.png

image.png

注册逻辑

image.png

前后端工程师对接方式

  • 服务器端渲染:前端工程师把前端页面一整套做好交给后端工程师
  • 前后端分离:开会商量JSON格式,然后分头开发。在后端程序尚不可用时,前端工程师会使用Mock.js生成假数据使用,在后端程序可用后再连接实际后端程序获取真实数据。

业务逻辑

登录

image.png

注册

image.png

过滤

image.png

Cookie介绍

本质

  • 在浏览器端临时存储数据
  • 键值对
  • 键和值都是字符串类型
  • 数据量很小

Cookie时效性

  • 会话级Cookie

    • 服务器端并没有明确指定Cookie的存在时间
    • 在浏览器端,Cookie数据存在于内存中
    • 只要浏览器还开着,Cookie数据就一直都在
    • 浏览器关闭,内存中的Cookie数据就会被释放
  • 持久化Cookie

    • 服务器端明确设置了Cookie的存在时间

    • 在浏览器端,Cookie数据会被保存到硬盘上

    • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响

    • 持久化Cookie到达了预设的时间会被释放

image.png

session

前提:浏览器正常访问服务器

  • 服务器端没调用request.getSession()方法:什么都不会发生

  • 服务器端调用了request.getSession()方法

    • 服务器端检查当前请求中是否携带了JSESSIONID的Cookie

      • 有:根据JSESSIONID在服务器端查找对应的HttpSession对象

        • 能找到:将找到的HttpSession对象作为request.getSession()方法的返回值返回
        • 找不到:服务器端新建一个HttpSession对象作为request.getSession()方法的返回值返回
      • 无:服务器端新建一个HttpSession对象作为request.getSession()方法的返回值返回

image.png

image.png

image.png

拦截器

Filter生命周期

和Servlet生命周期类比,Filter生命周期的关键区别是:在Web应用启动时创建对象

生命周期阶段执行时机执行次数
创建对象Web应用启动时一次
初始化创建对象后一次
拦截请求接收到匹配的请求多次
销毁Web应用卸载前一次

代码

  • 精准拦截
<!-- 配置Filter要拦截的目标资源 -->
<filter-mapping>
    <!-- 指定这个mapping对应的Filter名称 -->
    <filter-name>Target01Filter</filter-name>

    <!-- 通过请求地址模式来设置要拦截的资源 -->
    <url-pattern>/Target01Servlet</url-pattern>
</filter-mapping>
  • 模糊拦截
<filter-mapping>
    <filter-name>Target02Filter</filter-name>

    <!-- 模糊匹配:前杠后星 -->
    <!--
        /user/Target02Servlet
        /user/Target03Servlet
        /user/Target04Servlet
    -->
    <url-pattern>/user/*</url-pattern>
</filter-mapping>
<filter>
    <filter-name>Target04Filter</filter-name>
    <filter-class>com.atguigu.filter.filter.Target04Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>Target04Filter</filter-name>
    <url-pattern>*.png</url-pattern>
</filter-mapping>

不允许前杠后缀,星号在中间!!!!

事务

并发问题

并发问题问题描述
脏读当前事务读取了其他事务尚未提交的修改 如果那个事务回滚,那么当前事务读取到的修改就是错误的数据
不可重复读当前事务读取同一个数据,第一次和第二次不一致
幻读当前事务在执行过程中,数据库表增减或减少了一些记录,感觉像是出现了幻觉

隔离级别

隔离级别描述能解决的并发问题
读未提交允许当前事务读取其他事务尚未提交的修改啥问题也解决不了
读已提交允许当前事务读取其他事务已经提交的修改脏读
可重复读当前事务执行时锁定当前记录,不允许其他事务操作脏读、不可重复读
串行化当前事务执行时锁定当前表,不允许其他事务操作脏读、不可重复读、幻读