Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

过滤器的作用:

  1、身份验证过滤器

  2、日志记录和审核过滤器

  3、触发资源访问事件过滤器。

  等等等。。。

Servlet 过滤器方法

过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法

序号 方法 & 描述
1 public void doFilter (ServletRequest, ServletResponse, FilterChain)
该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
2 public void init(FilterConfig filterConfig)
web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
3 public void destroy()
Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

使用实例:

建一个类,实现 javax.servlet.Filter 接口,重写里面的方法

package com.maya.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays; import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class Testfilter implements Filter { ArrayList<String> list=new ArrayList<String>();
@Override
public void destroy() {
//
} @Override
//每次请求执行的代码
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { HttpServletRequest request=(HttpServletRequest)arg0; //HttpServletRequest 是 ServletRequest的子类, 我们常用的request 是 httpservletRequest
HttpServletResponse response=(HttpServletResponse)arg1; //同上 response.setCharacterEncoding("utf-8"); //请求和响应的编码格式
request.setCharacterEncoding("utf-8"); String s1=request.getRequestURI(); //获取页面地址: /GuoLvQi/denglu.jsp
String s2=request.getContextPath(); // /GuoLvQi
String s3=s1.substring(s2.length()); //截取,最后剩下 /denglu.jsp if(list.contains(s3)){ //返回的结果为true 则进入下一个过滤器 arg2.doFilter(request, response); //进入下一个过滤器 }
else{
HttpSession session=request.getSession(); //获取session if(session.getAttribute("user")==null){ response.sendRedirect("denglu.jsp"); //如果获取不到,就转回登陆页面
}
else{
arg2.doFilter(request, response); //获取到了 进入下一个过滤器
}
}
} @Override
//第一遍要执行的代码
public void init(FilterConfig arg0) throws ServletException { String values=arg0.getInitParameter("kefangwen"); //读配置文件
String[] str=values.split(","); //将字符串变成一个数组来接收
list.addAll(Arrays.asList(str)); //将数组变成集合,也可以用for循环来添加
} }

web.xml中的配置(复制粘贴)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <filter>
<filter-name>testfilter</filter-name> <!-- 过滤器的名字 -->
<filter-class>com.maya.filter.Testfilter</filter-class> <!-- 引用的类的路径 com.maya.filter 是包名 Testfilter是类名 --> <init-param>
<param-name>kefangwen</param-name> <!--属性名称 过滤器可调用的属性 -->
<param-value>/index.jsp,/index,main./jsp,main,/denglu.jsp</param-value> <!-- value值 -->
</init-param>
</filter> <filter-mapping> <!-- 映射 -->
<filter-name>testfilter</filter-name> <!--同一个过滤器的映射名要跟过滤器的名字相对应 -->
<url-pattern>/*</url-pattern> <!-- /*表示该文件夹下所有web程序执行的时候都需要经过该过滤器 -->
</filter-mapping>
<welcome-file-list> <welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

当我在地址栏输入其他页面时  若session没有值时,就会自动跳至denglu.jsp

回车之后。。。

Serblet 过滤器(Filter)的更多相关文章

  1. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  2. 网站过滤器Filter

    实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...

  3. paip.输出内容替换在Apache 过滤器filter的设置

    paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...

  4. java Servlet中的过滤器Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  5. [ionic开源项目教程] - 第6讲 过滤器filter的使用

    过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...

  6. selvert的过滤器filter处理中文乱码

    注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...

  7. MVC之 自定义过滤器(Filter)

    MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...

  8. Servlet中的过滤器Filter用法

    1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...

  9. Servlet中的过滤器Filter详解

    加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...

  10. AngularJS的过滤器$filter

    过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...

随机推荐

  1. 为什么要用markdown写作

    无论是 EPUB, mobi,还是 Kindle 用的专有格式 .azw,都只是把一堆 `HTML 文件打包`而已.如果你写的是书,用 Markdown 标注格式之后,可以很方便地转为以上格式 使用W ...

  2. 公告板shader

    Shader "Custom/LightPoint" { Properties { _MainTex ("Main Tex", 2D) = "whit ...

  3. jQuery Easy UI Draggable(拖动)组件

    上文已经提到过了 jQuery EasyUI插件引用一般我们经常使用的有两种方式(排除easyload载入方式),所以本篇要总结的Draggable组件相同有两种方式载入: (1).使用class载入 ...

  4. BestCoder Round #63 (div.2)

    感觉有些无聊的比赛. A 暴力枚举下就行 B 简单的dp,但是wa了一发后就去先把C做了,然后发现如果输入的100个数,是如1,2,3,4,...,100,然后k=50,个数为c(100,50).果断 ...

  5. sgu 1348 Goat in the Garden 2【点到线段的距离】

    链接: http://acm.timus.ru/problem.aspx?space=1&num=1348 http://acm.hust.edu.cn/vjudge/contest/view ...

  6. Linux安装Nginx使用负载均衡

    1.实验准备准备三台计算机 nginx1 192.168.13.121 作为nginx负载均衡器nginx2 192.168.13.24  web服务,提供一个页面        nginx3 192 ...

  7. 梯度下降算法(gradient descent)

    简述 梯度下降法又被称为最速下降法(Steepest descend method),其理论基础是梯度的概念.梯度与方向导数的关系为:梯度的方向与取得最大方向导数值的方向一致,而梯度的模就是函数在该点 ...

  8. html post

    post请求对应的html页面 页面效果 html代码 <html> <body> <form method="post" > First na ...

  9. Docker的前世今生

    核心知识点: 1.Docker的构想:对应用的封装.分发.部署.运行的生命周期的管理,一次封装到处运行 2.Docker的优点:一站式解决方案 3.Docker由LXC演变而来,迟迟没有集成到Linu ...

  10. rails 运维常用命令

    创建生产环境数据库并执行迁移 $ RAILS_ENV=production rake db:create$ RAILS_ENV=production rake db:migrate RAILS_ENV ...