文章目录标题
1 过滤器Filter
1.1 概念
⽣活中的过滤器:净⽔器,空⽓净化器,⼟匪
web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成⼀
些特殊的功能。
Servlet规范:
三大核心: Servlet Filter Listener
过滤器: 符合条件放行, 不符合条件拦截
过滤器可以有多个
进入资源, 按正序访问; 返回响应按倒序返回
过滤的资源可以自定义
过滤器的作⽤:
⼀般⽤于完成通⽤的操作。如:登录验证、统⼀编码处理、敏感字符过滤...
1. 2 过滤器的使用步骤
1.实现接口 Filter
2.实现方法 init destroy doFilter
3.注册 web.xml
doFilter(request, response, chain)
FilterChain: 过滤器链, 执行顺序取决于filter-mapping顺序
// 放行 - 递归
chain.doFilter(request, response);
Servlet[url-pattern]: 通过这个路径来访问这个Servlet资源
Filter[url-pattern]: 访问哪些资源时, 需要执行这个过滤器
@WebFilter("/*")//访问所有资源之前,都会执⾏该过滤器
public class FilterDemo1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException,
ServletException {
System.out.println("filterDemo1被执⾏了....");
//放⾏
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}}
1.3 过滤器细节
1.3.1 web.xml配置
<filter>
<filter-name>demo1</filter-name>
<filter-class>com.zzxx.web.filter.FilterDemo1</filter-class>
</filter> <filter-mapping>
<filter-name>demo1</filter-name>
<!-- 拦截路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
1.3.2 过滤器执⾏流程
1. 执⾏过滤器
2. 执⾏放⾏后的资源
3. 回来执⾏过滤器放⾏代码下边的代码
1.3.3 过滤器⽣命周期⽅法
-
init:在服务器启动后,会创建Filter对象,然后调⽤init⽅法。只执⾏⼀次。⽤于加载资源
-
doFilter:每⼀次请求被拦截资源时,会执⾏。执⾏多次
-
destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执⾏destroy⽅法。只执⾏⼀次。⽤于释放资源
Filter对象的⽣命周期: Filter何时创建:服务器启动时就创建该filter对象; Filter何时销毁:服务器正常关闭时filter销毁。
FilterAPI详解:
1.init(FilterConfig filterConfig)
其中参数 filterConfig 代表该 Filter 对象的配置信息的对象,内部封装是该 filter 的配置信息。
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter1创建...");
String filterName = filterConfig.getFilterName();
ServletContext servletContext = filterConfig.getServletContext();
String driver = filterConfig.getInitParameter("driver");
}
- doFilter(ServletRequest, ServletResponse, FilterChain)
其中的参数:
ServletRequest/ServletResponse:每次在执⾏doFilter⽅法时web容器负责创建⼀个request和⼀个response对象作为doFilter的参数传递进来。该request和response就是在访问⽬标资源的service⽅法时的request和response。
FilterChain:过滤器链对象,通过该对象的doFilter⽅法可以放⾏该请求。
1.3.4 过滤器配置详解
1. 拦截路径配置
1. 具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执⾏
2. 拦截⽬录:/user/* 访问/user下的所有资源时,过滤器都会被执⾏
3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执⾏
4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执⾏
- 拦截⽅式配置:资源被访问的⽅式
注解配置:设置dispatcherTypes属性
REQUEST:默认值。浏览器直接请求资源
FORWARD:转发访问资源
INCLUDE:包含访问资源
ERROR:错误跳转资源
ASYNC:异步访问资源
web.xml配置
设置标签即可
1.3.5 过滤器链
执⾏顺序:如果有两个过滤器:过滤器1和过滤器2
过滤器1
过滤器2
资源执⾏
过滤器2
过滤器1
过滤器先后顺序问题
注解配置:按照类名的字符串⽐较规则⽐较,值⼩的先执⾏
如: AFilter 和 BFilter,AFilter就先执⾏了。
web.xml配置: <filter-mapping>谁定义在上边,谁先执⾏
1.4 总结Filter的作⽤
1. 公共代码的提取
2. 可以对request和response中的⽅法进⾏增强(装饰者模式/动态代理)
3. 进⾏权限控制
2 监听器Listener
2.1 概念
概念:web的三⼤组件之⼀,监听某个对象的的状态变化的组件
事件监听机制:
事件:⼀件事情
事件源 :事件发⽣的地⽅,被监听的对象【三个域对象request、session、
servletContext】
监听器 :⼀个对象,事件源对象的状态的变化都会触发监听器
注册监听:将事件、事件源、监听器绑定在⼀起。 当事件源上发⽣某个事件后,执⾏监听器代码
响应⾏为:监听器监听到事件源的状态变化时所涉及的功能代码,也称监听器代码
2.2 监听器种类
第⼀维度:按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域
第⼆维度:监听的内容分:监听域对象的创建与销毁的、监听域对象的属性变化的
2.3 监听三⼤域对象的创建与销毁的监听器
1. 监听ServletContext对象的创建与销毁的监听器:ServletContextListener
1. ServletContext的⽣命周期
何时创建:服务器启动创建
何时销毁:服务器关闭销毁
2. 监听器的编写步骤
1. 编写⼀个监听器类去实现监听器接⼝
2. 覆盖监听器的⽅法
3. 需要在web.xml中进⾏配置 --- 注册
3. 监听的⽅法
4. 配置⽂件 – web.xml
<!-- 监听ServletContext对象创建与销毁的监听器 -->
<listener>
<listenerclass>com.zzxx.listener.create.MyServletContextListener</listenerclass>
</listener>
5. ServletContextListener监听器的主要作⽤
1. 初始化的⼯作:初始化对象、初始化数据 ---- 加载数据库驱动、连接池的初始化
2. 加载⼀些初始化的配置⽂件:例如spring的配置⽂件
3. 任务调度:例如定时器,Timer/TimerTask
2.4 监听三⼤域对象内容改变的监听器
域对象的通⽤的⽅法:
1. setAttribute(name, value)
触发添加属性的监听器的⽅法
触发修改属性的监听器的⽅法
2. getAttribute(name)
3. removeAttribute(name)
触发删除属性的监听器的⽅法
2.5 与session中绑定的对象相关的监听器(对象感知监听器)
1. 即将要被绑定到session中的对象有⼏种状态
绑定状态:就⼀个对象被放到session域中
解绑状态:就是这个对象从session域中移除了
钝化状态:是将session内存中的对象持久化(序列化)到磁盘
活化状态:就是将磁盘上的对象再次恢复到session内存中
⾯试题:当⽤户很多时,怎样对服务器进⾏优化?
2. 绑定与解绑的监听器:HttpSessionBindingListener
](https://img-blog.csdnimg.cn/1e137020cb6a4d6b8860e9edc66f6271.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5aSpIOmYsyDlnKgg57q_4oKs,size_20,color_FFFFFF,t_70,g_se,x_16)
<Context>
<!-- maxIdleSwap:session中的对象多⻓时间不使⽤就钝化 -->
<!-- directory:钝化后的对象的⽂件写到磁盘的哪个⽬录下,配置钝化的对
象⽂件在 work/catalina/localhost/钝化⽂件 -->
<Manager
className="org.apache.catalina.session.PersistentManager"
maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore"
directory="bonnie" />
</Manager>
</Context>
- 监听器代码
2.6 监听器: Listener(接口) 6+2
1.域对象相关 ServletContext HttpSession HttpServletRequest
a 和域的创建和销毁有关 b 和域内容的改变有关
a 域对象的创建和销毁 - 生命周期
ServletContext: 服务器开启创建, 服务器关闭销毁
HttpSession: 第一次调用 getSession() 创建, invalidate()销毁
HttpServletRequest: 请求发送创建, GC销毁
b 域内容的改变: setAttribute() removeAttribute()
2.监听器的作用:
监测到对应的行为, 针对这个行为作出对应的事情
3.实现步骤:
1.实现接口
2.实现方法
3.注册 web.xml
4.2个监听器, 和session域中的对象有关 - 对象感知监听器
a 对象添加到session中 和 对象从session中移除
b 在session中的对象的钝化和活化
使用: 添加在对象上, 而且不需要注册
钝化: 服务器关闭时, session对象中的数据从内存中 存储到 磁盘中
默认 tomcat/work/应用/SESSIONS.ser文件
活化: 服务器开启时, session数据从文件中 恢复到 内存中
对象->字节: 序列化 字节->文件: 持久化
钝化和活化的意义: 用磁盘空间来交换内存空间
设置钝化时间
3 邮箱服务
3.1 邮箱服务器的基本概念
1. 邮件的客户端:可以只安装在电脑上的也可以是⽹⻚形式的
2. 邮件服务器:起到邮件的接受与推送的作⽤
3. 邮件发送的协议:
协议:就是数据传输的约束
接受邮件的协议:POP3 IMAP
发送邮件的协议:SMTP