监听器与过滤器的使用,简单易懂

1.Servlet
Servlet是一个在服务器运行的类,它于第一次访问时创建,一直驻扎在服务器的Serlvet容器中,直到应用程序线束或服务器关闭才释放。所以,它是一个单例模式。
配置可以用注解的方式进行配置,

@WebServlet(value= {"/student","/stu"})
public class StudentServlet extends HttpServlet {

可以在web.xml文件中进行配置。
student com.bdqn.servlet.StudentServlet student /student 2.过滤器 概述: 过滤器是在客户端与服务器之间设置一个关卡,它可以对语法进行数据的处理过滤,对响应进行数据的处理过滤。请求会通过过滤器,响应也会通过过滤器。如果请求无法通过过滤器,则服务端接收不到客户端的请求。 过滤器的生命周期 它在程序运行时(部署时)就初始化了。然后就一直驻扎服务器,也要到应用程序结束或服务器关闭时才释放资源。 过滤器创建 过滤器的创建需要实现Filter接口。接口中的方法如下:

实现类
package com.bdqn.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;

public class CharacterFilter implements Filter {
//此方法是过滤销毁才调用的方法,在程序关闭或服务器关闭时执行
@Override
public void destroy() {
System.out.println(“过滤器被销毁…”);
}
//此方法是对数据进行处理的地方
//
@Override
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println(“请求通过过滤器…”);
//对请求与响应的数据进行编码设置.
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);

	//放行,否则请求会永远停留在此。
	chain.doFilter(request, response);
	
}
//在程序部署时就执行
@Override
public void init(FilterConfig arg0) throws ServletException {
	System.out.println("过滤器被初始化..");		
}

}

过滤器配置
过滤器可以用注解的方式配置,
// /* 表示所有的请求都进行过滤 /.html只过滤请求html页面
// /admin/
表示请求admin目录下的所有资源都会被过滤
@WebFilter("/*")
public class CharacterFilter implements Filter {
可以像Servlet一样在web.xml文件中进行配置。

char com.bdqn.filter.CharacterFilter char /* 过滤用户登录功能实现 创建过滤器类: package com.bdqn.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; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; //后台资源全部在admin目录下,请求此目录下的资源都进行过滤 @WebFilter("/admin/*") public class CheckUserFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //判断Session中是否存储了用户信息。为空则表示没有登录。 if(((HttpServletRequest)request).getSession(). getAttribute("user")==null) { System.out.println("你还没有登录.."); request.getRequestDispatcher("/login.jsp"). forward(request, response); } chain.doFilter(request, response);//放行 } @Override public void init(FilterConfig arg0) throws ServletException { } }

3.监听器
概述
它起到监听的作用,针对程序运行过程中的某事物发生做监听,如果事情发生,监听器则做出相关对应的响应。
常用的监听器
监听器配置:
注解配置
@WebListener
public class CountUserListener implements HttpSessionListener

Web.xml中配置:

com.bdqn.Listener.CountUserListener 实现网站在线人数 package com.bdqn.Listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import oracle.jrockit.jfr.tools.ConCatRepository;
/**

  • HttpSessionListener此监听器可以监听到Session的开启与销毁

  • @author Administrator
    */
    @WebListener
    public class CountUserListener implements HttpSessionListener {
    //当Session创建时,自动执行此方法
    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
    System.out.println(“创建了一个Session”);
    //一旦Session创建,则向application中的记数器加 1
    //arg0.getSession()这是Session对象
    //arg0.getSession().getServletContext()这是访问到Application对象
    //判断是否有这个属性,如果没有,则是第一个人。
    if(arg0.getSession().getServletContext().getAttribute(“count”) == null)
    arg0.getSession().getServletContext().setAttribute(“count”, 1);
    else {
    //取出记数器
    int count = Integer.parseInt( arg0.getSession().getServletContext().getAttribute(“count”)+"");
    count++; //记数器累加
    //重新保存在线人数到application对象中
    arg0.getSession().getServletContext().setAttribute(“count”, count);
    }
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
    System.out.println(“Ssession被销毁…”);
    //一旦Session销毁,则向application中的记数器减 1
    int count = Integer.parseInt( arg0.getSession().getServletContext().getAttribute(“count”)+"");
    count–; //记数器减1
    arg0.getSession().getServletContext().setAttribute(“count”, count);
    }
    }

Jsp页面处理
<%
String count=“0”;
if (application.getAttribute(“count”) != null) {
count = application.getAttribute(“count”).toString();
out.print(“在线人数:”+count);
}
%>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值