Filter Listener 概述 原理 执行流程
来源:互联网 发布:python opengl 教程 编辑:程序博客网 时间:2024/06/04 23:22
Filter概述
接受客户端发送过来的请求,然后针对请求进行过滤
FIilter生命周期
TomCat 启动的时候执行 init(FilterConfig fConfig)
拦截的时候 执行doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
当TomCat关闭的时候执行 ondestroy
FilterConfig对象
跟SerlvetConfig 对象差不多就是获取下面对应的参数,熟悉API就可以了
<filter-mapping> <filter-name>DemoFilter1</filter-name> <url-pattern>/jsp/demo1.jsp</url-pattern> </filter-mapping>
执行原理
- Filter过滤的器的执行顺序 根据在 web.xml 中配置顺序一致
- A—>C chain.doFilter(request, response);后 C—>A
Filterchain对象
Interface FilterChain
概述 过滤器使用 FilterChain 调用链中的下一个过滤器,如果调用的过滤器是链中的最后一个过滤器,则调用链末尾的资源。
Filter-Mapping的配置
关于Request Forward 在Filter来配置的说明 默认是拦截请求 ,配置以后才可以拦截转发
关于request forward 等问题
关于HttpServletRequest的动态代理的二次封装
需求 : 对于post get提交的request请求乱码问题 想要通过增强在HttpServletRequest这个类来实现乱码问题的增强。
解决方案 : 继承 装饰 动态代理 三种模式都可以解决,又因为HttpServletRequestWrapper实现了HttpServletRequest这个接口,因此可以通过动态代理的方式来进行增强
增强的类 被装饰的类
public class MyRequestWarpper extends HttpServletRequestWrapper{ private HttpServletRequest request; public MyRequestWarpper(HttpServletRequest request) { super(request); this.request = request; } /** * 通过重写这个方式来实现解决乱码问题 */ @Override public String getParameter(String name) { // TODO Auto-generated method stub // 1.判断是什么请求 // 2. get 请求 // 3. post 请求 String method = request.getMethod(); if(method.equalsIgnoreCase("get")) { try { String value = new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8"); System.out.println("MyRequestWarpper " + value); return value; } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return request.getParameter(name); }}
在Serlvet中的使用
public class MyRequestSerlvet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { MyRequestWarpper myRequestWarpper = new MyRequestWarpper(request); String parameter = myRequestWarpper.getParameter("user"); String parameter2 = myRequestWarpper.getParameter("pwd"); System.out.println(parameter); System.out.println(parameter2); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}
HttpRequest对象的增强
问题汇总
1. 初始运行项目时会报出NotClassfindException 就说定义的filter没有找到 ,
解决办法 去tomcat目录下查看对应的jsp的Classes的没有被编译,手动编译 , 关闭tomcat Project Buildall 手动编译 从新部署项目运行 ok 最直接的办法就是关闭Eclipse重启
2. 注意过滤的对象 还有内容
解决 A 请求 B 过滤器 过滤的是B的内容,配置的是B的路径
Listener 监听器
第一类 监听域对象的变化
ServletContextListener:监听ServletContext对象的创建和销毁
HttpSessionListener:监听HttpSession对象的创建和销毁
ServletRequestListener:监听ServletRequest对象的创建和销毁
第二类 监听域对象属性的变化
ServletContextAttributeListener:监听ServletContext域属性变更的监听器
HttpSessionAttributeListener:监听HttpSession域属性变更的监听器
ServletRequestAttributeListener:监听ServletRequest域属性变更的监听器
第三类 用来监听HttpSession中的JavaBean的对象状态改变监听器
- Filter Listener 概述 原理 执行流程
- Servlet、Filter和Listener概述
- Listener执行流程
- Elasticsearch2.x Filter执行流程及缓存原理
- Filter执行流程
- Filter执行流程
- Listener,Filter,Servlet执行顺序和生命周期
- Listener,Filter,Servlet执行顺序和生命周期
- 10. Dubbo原理解析-Listener & filter
- Servlet、Filter 和Listener 工作原理
- 10045---Servlet、Filter 和Listener 工作原理
- JSP Filter执行流程猜想
- Spark执行原理概述
- Filter & Listener
- Listener&Filter
- Filter & Listener
- Listener && Filter
- Listener&&Filter
- 从线下走到线上,艺术品能否找到新突破口?
- Import via modules
- UVA 725 Division(暴力枚举 简单)
- CCPC 网络赛 2017 经验总结
- java 转发重定向
- Filter Listener 概述 原理 执行流程
- Linux 信号量
- NOIP2012开车旅行
- Spring boot data+web案例讲解
- [NHibernate]Nhibernate如何映射sqlserver中image字段
- JDBC之连接池: Tomcat 8.5 MySQL数据库连接池的配置与使用
- Idea设置自定义类的注释
- JavaScript中window.location对象介绍
- springmvc+mybatis多数据源分布式事务管理