今日内容

  1. 1. Filter:过滤器
  2. 2. Listener:监听器
  3. 记得路径填url的访问路径后边的部分,不要填全部的路径!
  4. 过滤器里边的代码时全部执行的,记得判断逻辑

Filter:过滤器

  1. 1. 概念:
  2. * 生活中的过滤器:净水器,空气净化器,土匪、
  3. * web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
  4. * 过滤器的作用:
  5. * 一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...
  6. 2. 快速入门:
  7. 1. 步骤:
  8. 1. 定义一个类,实现接口Filter
  9. 2. 复写方法
  10. 3. 配置拦截路径
  11. 1. web.xml
  12. 2. 注解
  13. 2. 代码:
  14. @WebFilter("/*")//访问所有资源之前,都会执行该过滤器
  15. public class FilterDemo1 implements Filter {
  16. @Override
  17. public void init(FilterConfig filterConfig) throws ServletException {
  18. }
  19. @Override
  20. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  21. System.out.println("filterDemo1被执行了....");
  22. //放行
  23. filterChain.doFilter(servletRequest,servletResponse);
  24. }
  25. @Override
  26. public void destroy() {
  27. }
  28. }
  29. 3. 过滤器细节:
  30. 1. web.xml配置
  31. <filter>
  32. <filter-name>demo1</filter-name>
  33. <filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
  34. </filter>
  35. <filter-mapping>
  36. <filter-name>demo1</filter-name>
  37. <!-- 拦截路径 -->
  38. <url-pattern>/*</url-pattern>
  39. </filter-mapping>
  40. 2. 过滤器执行流程
  41. 1. 执行过滤器
  42. 2. 执行放行后的资源
  43. 3. 回来执行过滤器放行代码下边的代码
  44. 3. 过滤器生命周期方法
  45. 1. init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
  46. 2. doFilter:每一次请求被拦截资源时,会执行。执行多次
  47. 3. destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源
  48. 4. 过滤器配置详解
  49. * 拦截路径配置:
  50. 1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  51. 2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  52. 3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  53. 4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
  54. * 拦截方式配置:资源被访问的方式
  55. * 注解配置:
  56. * 设置dispatcherTypes属性
  57. 1. REQUEST:默认值。浏览器直接请求资源
  58. 2. FORWARD:转发访问资源
  59. 3. INCLUDE:包含访问资源
  60. 4. ERROR:错误跳转资源
  61. 5. ASYNC:异步访问资源
  62. * web.xml配置
  63. * 设置<dispatcher></dispatcher>标签即可
  64. 5. 过滤器链(配置多个过滤器)
  65. * 执行顺序:如果有两个过滤器:过滤器1和过滤器2
  66. 1. 过滤器1
  67. 2. 过滤器2
  68. 3. 资源执行
  69. 4. 过滤器2
  70. 5. 过滤器1
  71. * 过滤器先后顺序问题:
  72. 1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
  73. * 如: AFilter 和 BFilter,AFilter就先执行了。
  74. 2. web.xml配置: <filter-mapping>谁定义在上边,谁先执行
  75. 4. 案例:
  76. 1. 案例1_登录验证
  77. * 需求:
  78. 1. 访问day17_case案例的资源。验证其是否登录
  79. 2. 如果登录了,则直接放行。
  80. 3. 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。
  81. 2. 案例2_敏感词汇过滤
  82. * 需求:
  83. 1. 对day17_case案例录入的数据进行敏感词汇过滤
  84. 2. 敏感词汇参考《敏感词汇.txt》
  85. 3. 如果是敏感词汇,替换为 ***
  86. * 分析:
  87. 1. 对request对象进行增强。增强获取参数相关方法
  88. 2. 放行。传递代理对象
  89. * 增强对象的功能:
  90. * 设计模式:一些通用的解决固定问题的方式
  91. 1. 装饰模式
  92. 2. 代理模式
  93. * 概念:
  94. 1. 真实对象:被代理的对象
  95. 2. 代理对象:
  96. 3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
  97. * 实现方式:
  98. 1. 静态代理:有一个类文件描述代理模式
  99. 2. 动态代理:在内存中形成代理类
  100. * 实现步骤:
  101. 1. 代理对象和真实对象实现相同的接口
  102. 2. 代理对象 = Proxy.newProxyInstance();
  103. 3. 使用代理对象调用方法。
  104. 4. 增强方法
  105. * 增强方式:
  106. 1. 增强参数列表
  107. 2. 增强返回值类型
  108. 3. 增强方法体执行逻辑

Listener:监听器

  1. * 概念:web的三大组件之一。
  2. * 事件监听机制
  3. * 事件 :一件事情
  4. * 事件源 :事件发生的地方
  5. * 监听器 :一个对象
  6. * 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
  7. * ServletContextListener:监听ServletContext对象的创建和销毁
  8. * 方法:
  9. * void contextDestroyed(ServletContextEvent sce) ServletContext对象被销毁之前会调用该方法
  10. * void contextInitialized(ServletContextEvent sce) ServletContext对象创建后会调用该方法
  11. * 步骤:
  12. 1. 定义一个类,实现ServletContextListener接口
  13. 2. 复写方法
  14. 3. 配置
  15. 1. web.xml
  16. <listener>
  17. <listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
  18. </listener>
  19. * 指定初始化参数<context-param>
  20. 2. 注解:
  21. * @WebListener