java web过滤器_JavaWeb过滤器

1.JavaWeb三大组件都需要在web.xml中进行配置

2.过滤器

它会在一组资源(jsp、servlet、.css、.html等等)的前面执行!

它可以让请求得到目标资源,也可以不让请求达到!

*过滤器有拦截请求的能力!

过滤器如何编写

1.写一个类实现Filter接口

2.在web.xml中进行配置

Filter接口

void init(FilterConfig)

*创建之后马上执行;Filter会在服务器启动时就创建!

void destory()

*销毁之前执行!在服务器关闭的时候销毁

void doFilter(ServletRequest ,  ServletResponse,  FilterChain)

*每次过滤时都会执行

Filter是单例的!

web.xml中配置:

xxx

com.xjs.web.filter.AFilter

xxx

/*

使用:

写一个过滤器AFilter:

packagecom.xjs.filter;importjava.io.IOException;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;public class AFilter implementsFilter{/*** 创建之后马上执行,用来做初始化!*/@Overridepublic void init(FilterConfig arg0) throwsServletException {

System.out.println("过滤器出生");

}/*** 每次过滤时都会执行*/@Overridepublic voiddoFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2)throwsIOException, ServletException {

System.out.println("开始拦截");

}/*** 销毁之前执行,用来做对非内存资源进行释放*/@Overridepublic voiddestroy() {

System.out.println("过滤器销毁");

}

}

然后在web.xml中配置Filter,指定过滤哪些路径(这里是AServlet)

xx

com.xjs.filter.AFilter

xx

/AServlet

AServlet:

packagecom.xjs;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class AServlet extendsHttpServlet {public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

System.out.println("AServlet....");

}

}

当请求AServlet时被过滤器拦截。

FilterConfig--->与ServletConfig相似

* 获取初始化参数:getInitParameter()

* 获取过滤器名称:getFilterName()

* 获取application:getServletContext()

FilterChain

* doFilter(ServletRequest,  ServletResponse):放行!

放行,就相当于调用了目标Servlet的service()方法。

多过滤器

FilterChain#doFilter()方法:

执行目标资源,或者执行下一个过滤器!

过滤器的四种拦截方式

REQUEST 默认的!

FORWARD

INCLUDE

ERROR

500

500.jsp

在<filter-mapping>中进行配置!

多个过滤器的执行顺序

的配置顺序决定了过滤器的执行顺序!

创建的FIlter

f2afc31ab3c65ede5f1da889d95bc9b0.png

过滤器的应用场景

过滤器的应用场景:

*执行目标资源之前做预处理工作,例如设置编码,这种通常会放行,只是在目标资源执行之前做的一些准备工作;

几乎所有的Servlet中都需要写request.setCharacterEndoing()可以把它放到一个Filter中

*通过条件判断是否放行,例如校验当前用户是否已经登录,或者用户IP是否已经被禁用;

*在目标资源执行之后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理;

回程拦截!

案例1:分ip统计网站次数

ip

count

192.168.1.111

5

192.168.1.112

62

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了。

我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的。

用什么东西来装载统计的数据。Map

整个网站只需要一个Map即可!

Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并保存到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!)

> Map需要在Filter中用来保存数据

> Map需要在页面使用,打印Map中的数据

1).网站统计每个IP地址访问本网站的次数。

使用的是注解(代替了在web.xml中的配置)

AListener监听器:

packagecom.xjs.web.listener;importjava.util.LinkedHashMap;importjava.util.Map;importjavax.servlet.ServletContext;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextLi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值