JSP应用之Filter与Listener

一.Filter过滤器

Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

1.xml配置

 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>com.dmzj.filter.EncodingFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>

2.Filter类

package com.dmzj.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 EncodingFilter implements Filter{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain filterChain) throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        filterChain.doFilter(req, resp);
        resp.setCharacterEncoding("UTF-8");
        System.out.println();

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub  
    }
}

3.参数初始化(init-param)
xml配置

 <filter>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
  </filter>
类

    @Override
    public void init(FilterConfig arg0) throws ServletException {
            String name = arg0.getInitParameter("encoding");
        System.out.println("+++++++++++"+name+"++++++++++++");
    }

二.listener监听器

域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事件的监听器。这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同。

在web.xml中的加入语句

  <listener>
  <listener-class>com.dmzj.listener.SeesionListener</listener-class>
  </listener>

1.在实例类中实现HttpSessionBindingListener接口(绑定实例类)
该接口有两个抽象方法:

@Override
    public void valueBound(HttpSessionBindingEvent arg0) {
        Count.count++;

    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent arg0) {
        Count.count--;
    }

2.创建listener类

package com.dmzj.listener;

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

public class SeesionListener implements HttpSessionListener{

    @Override
    public void sessionCreated(HttpSessionEvent event) {
              //需要session获取上下文getServletContext()
        ServletContext sc = event.getSession().getServletContext();
        Object count = sc.getAttribute("count");
        Integer count1 = 0;
        if (count==null) {
            count1 = 1;
        }else {
            count1 = (Integer) count;
            count1 ++;
        }
        sc.setAttribute("count", count1);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        ServletContext sc = event.getSession().getServletContext();
        Object count = sc.getAttribute("count");
        Integer count1 = 0;
        if (count==null) {
            count1 = 0;
        }else {
            count1 = (Integer) count;
            count1--;
        }
        sc.setAttribute("count", count1);
    }

}

在JSP中的调取:

<%
    Integer count =  (Integer)session.getServletContext().getAttribute("count");
    out.print(count);
    %>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值