我是南城余!阿里云开发者平台专家博士证书获得者!
欢迎关注我的博客!一同成长!
一名从事运维开发的worker,记录分享学习。
专注于AI,运维开发,windows Linux 系统领域的分享!
本章节对应知识库
cookie
cookie是一种客户端会话技术,cookie由服务端产生,它是服务器存放在浏览器的一小份数据,浏览器以后每次访问该服务器的时候都会将这小份数据携带到服务器去。
session
HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象. 客户端在发送请求时,都可以使用自己的session. 这样服务端就可以通过session来记录某个客户端的状态了
三大域对象
域对象: 一些用于存储数据和传递数据的对象,传递数据不同的范围,我们称之为不同的域,不同的域对象代表不同的域,共享数据的范围也不同
- web项目中,我们一定要熟练使用的域对象分别是 请求域,会话域,应用域
- 请求域对象是HttpServletRequest ,传递数据的范围是一次请求之内及请求转发
- 会话域对象是HttpSession,传递数据的范围是一次会话之内,可以跨多个请求
- 应用域对象是ServletContext,传递数据的范围是本应用之内,可以跨多个会话
三大域存放
- 请求转发时,请求域可以传递数据
请求域内一般放本次请求业务有关的数据,如:查询到的所有的部门信息
- 同一个会话内,不用请求转发,会话域可以传递数据
会话域内一般放本次会话的客户端有关的数据,如:当前客户端登录的用户
- 同一个APP内,不同的客户端,应用域可以传递数据
应用域内一般放本程序应用有关的数据 如:Spring框架的IOC容器
过滤器
Filter,即过滤器,是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是Java Web项目中最为实用的技术之一
- Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口
- Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和HttpServletResponse对象后,会先调用Filter的doFilter方法
- Filter的doFilter方法可以控制请求是否继续,如果放行,则请求继续,如果拒绝,则请求到此为止,由过滤器本身做出响应
- Filter不仅可以对请求做出过滤,也可以在目标资源做出响应前,对响应再次进行处理
- Filter是GOF中责任链模式的典型案例
- Filter的常用应用包括但不限于: 登录权限检查,解决网站乱码,过滤敏感字符,日志记录,性能分析... ...
过滤器开发中应用的场景
- 日志的记录
- 性能的分析
- 乱码的处理
- 事务的控制
- 登录的控制
- 跨域的处理
package com.atguigu.filters; import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class LoggingFilter implements Filter { private SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 参数父转子 HttpServletRequest request =(HttpServletRequest) servletRequest; HttpServletResponse response =(HttpServletResponse) servletResponse; // 拼接日志文本 String requestURI = request.getRequestURI(); String time = dateFormat.format(new Date()); String beforeLogging =requestURI+"在"+time+"被请求了"; // 打印日志 System.out.println(beforeLogging); // 获取系统时间 long t1 = System.currentTimeMillis(); // 放行请求 filterChain.doFilter(request,response); // 获取系统时间 long t2 = System.currentTimeMillis(); // 拼接日志文本 String afterLogging =requestURI+"在"+time+"的请求耗时:"+(t2-t1)+"毫秒"; // 打印日志 System.out.println(afterLogging); } }
过滤器生命周期
阶段 |
对应方法 |
执行时机 |
执行次数 |
创建对象 |
构造器 |
web应用启动时 |
1 |
初始化方法 |
void init(FilterConfig filterConfig) |
构造完毕 |
1 |
过滤请求 |
void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) |
每次请求 |
多次 |
销毁 |
default void destroy() |
web应用关闭时 |
1次 |
监听器
监听器:专门用于对域对象对象身上发生的事件或状态改变进行监听和相应处理的对象
- 监听器是GOF设计模式中,观察者模式的典型案例
- 观察者模式: 当被观察的对象发生某些改变时, 观察者自动采取对应的行动的一种设计模式
- 监听器使用的感受类似JS中的事件,被观察的对象发生某些情况时,自动触发代码的执行
- 监听器并不监听web项目中的所有组件,仅仅是对三大域对象做相关的事件监听
监听器的分类
- web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类
- 按监听的对象划分
- application域监听器 ServletContextListener ServletContextAttributeListener
- session域监听器 HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionActivationListener
- request域监听器 ServletRequestListener ServletRequestAttributeListener
- 按监听的事件分
- 域对象的创建和销毁监听器 ServletContextListener HttpSessionListener ServletRequestListener
- 域对象数据增删改事件监听器 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener
- 其他监听器 HttpSessionBindingListener HttpSessionActivationListener
Ajax
- AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
- AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
- AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
- AJAX 不需要任何浏览器插件,但需要用户允许 JavaScript 在浏览器上执行。
- XMLHttpRequest 只是实现 Ajax 的一种方式。
<script> function loadXMLDoc(){ var xmlhttp=new XMLHttpRequest(); // 设置回调函数处理响应结果 xmlhttp.onreadystatechange=function(){ if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } // 设置请求方式和请求的资源路径 xmlhttp.open("GET","/try/ajax/ajax_info.txt",true); // 发送请求 xmlhttp.send(); } </script>
if (xmlhttp.readyState==4 && xmlhttp.status==200)
在JavaScript中,XMLHttpRequest对象的readyState属性表示请求的状态,它可以取以下五种值:
0: 未初始化(`XMLHttpRequest` 对象已经创建,但是 `open()` 方法还未被调用)。
1: 启动(`open()` 方法已经被调用)。
2: 发送(`send()` 方法已经被调用,并且头部和状态已经可获得)。
3: 接收(下载中,`responseText` 属性已经包含部分数据)。
4: 完成(数据接收完毕,整个数据传输过程结束)。
这些状态可以帮助你在使用XMLHttpRequest对象时了解请求的进展情况。