监听器listener和过滤器Filter区别

本文介绍了Web项目中监听器和过滤器的相关知识。监听器随Web项目开始和结束,可简化重复代码、做初始化工作,还说明了获取web.xml参数的方法及不同监听器的实现。过滤器主要用于过滤字符编码和做应用逻辑判断,介绍了其启动、销毁机制及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:邹爱红,撰写时间:2019年05月28日

监听器listener:

监听器listener:随着web项目的开始而开始,web项目的结束而结束

最先开始加载web.xml文件,随着webxml同时加载,里面的参数同时加载到服务器里。

主要作用是:将重复的代码简化做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

如何获取web.xml的参数:

     * web.xml里面初始的值获取到

比如说content里面的值

<context-param>

        <param-name>username</param-name>

        <param-value>root</param-value>

</context-param>

  1. ServletContextListener    监听ServletContext对象
  1. public class DemoListener implements ServletContextListener{//需要实现接口ServletContextListener定义类实现ServletContextListener

实现里面的两个抽象方法:

  销毁方法

@Override

         public void contextDestroyed(ServletContextEvent arg0) {

                   //  应用监听器的销毁方法

         }

把什么参数放进来就执行这个方法contextInitialized:

@Override

         public void contextInitialized(ServletContextEvent serEvent) {

                   //这个方法能过获取到web.xml的初始值

                   //用初始化的这个对象赋值

                   serEvent.getServletContext();

                   String isername=serEvent.getServletContext().getInitParameter("username");

                   //把获取到的东西扔到项目中

                   //怎么调用去用它

                   serEvent.getServletContext().setAttribute("username", isername);

         }

ServletContextEvent初始化了一个对象,通过这个对象,获取到我们的getServletContext,

 

第二种

  1. public class ListenerRequest implements ServletRequestListener {//实现ServletRequestListener

//这个解决了无法获取项目名的问题

         @Override

         public void requestDestroyed(ServletRequestEvent arg0) {//在请求调用的时候才会调用的

         }

@Override

         public void requestInitialized(ServletRequestEvent serEvent) {

                   // ServletRequestEvent通过这个对象处理,可以获取到ServletRequest对象

                   serEvent.getServletRequest();

                   String otx=serEvent.getServletContext().getContextPath();

                   System.out.println(otx);

                   serEvent.getServletRequest().setAttribute("otx", otx);

         }

ServletRequestEvent可以获取到servletrequst对象,

getservletrequest方法。

然后去配置web.xml文件

<listener>

                   <listener-class>com.ly.listener.ListenerRequest</listener-class>

</listener>

  • 过滤器:

主要目的:过滤字符编码;其次,做一些应用逻辑判断等.

  Filter跟web应用一起启动

当web应用重新启动或销毁时,Filter也被销毁

Filter对浏览器传递过来的参数过滤,

浏览器传给filter,处理完以后,将请求返回给content

  1. implements 实现Filter接口 引用import javax.servlet.Filter;
  2. dofilter方法最重要的两个参数就是,ServletRequestServletResponse

public class FilterDemo implements Filter{

实现里面的三个方法:

@Override

    public void destroy() {

       // System.out.println("准备销毁...");

}

@Override

public void doFilter(ServletRequest serRequest, ServletResponse arg1,FilterChain chain) throws IOException, ServletException {

       serRequest.setCharacterEncoding("uft-8");解决乱码

// 强制类型转换

HttpServletRequest request = (HttpServletRequest) serRequest;  

HttpServletResponse response = (HttpServletResponse) arg1; 

HttpSession session = request.getSession();

//通过点出session,获取到它的username

System.out.println(session.getAttribute("username"));

System.out.println("filter执行成功");

chain.doFilter(serRequest, arg1);//将请求传回去

}

@Override

    public void init(FilterConfig arg0) throws ServletException {

          System.out.println("初始化...");

    }

}

<filter>

配置路径

       <filter-name>FilterEconding</filter-name>

       <filter-class>com.ly.filter.FilterEconding</filter-class>

    </filter>

再配置路由:

    <filter-mapping>

       <filter-name>FilterEconding</filter-name>

<!-- * 代表截获所有的请求想要它作用到哪里就到哪   /servlet/*-->

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

    </filter-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值