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 Cookie
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中的
- 精确匹配 访问指定目标资源
- 目录匹配 访问指定目录下 /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实体对应)

浙公网安备 33010602011771号