文档章节

java web(五):java web三大组件之另外两个和八大监听器

o
 osc_fmg49rzg
发布于 2019/03/21 11:13
字数 1172
阅读 14
收藏 0

精选30+云产品,助力企业轻松上云!>>>

  java的三大组件指Servlet、Filter、Listener。八大监听器指八个接口。前面介绍了Servlet,现在介绍一下Filter拦截器以及拦截地址的设置,

Listener监听那些事件。

  java web的cookie和session机制有篇博客讲的很好,有兴趣的博友可以去看看。地址:https://www.cnblogs.com/whgk/p/6422391.html

 


 一:Filter

  1.基本概念

    Filter称之为过滤器,是用来做一些拦截的任务, 在Servlet接受请求之前,做一些事情,如果不满足限定,可以拒绝进入Servlet。

    

    一个web项目中可以配置多个filter过滤器,浏览器访问静态资源如html、jsp、css或者访问动态资源servlet都会经过filter过滤器,满足条件,过滤器放行,否则直接返回。

  2.使用

    filter有很多用处,网上一搜,在filter层,来获取用户的身份,可以考虑在filter层做一些常规的校验(如参数校验,referer校验等),可以在filter层做

  稳定性相关的工作(如全链路打点,可以在filter层分配一个traceId;也可以在这一层做限流等)。我最常见的是spring中的编码过滤器。我们通过编码过滤器认识filter。

    代码:

package com.briup.servlet.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * Servlet Filter implementation class EncodingFilter
 * 编码过滤器
 */
public class EncodingFilter implements Filter {

    private String encoding;
    
    public EncodingFilter() {}

    public void destroy() {}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        //设置编码格式【只对post方式有效】;
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);
        //放行;
        chain.doFilter(request, response);
        
        System.out.println("servlet执行完毕,返回到filter");
    }

    
    public void init(FilterConfig fConfig) throws ServletException {
        //我们把编码设置在web.xml中,如果需要改编码在配置文件中更改而不需要更改代码
        encoding = fConfig.getInitParameter("encoding");
    }

}

 

 

  web.xml:

<filter>
    <display-name>EncodingFilter</display-name>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.briup.servlet.filter.EncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <!-- /* 代表拦截所有请求 -->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 访问:http://127.0.0.1:7778/StudyServlet/HelloWorld或者http://127.0.0.1:7778/StudyServlet/success.html,控制台都会输出一句:"servlet执行完毕,返回到filter"。

  

3.拦截地址的配置

    filter我主要想说的就是拦截地址如何配置了。    

第一种 【匹配任意】

    <url-pattern>/*</url-pattern> 

 

第二种 【精确匹配】

    <url-pattern>/test_servlet</url-pattern>

    表示此拦截器只会拦截/test_servlet这一个路径

 

第三种 【扩展名匹配】

          <url-pattern>*.html</url-pattern>

          表示此拦截器只会拦截后缀名是.html的路径

 

第四种 【路径匹配】

          <url-pattern>/test/*</url-pattern>

           表示此拦截器拦截/test路径下的所有资源

 

注意:服务器内部跳转不会拦截,只会拦截浏览器发送的地址。

 

二:监听器

  Servlet监听器的作用是监听Web容器的有效期事件,可以监听由于Web应用中状态改变而引起的Servlet容器产生的相应事件,然后接受并处理这些事件。

  下面简单介绍这8个接口和其中的方法。

 

  监听ServletContent(应用上下文)

     1.ServletContentListener接口  

      Servlet的上下文监听,它主要实现监听ServletContext的创建和删除

        (1)contextInitialized(ServletContextEvent event); //通知正在收听的对象,应用程序已经被加载和初始化。

        (2)contextDestroyed(ServletCotextEvent event);  // 通知正在收听的对象,应用程序已经被载出,即关闭。

    2.ServletContextAttributeListener接口

      应用上下文存、移除、更改数据进行监听。

        (1)attributeAdded(ServletContextAttributeEvent event); //应用上下文存数据的时候触发【调用setAttribute方法】

        (2)attributeRemoved(ServletContextAttributeEvent event); //ServletContent对象调用removeAttribute方法触发。

        (3)attributeReplaced(ServletContextAttributeEvent event);  //当存数据的时候,key值已经存在,value值被替换的时候触发。

  

  监听session接口

    3.HttpSessionListener接口

      (1)sessionCreated(HttpSessionEvent even); //session被创建的时候触发。

      (2)sessionDestroyed(HttpSessionEvent event); //session过期失效触发

    4.HttpSessionAttributeListener

      用法和ServletContextAttributeListener接口类似。

  

  监听request接口

    5.ServletRequestListener

    6.ServletRequestAttributeListener

  用法和上面类似。

 

  7.HttpSessionActivationListener;        
     该接口实现监听HTTP会话active和passivate。
                     (1)attributeAdded(HttpSessionBindingEvent event); // 当有对象加入session的范围时,通知正在收听的对象
                     (2)attributeReplaced(HttpSessionBindingEvent event); //当在session的范围有对象取代另一个对象时,通知正在收听的对象。
                     (3)attributeRemoved(HttpSessionBindingEvent event);  //当有对象从session的范围有对象取代另一个对象时,通知正在收听的对象 。

    其中HttpSessionBindingEvent类主要有三个方法:getName()、getSession()和getValue()

  8.HttpBindingListener;                     
    接口实现监听HTTP会话中对象的绑定信息。
                  (1)alueBound(HttpSessionBindingEvent event);   //当有对象加入session的范围时会被自动调用
                  (2)valueUnBound(HttpSessionBindingEvent event);  //当有对象从session的范围内移除时会被自动调用

 

注:本文一部分是参考网上资料的。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
JavaWeb学习路线

首先在详述Javaweb学习路线之前,先简单描述下JavaWeb应该了解和学习到的东西:什么是JavaWeb、JavaSE、JDBC、数据库基础、HTML+CSS和JS等Web前端内容、javaweb三大组件、Java三大框架、等。...

osc_8q50i7hp
2019/04/21
1
0
javaweb学习路线

一、Java Web 简介 Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的...

osc_84itep82
2019/04/21
1
0
Java监听器Listener

1、Java监听器 监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中...

osc_u6io2wi5
2018/08/17
12
0
JavaWeb的学习路线

JavaWeb的学习路线 一.BS结构 B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的...

osc_j5pkc521
05/12
4
0
JavaWeb的学习路线

JavaWeb的学习路线 一.BS结构 B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的...

osc_8q50i7hp
2019/04/21
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Saga分布式事务框架

1优点 1、避免服务之间的循环依赖,因为saga协调器会调用saga参与者,但参与者不会调用协调器 2、集中分布式事务编排 3、降低参与者的复杂性 4、回滚更容易管理 Saga模式的一大优势是它支持长...

战略板儿砖
今天
11
0
为什么要使用static_cast (x)而不是(int)x? - Why use static_cast(x) instead of (int)x?

问题: I've heard that the static_cast function should be preferred to C-style or simple function-style casting. 我听说static_cast函数应该比C样式或简单的函数样式转换更可取。 Is......

fyin1314
今天
18
0
最难的几道Java面试题,看看你跪在第几个?

这是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但...

码农突围
今天
20
0
浅谈Spring核心技术 IOC与AOP

IOC: IOC(Inversion Of Controll,控制反转)是一种设计思想,将原本在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是一个M...

创业789
今天
13
0
智能金融丨神州信息助某省联社实现一体化智能运维建设

近日,由神州信息实施的某省联社“IT服务管理平台项目”顺利通过验收,并获得客户的高度认可。该项目是神州信息在农信领域打造的又一标杆项目,为客户实现了IT运维流程标准化及运维系统一体化...

脉脉小达人
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部