什么是过滤器
Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。
Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容器进行调用和执行
Filter 程序需要在 web.xml 文件中进行注册和设置它所能拦截的资源
注意:Filter存在链式操作的,不同的过滤器可以拥有相同的映射路径,表示拦截同一个请求,先后顺序,如果是注解方式的方式是类名决定的,例如: AFilter,BFilter,AFilter会先进行拦截,再如Filter1_xxx,Filter2_xxx,Filter1_xxx会先拦截
如果是配置的方式,先配置<filter-mapping></filter-mapping>的过滤器先拦截
典型应用
统一编码字符集
什么是监听器
监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
Servlet 监听器:Servlet 规范中定义的一种特殊类,它用于监听 web 应用程序中的 ServletContext, HttpSession 和 ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件
Servlet 监听器的分类
按监听的事件类型 Servlet 监听器可分为如下三种类型:
**监听域对象自身的创建和销毁的事件监听器**
ServletContextListener,
HttpSessionListener,
ServletRequestListener
**监听域对象中的属性的增加和删除的事件监听器**
ServletContextAttributeListener,
HttpSessionAttributeListener,
ServletRequestAttributeListener
--监听绑定到 HttpSession 域中的某个对象的状态的事件监听器
创建一个监听器
解决页面字符乱码问题
package com.neuedu.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "Filter1_Encoding",urlPatterns = "/*")
public class Filter1_Encoding implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
网友评论