JavaWeb-6、过滤器、监听器

JavaWeb-6、过滤器、监听器

1、过滤器

​ 在我们编写servlet时会不会有一种这样的苦恼?每一次都要在servlet最开始设置页面的编码,如果项目中servlet少那还可以,但是如果项目中有好几十甚至上百个servlet,那就有点难受了,这时我们可以使用过滤器来设置相应的编码。

​ 编写一个过滤器也是相当的简单,只需要让一个类实现filter接口,并实现其中的方法即可拿到一个过滤器类。

这里我们首先编写一个servlet

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyServlet  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().println("你好,脏丽丽!");
    }
}

这里我们对他不做编码处理,在过滤器中做。

下面我们编写相关过滤器,我们在过滤器中设置相关的编码

import javax.servlet.*;
import java.io.IOException;

public class MyFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("过滤器正在初始化");
    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        
            servletRequest.setCharacterEncoding("utf-8");
            servletResponse.setCharacterEncoding("utf-8");
            servletResponse.setContentType("text/html;charset=UTF-8");
            //相当于把相关请求传给过滤链,如果不写这句话,过滤器将不会继续执行
            filterChain.doFilter(servletRequest,servletResponse);

    }

    public void destroy() {
        System.out.println("过滤器已经被销毁");
    }
}

成为filter类只需要实现Filter接口中三个方法,

在这里插入图片描述

这里我们在写完之后需要去web.xml注册servlet和相关过滤器,过滤器的注册方法与servlet类一样

<servlet>
    <servlet-name>myserv</servlet-name>
    <servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>myserv</servlet-name>
    <url-pattern>/m/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>myserv</servlet-name>
    <url-pattern>/s</url-pattern>
</servlet-mapping>
<filter>
    <filter-name>myfilter</filter-name>
    <filter-class>MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/m/*</url-pattern>
</filter-mapping>

在filtermapping中的url-pattern属性中添加过滤器执行的页面即可。

这里我们为servlet中添加两个不同映射,一个是走过滤器的,一个是不走过滤器的,我们来看一下结果。

在这里插入图片描述

以上是走过滤器的映射,我们发现编码很正常。
在这里插入图片描述

没走过滤器的就有乱码嘞…

2、监听器

监听器,众所周知,就是检测我们当前程序动作的一个东西。在jsp中我们一般会监听session的创建以统计当前网址在线的人数,这里也是通过一个小demo让大家了解了解,监听器这里不是重点,大家了解了解即可。

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;


//继承相关接口
public class Listenner implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext sc = httpSessionEvent.getSession().getServletContext();
        Integer nowOnlineCount = (Integer) sc.getAttribute("nowOnlineCount");
        
        if(nowOnlineCount==null){
            //如果为空,则新建一个
            int i = 0;
            nowOnlineCount = new Integer(1);
        }
        else{
            int count = nowOnlineCount.intValue();
            count++;
            nowOnlineCount = new Integer(count);

        }
        sc.setAttribute("nowOnlineCount",nowOnlineCount);
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext sc = httpSessionEvent.getSession().getServletContext();
        Integer nowOnlineCount = (Integer) sc.getAttribute("nowOnlineCount");
        if(nowOnlineCount==null){
            int i = 0;
            nowOnlineCount = new Integer(0);
        }
        else{
            int count = nowOnlineCount.intValue();
            count++;
            nowOnlineCount = new Integer(count);

        }
        sc.setAttribute("nowOnlineCount",nowOnlineCount);
    }
    }


这里我们写了一个监听在线人数的监听器,主要是通过session的数目进行人数的监听,写完监听器后要去web.xml中注册

<listener>
    <listener-class>Listenner</listener-class>
</listener>

这里只用把对应class写上就好。

在前端再取下对应值

<h1>当前有<span>${pageContext.findAttribute("nowOnlineCount")}</span>人在线</h1>

在这里插入图片描述发现是可以监听成功的!

总之来说!监听器和过滤器在之后的项目开发中是肯定会用到的,这里大家可以先做了解!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值