| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 网络协议 -> Java-JavaWeb—(3)Web核心-Part2 -> 正文阅读 |
|
|
[网络协议]Java-JavaWeb—(3)Web核心-Part2 |
1.会话技术1.1会话概论这里的会话,指的是web开发中的一次通话过程,当打开浏览器,访问网站地址后,会话开始,当关闭浏览器(或者到了过期时间),会话结束。 作用:需要在多次请求间实现数据共享,就可以考虑使用会话管理技术 会话管理分类:客户端会话管理技术和服务端会话管理技术。 客户端会话管理技术:把要共享的数据保存到了客户端(也就是浏览器端)。每次请求时,把会话信息带到服务器,从而实现多次请求的数据共享。 服务器会话管理技术:它本质仍是采用客户端会话管理技术,只不过保存到客户端的是一个特殊的标识,并且把要共享的数据保存到了服务端的内存对象中。每次请求时,把这个标识带到服务器端,然后使用这个标识,找到对应的内存空间,从而实现数据共享。 1.2客户端会话管理技术1.2.1Cookie介绍把要共享的数据保存到客户端。每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享! 作用:可以保护客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率! 1.2.2Cookie属性
Cookie有大小,个数限制。每个网站最多只能存20个cookie,且大小不能超过4kb。同时,所有网站的cookie总数不超过300个。 当删除Cookie时,设置maxAge值为0。当不设置maxAge时,使用的是浏览器的内存,当关闭浏览器之后,cookie将丢失。设置了此值,就会保存成缓存文件(值必须是大于0的,以秒为单位)。 1.2.3Cookie方法Cookie(String name,String value):构造方法创建对象 属性对应的set和get方法:赋值和获取值 HttpServletResponse中有方法向客户端添加Cookie:void addCookie(Cookie cookie) HttpServletRequest中有方法可以获取所有的Cookie:Cookie[] getCookies()
?1.2.4Cookie的Path细节
在ServletDemo02中添加cookie,在03,04中可以获取到相应的Cookie,而05中无法获取。 由于02中添加的时候链接在/aaa/目录下,所以该目录的页面和子目录客服获取到cookie,而和它同级或者更高级的无法获取 1.3服务端会话管理概述1.3.1HttpSession本质也是采用客户端会话管理技术。 只不过在客户端保存的是一个特使表示,而共享的数据保存到了服务器端的内存对象中 每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享 它是Servlet规范中提供的一个接口。 该对象用于提供一种通过多个页面请求或访问网站来标识用户并存储有关该用户的信息的方法。简单说它就是一个服务端会话对象,用于存储用户的会话数据。 它也是Servlet规范中四大域对象之一的会话域对象。
1.3.2HttpSession常用方法void serAttribute(String name,Object value):设置共享数据 Object getAttribute(String name):获取共享数据 void removeAttribut(String name):移除共享数据 String getId():获取唯一标识名称 void Invalidate():?让session立即失效 1.3.3HttpSession获取HttpSession实现类对象是通过HttpServletRequest对象来获取的: ? ? ? ? HttpSession get Session():获取HttpSession对象 ? ? ? ? HttpSession getSession(boolean create):获取HttpSession对象,未获取到是否自动创建
? 1.3.4HttpSession细节?浏览器上可以直接查看Cookie的值
?浏览器Cookie的禁用
禁用后,再次获取Session是,获取不到Session,就自动创建了新的对象了
?解决方式一:
解决方式二:
? 钝化和活化 ? ? ? ? 钝化:把长时间不用,但还不到过期时间的HttpSession进行序列化,写到磁盘上。 ? ? ? ? 活化:相反的状态 如何钝化: ????????第一种情况:当访问量很大时,服务器会根据getLastAccessTime来进行排序,对长时间不用,但是还没到过期时间的HttpSession进行持久化。 ????????? 第二种情况:当服务器进行重启的时候,为了保持客户HttpSession中的数据,也要对HttpSession进行持久化 注意 ????????? HttpSession的持久化由服务器来负责管理,我们不用关心。 2.JSP2.1介绍JSP全称是Java Server Page,它和Servlet一样,也是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范。JSP的本质其实就是一个Servlet。
2.2JSP的简单使用index.jsp文件,不能通过浏览器直接查看,必须要通过服务器才可以
?
|
| 隐式对象名称 | 类型 | 备注 |
|---|---|---|
| request | javax.servlet.http.HttpServletRequest | |
| response | javax.servlet.http.HttpServletResponse | |
| session | javax.servlet.http.HttpSession | Page指令可以控制开关 |
| application | javax.servlet.ServletContext | |
| page | Java.lang.Object | 当前jsp对应的servlet引用实例 |
| config | javax.servlet.ServletConfig | |
| exception | java.lang.Throwable | page指令有开关 |
| out | javax.servlet.jsp.JspWriter | 字符输出流,相当于printwriter |
| pageContext | javax.servlet.jsp.PageContext |
PageContext对象:?它是JSP独有的对象,Servlet中没有这个对象。本身也是一个域(作用范围)对象,但是它可以操作其他3个域对象中的属性。而且还可以获取其他8个隐式对象。
四大域对象:
| 域对象名称 | 范围 | 级别 | 备注 |
|---|---|---|---|
| PageContext | 页面范围 | 最小,只能在当前页面用 | 因范围太小,开发中用的很少 |
| ServletRequest | 请求范围 | 一次请求或当期请求转发用 | 当请求转发之后,再次转发时请求域丢失 |
| HttpSession | 会话范围 | 多次请求数据共享时使用 | 多次请求共享数据,但不同的客户端不能共享 |
| ServletContext | 应用范围 | 最大,整个应用都可以使用 | 尽量少用,如果对数据有修改需要做同步处理 |
MVC模型:
M:model ,通常用于封装数据,封装的是数据模型。
V:view ,通常用于展示数据。动态展示用jsp页面,静态数据展示用html。
C:controller ,通常用于处理请求和响应。一般指的是Servlet。
EL表达式,全称是Expression Language。意为表达式语言。
作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
EL表达式的语法格式非常简单,写为:${表达式内容
<%--
Created by IntelliJ IDEA.
User: 戴尔
Date: 2021/9/1
Time: 15:51
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式的学习</title>
</head>
<body>
<%--1.向域对象中添加数据--%>
<%request.setAttribute("username","zhangsan");%>
<%--2.获取表达式--%>
Java代码块:<% out.println(request.getAttribute("username"));%><br/>
JSP表达式:<%=request.getAttribute("username")%><br/>
EL表达式:${username}
</body>
</html>

<%@ page import="servlet.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: 戴尔
Date: 2021/9/1
Time: 15:59
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>表达式获取</title>
</head>
<body>
<%--1.获取基本数据类型--%>
<% pageContext.setAttribute("num",10); %>
基本数据类型:${num}<br/>
<%--2.获取自定义对象类型--%>
<%
Student stu = new Student("张三",20);
pageContext.setAttribute("stu",stu);
%>
自定义对象:${stu}<br/>
学生姓名:${stu.name}<br/>
学生年龄:${stu.age}<br/>
<%--3.获取数组类型--%>
<%
String[] arr = {"Hello","work!"};
pageContext.setAttribute("arr",arr);
%>
数组:${arr}<br/>
0号数组:${arr[0]}<br/>
1号数组:${arr[1]}<br/>
<%--4.获取List集合--%>
<%
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
pageContext.setAttribute("list",list);
%>
List集合:${list}<br/>
0元素集合:${list[0]}<br/>
<%--5.获取Map集合--%>
<%
HashMap<String,Student> map = new HashMap<>();
map.put("001",new Student("李四",20));
map.put("002",new Student("王五",23));
pageContext.setAttribute("map",map);
%>
Map集合:${map}<br/>
第一个学生对象:${map.get("001")}<br/>
第一个学生对象的姓名:${map.get("001").name}<br/>
<%--1.向域对象中添加数据--%>
</body>
</html>

EL表达式中没有空指针异常

EL表达式中没有索引越界异常

EL表达式中没有字符串拼接的效果

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
Created by IntelliJ IDEA.
User: 戴尔
Date: 2021/9/1
Time: 17:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--empty运算符:
它会判断:对象是否为null,字符串是否为空字符串,集合中元素是否是0个
--%>
<% String str = null;
String str1 = "";
List<String> slist = new ArrayList<String>();
pageContext.setAttribute("str", str);
pageContext.setAttribute("str1", str1);
pageContext.setAttribute("slist", slist);
%>
${empty str}============当对象为null返回true<br/>
${empty str1 }==========当字符串为空字符串是返回true(注意:它不会调用trim()方法)<br>
${empty slist}==========当集合中的元素是0个时,是true
<hr/>
<%--三元运算符
条件?真:假
--%>
<% request.setAttribute("gender", "female"); %>
<input type="radio" name="gender" value="male" ${gender eq "male"?"checked":""} >男
<input type="radio" name="gender" value="female" ${gender eq "female"?"checked":""}>女
</body>
</html>
?
<%--
Created by IntelliJ IDEA.
User: 戴尔
Date: 2021/9/1
Time: 17:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式细节</title>
</head>
<body>
<%--获取四大域对象中的数据--%>
<%
pageContext.setAttribute("username1","zhangsan");
request.setAttribute("username2","zhangsan");
session.setAttribute("username3","zhangsan");
application.setAttribute("username4","zhangsan");
%>
${username1}
${username2}
${username3}
${username4}<br/>
<%--获取JSP中其他八个隐式对象--%>
<%=request.getContextPath()%>
${pageContext.request.contextPath}
</body>
</html>

| EL中的隐式对象 | 类型 | 对应JSP隐式对象 | 备注 |
|---|---|---|---|
| PageContext | Javax.serlvet.jsp.PageContext | PageContext | 完全一样 |
| ApplicationScope | Java.util.Map | 没有 | 应用层范围 |
| SessionScope | Java.util.Map | 没有 | 会话范围 |
| RequestScope | Java.util.Map | 没有 | 请求范围 |
| PageScope | Java.util.Map | 没有 | 页面层范围 |
| Header | Java.util.Map | 没有 | 请求消息头key,值是value(一个) |
| HeaderValues | Java.util.Map | 没有 | 请求消息头key,值是数组(一个头多个值) |
| Param | Java.util.Map | 没有 | 请求参数key,值是value(一个) |
| ParamValues | Java.util.Map | 没有 | 请求参数key,值是数组(一个名称多个值) |
| InitParam | Java.util.Map | 没有 | 全局参数,key是参数名称,value是参数值 |
| Cookie | Java.util.Map | 没有 | Key是cookie的名称,value是cookie对象 |
<%--
Created by IntelliJ IDEA.
User: 戴尔
Date: 2021/9/1
Time: 17:27
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL表达式11个隐式对象</title>
</head>
<body>
<%--pageContext对象 可以获取其他三个域对象和JSP中八个隐式对象--%>
${pageContext.request.contextPath}<br/>
<%--applicationScope seccionScope requestScope pageScope 操作四大域对象中的数据 --%>
<% request.setAttribute("username","zhangsan"); %>
${username}<br/>
${requestScope.username}<br/>
<%--header headerValues 获取请求头数据 --%>
${header["connection"]}<br/>
${headerValues["connection"][0]}<br/>
<%--param paramValues 获取请求参数数据 --%>
${param.username}<br/>
${paramValues.hoppy[0]}<br/>
${paramValues.hoppy[1]}<br/>
<%--initParam 获取全局参数配置 --%>
${initParam["pname"]}<br/>
<%--cookie 获取cookie信息 --%>
${cookie}<br/><%--获取map集合 --%>
${cookie.JSESSIONID} <br/><%--获取map集合中的第二个元素 --%>
${cookie.JSESSIONID.name}<br/><%--获取cookie对象的名称 --%>
${cookie.JSESSIONID.value}<br/><%--获取cookie对象的数据值 --%>
</body>
</html>

JSTL的全称是:JSP Standard Tag Libary。它是JSP中标准的标签库。它是由Apache实现的。
这个也提供给开发人员一个标准通用的标签库。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,江都程序的维护难度。
| 组成 | 作用 | 说明 |
|---|---|---|
| Core | 核心标签库。 | 通用逻辑处理 |
| Fmt | 国际化有关。 | 需要不同地域显示不同语言时使用 |
| Functions | EL函数 | EL表达式可以使用的方法 |
| SQL | 操作数据库。 | 不用 |
| XML | 操作XML。 | 不用 |
| 标签名称 | 功能分类 | 分类 | 作用 |
|---|---|---|---|
<c:if> | 流程控制 | 核心标签库 | 用于判断 |
<c:choose> ,<c:when>,<c:otherwise> | 流程控制 | 核心标签库 | 用于多个条件判断 |
<c:foreache> | 迭代操作 | 核心标签库 | 用于循环遍历 |
过滤器——Filter,它是JavaWeb三大组件之一,属于接口。另外两个是Servlet和Listener。
它可以对web应用中的所有资源进行拦截,并且在拦截之后进行一些特殊的操作。
常见应用场景:URL级别的权限控制;过滤敏感词汇;中文乱码问题等等。
在程序中访问服务器资源是,当一个请求到来,服务器首先判断是否有过滤器与请求资源相关联,如果有,过滤器可以将请求拦截下来,完成一些特定的功能,再由过滤器决定是否交给请求资源。如果没有则像之前那样直接请求资源了。响应也是类似!
过滤器一般用于完成通用的曹祖,例如:登陆验证、统一编码处理、敏感字符过滤等等~~
void init(FilterConfig config):初始化方法
void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):对请求资源和响应资源过滤
void destroy():销毁方法
配置方式:注解,配置文件
FilterChain是一个接口,代表过滤器链对象。方法void doFilter(ServletRequest request,ServletResponse response),可以用来放行的操作。
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class FilterDemo01 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterDemo01执行了....");
//处理乱码
servletResponse.setContentType("text/html;charset=UTF-8");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
}
package servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("servletDemo01执行了...");
//resp.setContentType("text/html;charset=UTF-8");
resp.getWriter().write("servletDemo01执行了....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req,resp);
}
}


单个:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置过滤器-->
<filter>
<filter-name>filterDemo01</filter-name>
<filter-class>filter.FilterDemo01</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDemo01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
多个:
先后顺序为filter-mapping的先后顺序
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置过滤器-->
<filter>
<filter-name>filterDemo01</filter-name>
<filter-class>filter.FilterDemo01</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDemo01</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>filterDemo02</filter-name>
<filter-class>filter.FilterDemo02</filter-class>
</filter>
<filter-mapping>
<filter-name>filterDemo02</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

创建:当应用加载时实例化对象并致信发init初始化
服务:对象提供服务的过程,执行doFilter方法
销毁:当应用卸载时或服务器停止时对象销毁。执行dostroy方法
package filter;
import javax.servlet.*;
import java.io.IOException;
//@WebFilter("/*")
public class FilterDemo03 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("对象初始化成功.....");
}
/*
提供服务
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterDemo03执行了....");
//处理乱码
servletResponse.setContentType("text/html;charset=UTF-8");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
/*
对象销毁
*/
@Override
public void destroy() {
System.out.println("对象销毁了....");
}
}


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置过滤器-->
<filter>
<filter-name>filterDemo04</filter-name>
<filter-class>filter.FilterDemo04</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>filterDemo04</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
package filter;
import javax.servlet.*;
import java.io.IOException;
/*
FilterConfig过滤器配置对象的使用
*/
//@WebFilter("/*")
public class FilterDemo04 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("对象初始化成功.....");
//获取过滤器名称
String filterName = filterConfig.getFilterName();
System.out.println(filterName);
//根据name获取value
String username = filterConfig.getInitParameter("username");
System.out.println(username);
}
/*
提供服务
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("filterDemo04执行了....");
//处理乱码
servletResponse.setContentType("text/html;charset=UTF-8");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
/*
对象销毁
*/
@Override
public void destroy() {
System.out.println("对象销毁了....");
}
}
Filter过滤器默认拦截的是请求,但是在实际开发中,我们还有请求转发和请求包含,以及服务器触发调用的全局错误页面。默认情况下过滤器是不参与过滤,要想使用,就需要我们配置。
<!--配置过滤器-->
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>com.itheima.web.filter.FilterDemo1</filter-class>
<!--配置开启异步支持,当dispatcher配置ASYNC时,需要配置此行-->
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/ServletDemo1</url-pattern>
<!--过滤请求:默认值。-->
<dispatcher>REQUEST</dispatcher>
<!--过滤全局错误页面:当由服务器调用全局错误页面时,过滤器工作-->
<dispatcher>ERROR</dispatcher>
<!--过滤请求转发:当请求转发时,过滤器工作。-->
<dispatcher>FORWARD</dispatcher>
<!--过滤请求包含:当请求包含时,过滤器工作。它只能过滤动态包含,jsp的include指令是静态包含-->
<dispatcher>INCLUDE</dispatcher>
<!--过滤异步类型,它要求我们在filter标签中配置开启异步支持-->
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
观察者模式通常由以下三部分组成:
? 事件源:触发事件的对象。
? 事件:触发的动作,里面封装了事件源。
? 监听器:当事件源触发事件时,要做的事情。一般是一个接口,由使用者来实现。
在程序中,我偶们可以对:对象的 创建。域对象中属性的变化。会话相关内容进行监听。
Servlet规范中共计8个监听器,监听器都是以接口形式提供,具体功能需要我们创建接口类才能完成
ServletContextListener:用于监听ServletContext对象的创建和销毁
方法:
? ? ? ? void? contextInitialized(ServletComnEvent sce):对象创建时执行该方法
? ? ? ? void contextDestroyed(ServletContextEvent sce):对象销毁时执行方法
ServletContextEvent代表事件对象,事件对象中封装了事件源,也就是ServletContext
HttpSessionListener:用于监听HttpSession对象的创建和销毁
方法:
? ? ? ? void sessionCreated(HttpSessionEvent se):对象创建时执行方法
? ? ? ? void sessionDestroyed(HttpsessionEvent se):对象销毁时执行该方法
HttpSessionEvent代表事件对象,事件对象中封装了事件源,也就是HttpSession,真正的事件指的是创建或销毁HTTP Session对象的操作。
ServletRequestListener:用于监听ServletRequest对象的创建和销毁
方法:
? ? ? ? void requesInitialized(ServletRequestEvent sre):对象创建时执行该方法
? ? ? ? void requestDestroved(ServletRequestEvent sre):对象销毁时执行该方法
ServletRequestEvent代表事件对象,事件对象中封装了事件源,也就是ServletRequest,真正的事件指的是创建或销毁ServletRequest对象的操作
ServletContextAttributeListener:用于监听ServletContext应用域中属性的变化
方法:
? ? ? ? void attributeAdded(ServletContextAttributeEvent scae):域中添加属性时执行该方法
? ? ? ? void attributeRemoved(ServletContextAttributeEvent scae):域中移除属性时执行该方法
? ? ? ? void attributeReplaced(ServletContextAttributeEvent scae):域中替换属性时执行该方法
ServletContextAttributeEvent代表事件对象,事件对象中封装了事件源,也就是ServletContext,真正的事件指的是添加、移除、替换应用域中属性的操作
HttpSessionAttributeListener:用于监听HttpSession会话域中属性的变化
方法:
? ? ? ? void attributeAdded(HttpSessionBindingEvent se):域中添加属性时执行该方法
? ? ? ? void attributeRemoved(HttpSessionBindingEvent se):域中移除属性时执行该方法
? ? ? ? void arrtibuteReplaced(HttpSessionBindingEvent se):域中替换属性时执行该方法
HttpSessionBindingEvent代表事件对象,事件对象中封装了事件源,也就是HttpSession,真正的事件指的是添加、移除、替换会话域中属性的操作
ServletRequestAttributeListener:用于监听SevletRequest请求与中属性的变化
方法:
? ? ? ? void attributeAdded(ServletRequestAttributeEvent srae):域中添加属性时执行该方法
? ? ? ? void attributeRemoved(ServletRequestAttributeEvent srae):域中移除属性时执行该方法
? ? ? ? void attributeReplaced(ServletRequestAttributeEvent srae):域中替换属性时执行该方法
ServletRequestAttributeEvent代表事件对象,事件对象中封装了事件源,也就是ServletRequest,真正的事件指的是添加、移除、替换会话域中属性的操作
HttpSessionBindingListener:用于感知对象和会话域绑定的监听器
方法:
? ? ? ? void valueBound(HttpSessionBindingEvent event):数据添加到会话域中(绑定)时执行该方法
? ? ? ? void valueUnbound(HttpSessionBindingEvent event):数据从会话域中移除(解绑)时执行该方法
HttpSessionBindingEvent代表事件对象,事件对象中封装了事件源,也就是HttpSession,真正的事件指的是添加、移除会话域中属性的操作
HttpSessionActivationListener:用于感知会话域中对象钝化和活化的监听器
方法:
? ? ? ? void sessionWillPassivate(HttpSessionEvent se):会话域中数据钝化时执行该方法
? ? ? ? void sessionDidActivate(HttpSessionEvent se):会话域中数据活化时执行该方法
HttpSessionEvent代表事件对象,事件对象中封装了事件源,也就是HttpSession,真正的事件指的是会话域中数据钝化、活化的操作
package listener;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
/*
ServletContext对象的创建和销毁的监听器
*/
@WebListener
public class ServletContextListenerDemo implements ServletContextListener {
//servletContext对象创建的时候执行此方法
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听到了对象的创建...");
//获取对象
ServletContext servletContext = sce.getServletContext();
System.out.println(servletContext);
}
//servletContext对象销毁的时候执行此方法
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听到了对象的销毁...");
}
}
---------------------------------------------------------------------------------------------------------------------------------
内容有部分存在书籍、课堂、网络记录,如有雷同纯属巧合
?
|
|
| 网络协议 最新文章 |
| 使用Easyswoole 搭建简单的Websoket服务 |
| 常见的数据通信方式有哪些? |
| Openssl 1024bit RSA算法---公私钥获取和处 |
| HTTPS协议的密钥交换流程 |
| 《小白WEB安全入门》03. 漏洞篇 |
| HttpRunner4.x 安装与使用 |
| 2021-07-04 |
| 手写RPC学习笔记 |
| K8S高可用版本部署 |
| mySQL计算IP地址范围 |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/21 15:23:23- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |