java servlet过滤器_JavaWeb servlet过滤器

一.Filter简介:

***************************************************************************************

Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件

或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处

理并生成响应,最后Filter 再对服务器响应进行后处理。

二、Servlet过滤器的特点:

***************************************************************************************

1.Servlet过滤器可以检查和修改ServletRequest和ServletResponse对象

2.Servlet过滤器可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器

3.Servlet过滤器可以被串联在一起,形成管道效应,协同修改请求和响应对象

三、Servlet过滤器的适用场合:

***************************************************************************************

1.认证过滤

2.登录和审核过滤

3.图像转换过滤

4.数据压缩过滤

5.加密过滤

6.令牌过滤

7.资源访问触发事件过滤

8.XSL/T过滤

9.Mime-type过滤

四、Servlet过滤器接口的构成:

***************************************************************************************

所有的Servlet过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:

1.init(FilterConfig):

这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数

2.doFilter(ServletRequest,ServletResponse,FilterChain):

这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器

3.destroy():

Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源

五、Servlet过滤器的创建步骤:

***************************************************************************************

1.实现javax.servlet.Filter接口

2.实现init方法,读取过滤器的初始化函数

3.实现doFilter方法,完成对请求或过滤的响应

4.调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

5.销毁过滤器

六、Servlet过滤器的发布:

***************************************************************************************

1.发布Servlet过滤器时,必须在web.xml文件中加入元素和元素。

2.元素用来定义一个过滤器:

属性                   含义

filter-name    指定过滤器的名字

filter-class    指定过滤器的类名

init-param    为过滤器实例提供初始化参数,可以有多个

3.元素用于将过滤器和URL关联:

属性                     含义

filter-name    指定过滤器的名字

url-pattern    指定和过滤器关联的URL,为”/*”表示所有URL

public classLoginFilter implements Filter {private String urlPath;//用来存放不需要判断的页面路径

publicLoginFilter() {

}public voiddestroy() {

}public voiddoFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest) req;

HttpServletResponse response=(HttpServletResponse) resp;

String[] urls= urlPath.split(",");for(String s : urls) {

String reqPath=request.getRequestURI();if (reqPath.indexOf(s) != -1) {

chain.doFilter(request, response);return;

}

}

Object obj= request.getSession().getAttribute("currentUser");if (obj == null) {

response.sendRedirect("login.jsp");

}else{

chain.doFilter(request, response);

}

}public voidinit(FilterConfig fConfig) throws ServletException {

urlPath= fConfig.getInitParameter("initPath");

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值