欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解MVC设计模式与三层架构,以及会话技术的关联

最编程 2024-02-06 13:41:38
...

1. MVC模式和三层架构

MVC 是一种分层开发的模式,其中:

  • M:Model,业务模型,处理业务
  • V:View,视图,界面展示
  • C:Controller,控制器,处理请求,调用模型和视图

三层架构是将项目分成了三个层面,分别是 表现层业务逻辑层数据访问层

image.png

  • 数据访问层:对数据库的CRUD基本操作
  • 业务逻辑层:对业务逻辑进行封装,组合数据访问层层中基本功能,形成复杂的业务逻辑功能。例如 注册业务功能 ,我们会先调用 数据访问层selectByName() 方法判断该用户名是否存在,如果不存在再调用 数据访问层insert() 方法进行数据的添加操作
  • 表现层:接收请求,封装数据,调用业务逻辑层,响应数据

而整个流程是,浏览器发送请求,表现层的Servlet接收请求并调用业务逻辑层的方法进行业务逻辑处理,而业务逻辑层方法调用数据访问层方法进行数据的操作,依次返回到serlvet,然后servlet将数据交由 JSP 进行展示。

MVC和三层架构的关系

MVC 模式 是一个大的概念,而 三层架构 是对 MVC 模式 实现架构的思想。 image.png

MVC 模式 中的 C(控制器)和 V(视图)就是 三层架构 中的表现层,而 MVC 模式 中的 M(模型)就是 三层架构 中的 业务逻辑层 和 数据访问层。

2. 会话技术

2.1 会话跟踪技术的概述

会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

会话跟踪:一种维护浏览器状态的方法。服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。

注意:

  • HTTP协议是无状态的,靠HTTP协议是无法实现会话跟踪
  • 想要实现会话跟踪,就需要用到Cookie和Session

2.2 Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。

  • 发送Cookie:

    • 创建Cookie对象,并设置值:Cookie cookie = new Cookie("key","value");
    • 发送Cookie到客户端使用的是Reponse对象:response.addCookie(cookie);
  • 获取Cookie:

    • 使用Request对象获取Cookie数组:Cookie[] cookies = request.getCookies();
    • 遍历数组
    • 获取数组中每个Cookie对象的值:cookie.getName()和cookie.getValue()

Cookie的实现原理是基于HTTP协议的,其中涉及到HTTP协议中的两个头信息:

  • 响应头:set-cookie
  • 请求头: cookie

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁。
Cookie的存活时间存储中文:

  • 存活时间,需要掌握setMaxAage()API的使用
  • 存储中文,需要掌握URL编码和解码的使用

2.3 Session

image.pngSession:服务端会话跟踪技术:将数据保存到服务端。
Session实现的是一次会话中的多次请求之间的数据共享

  • Session是存储在服务端而Cookie是存储在客户端
  • 存储在客户端的数据容易被窃取和截获,存在很多不安全的因素
  • 存储在服务端的数据相比于客户端来说就更安全

Session的基本使用:

  • Session的获取

    HttpSession session = request.getSession();
    
  • Session常用方法的使用

    void setAttribute(String name, Object o)
    Object getAttribute(String name)
    

    注意: Session中可以存储的是一个Object类型的数据,也就是说Session中可以存储任意数据类型。

Session是基于Cookie来实现的 image.png

Session的钝化和活化,需要我们注意的是:

  • session数据存储在服务端,服务器重启后,session数据会被保存
  • 浏览器被关闭启动后,重新建立的连接就已经是一个全新的会话,获取的session数据也是一个新的对象
  • session的数据要想共享,浏览器不能关闭,所以session数据不能长期保存数据
  • cookie是存储在客户端,是可以长期保存

Cookie和Session小结

  • Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的。

  • 区别:

    • 存储位置:Cookie 是将数据存储在客户端,Session 将数据存储在服务端
    • 安全性:Cookie不安全,Session安全
    • 数据大小:Cookie最大3KB,Session无大小限制
    • 存储时间:Cookie可以通过setMaxAge()长期存储,Session默认30分钟
    • 服务器性能:Cookie不占服务器资源,Session占用服务器资源
  • 应用场景:

    • 购物车:使用Cookie来存储
    • 以登录用户的名称展示:使用Session来存储
    • 记住我功能:使用Cookie来存储
    • 验证码:使用session来存储
  • 结论

    • Cookie是用来保证用户在未登录情况下的身份识别
    • Session是用来保存用户登录后的数据

补充:

域对象:

JavaWeb中有四大域对象,分别是:

  • page:当前页面有效
  • request:当前请求有效
  • session:当前会话有效
  • application:当前应用有效

el 表达式获取数据,会依次从这4个域中寻找,直到找到为止。而这四个域对象的作用范围如下图所示。
例如: ${brands},el 表达式获取数据,会先从page域对象中获取数据,如果没有再到 requet 域对象中获取数据,如果再没有再到 session 域对象中获取,如果还没有才会到 application 中获取数据。 image.png

推荐阅读