JavaWeb - Cookie/Session&Filter/Listener&MVC

JavaWeb - Cookie/Session&Filter/Listener&MVC

1 Cookie&Session

1.1 会话技术

建立会话:

  • B/S架构中,浏览器给服务器发送第一次请求

断开会话:

  • 浏览器或服务器有一方断开

一次会话包含多次请求响应

http协议是无状态协议,同一会话中多个请求是独立的,数据无法共享

1.1.1 会话技术的目的

存储浏览器与服务器之间多次请求之间的数据

客户端会话技术:cookie

服务器端会话技术:session

1.2.1 作用概述:
  • 在一次会话中的多次请求之间共享数据
  • 将数据保存到浏览器端
1.2.2 Cookie使用相关API
//创建cookie对象,value里面只能存字符串
Cookie cookie = new Cookie(String name, String value);
//通过response对象响应cookie
reponse.addCookie(cookie)

//从cookie中获取数据
//通过request对象接收cookie数组
Cookie[] cookies = request.getCookies();
//获取cookie的名称和值
cookie.getName() & cookie.getValue()
1.2.3 Cookie的工作原理

浏览器具有存储cookie能力和在发送的请求中携带cookie的能力

基于HTTP协议:请求头cookie和响应头set-cookie

1.2.4 Cookie使用细节
  • 服务器可以发送多个cookie 通过response.addcookie(cookie)存储到浏览器

  • Cookie在浏览器保存时间

    • 默认情况下:浏览器关闭(会话结束),cookie销毁
    • 手动设置cookie存活时间 cookie.setMaxAge(int second) - 单位是秒
  • Cookie中是否可以存中文

    • tomcat8之前版本不支持中文
    • tomcat8之后版本支持中文但不允许使用分号,空格等一些特殊符号
    • 使用URLEncoder和URLDecoder来进行编解码支持所有版本
  • cookie.setMaxAge(int second)参数设置

    • 正数:指定存活时间,持久化浏览器的磁盘中,到期后自动销毁
    • 负数:默认浏览器关闭,cookie销毁
    • 零:立即销毁
  • URLEncoder.encode(传入内容, 编码方式)

  • URLDecoder.decode(value, 编码方式)

1.2.5 Cookie的特点
  • cookie存储数据都在客户端(浏览器)
  • cookie的存储数据只能是字符串
  • cookie单个大小不能超过4kb
  • cookie存储的数据不太安全

1.3 Session

1.3.1 Session概述

使用cookie的问题:

最多存储4k字符串

存储数据不安全

session的作用

在一次会话的多次请求之间共享数据,将数据保存到服务器端

1.3.2 Session的使用
  • 将数据存到session中
//1.通过request对象获取session对象
HttpSession session = request.getSession();
//2.操作session的API,存储数据
session.setAttribute("name",hvalue) 
  • 从session中获取数据
//1.通过request对象获取session对象
HttpSession session = request.getSession();
//2.操作session的API获取数据
session.getAttribute("name");
1.3.3 HttpSession 对象
  • 是一个域对象

  • API

//1.存储数据
void setAttribute(String name, Objetc value)

//2.获取数据
object getAttribute(String name)

//3.删除数据
void removeAttribute(String name)
1.3.4 session的工作原理

基于cookie实现:设置session后响应头通过set-cookie: JSESSIONID 唯一标识来区别不同的session空间

下一次请求发送时request对象会携带JSESSIONID

1.3.5 session的生命周期

何时创建:

用户第一次调用request.getSession()方法时创建

何时销毁

  • 服务器非正常关闭

  • 非活跃状态30分钟后

    • tomcat进行配置 /tomcat安装目录/conf/web.xml
  • session.invalidate() 立马销毁

作用范围

一次会话中多次请求间

每个浏览器跟服务器都是独立的会话

1.4 三大域对象总结

  • HttpServletRequest
  • ServletContext
  • HttpSession

API 基本API三大域对象相同

  • 设置数据 void setAttribute(String name, Object value)
  • 获取数据 Object getAtrribute(String name)
  • 删除数据 void removeAtrribute(String name)

生命周期

何时创建:

  • ServletContext在服务器正常启动,项目加载时创建
  • HttpSession 在用户第一次调用getSession()方法时创建
  • HttpServletRequest 在用户发送请求时创建

何时销毁:

  • ServletContext在服务器关闭或项目卸载时销毁
  • HttpSession在服务器非正常关闭/未活跃状态30分钟/自杀时销毁
  • HttpServletRequest在服务器做出响应后销毁

作用范围:

  • ServletContext整个web项目(共享数据)
  • HttpSession一次会话中,多次请求间(共享数据)
  • HttpServletRequest在一次请求中,多次转发间(共享数据)
1.4.1 小结
  • 能用小的不用大的:HttpServletRequest < HttpSession < ServletContext
  • 常用场景:
    • request:一次查询的结果(servlet转发jsp)
    • session:存放当前会话的私有数据
      • 用户登陆状态
      • 验证码
      • 购物车
    • servletcontext:若需要所有的servlet都能访问到才使用这个对象

2 Filter&Listener

2.1 Filter

2.1.1 概念

作用:当用户访问服务器资源时,过滤器将请求拦截下来。完成一些通用的操作

应用场景:登陆验证,统一编码处理,敏感字符处理

2.1.2 Filter快速使用
  • 实现Filter接口,重写init(), doFilter(), destory()方法

  • doFilter(servletRequest, servletResponse, filterChain)进行业务逻辑处理和放行处理

    • servletRequest 请求对象
    • servletResponse 响应对象
    • filterChain 过滤器链(是否放行)
  • 放行操作调用filterChain.doFilter(servletRequest, servletResponse)

  • web.xml 中配置 过滤器类全路径,并配置 url-pattern配置过滤器的拦截路径

2.1.3 Filter生命周期

创建:

服务器启动项目加载,创建filter对象,执行init方法(仅1次)

拦截生效:

当用户访问被拦截目标时,执行doFilter方法

销毁:

服务器关闭项目时,销毁filter对象,执行destory对象(仅一次)

2.1.4 Filter拦截路径设置

在web.xml中的中配置url-pattern

  • 精确匹配 访问指定目标资源
  • 目录匹配 访问指定目录下 /a/*
  • 后缀匹配 访问指定后缀名 (*.html)
  • 匹配所有 访问所有资源 /*
2.1.5 Filter过滤器链

一次请求中匹配到多个filter

过滤器链执行顺序:

  • filterA拦截,放行
  • filterB拦截,放行
  • 访问目标资源
  • filterB响应增强
  • filterA响应增强

顺序决定过滤器链的拦截顺序

2.2 Listner

2.2.1 概念

能够监听三大域对象

应用场景:

历史访问次数,统计在线人数,系统启动时初始化配置信息

2.2.2 ServletContextListener接口

API

void contextInitialized(ServletContextEvent sce) 监听servletcontext创建

void contextDestoryed(ServletContextEvent sce) 监听servletcontext销毁

实现步骤:

  • 实现ServletContextListener接口
  • 实现ServletContextListener接口中的contextInitialized和contextDestoryed方法
  • web.xml中进行配置 -

3 MVC模式及三层架构

3.1 MVC模式

概念:

MVC是软件工程中的一种软件架构模式,是一种分离业务逻辑与显示页面的设计方法

model-view-controller:

  • model - JavaBean - 处理业务逻辑,封装实体
  • view - Jsp展示数据
  • controller - servlet - 接受请求&调用模型&转发视图

目的:高内聚,低耦合

优缺点:

优点:降低耦合性,方便维护和拓展,利于分工协作

缺点:使得项目架构变得复杂

3.2 三层架构

概念

三层架构就是将整个业务应用划分为表现层,业务逻辑层,数据访问层

  • 表现层:web层,与浏览器进行数据交互(controller和view)
  • 业务逻辑层:service层,处理业务逻辑
  • 数据访问层(持久层):dao层,与数据库进行交互(记录与JavaBean实体对应)
posted @ 2020-12-05 18:03  Pengc931482  阅读(83)  评论(1)    收藏  举报