Serblet 过滤器(Filter)
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)的更多相关文章
- Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例
Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...
- 网站过滤器Filter
实际上,Filter与Servlet及其相似,区别只是FIlter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求.网站有了过滤器十分的方便,可以 ...
- paip.输出内容替换在Apache 过滤器filter的设置
paip.输出内容替换在Apache 过滤器filter的设置 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- [ionic开源项目教程] - 第6讲 过滤器filter的使用
过滤器filter的使用 1.回顾 再熟悉一下tab1.html的代码: <div class="list"> <a ng-repeat="item i ...
- selvert的过滤器filter处理中文乱码
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- MVC之 自定义过滤器(Filter)
MVC之 自定义过滤器(Filter) 一.自定义Filter 自定义Filter需要继承ActionFilterAttribute抽象类,重写其中需要的方法,来看下ActionFilterAttri ...
- Servlet中的过滤器Filter用法
1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对Http ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
- AngularJS的过滤器$filter
过滤器(filter)主要用于数据的格式上,通过某个规则,把值处理后返回结果.例如获得数据集,可排序后再返回. ng内置的共有九种过滤器: currency 货币 使用currency可以将数字格式化 ...
随机推荐
- 【文献阅读】Densely Connected Convolutional Networks-best paper-CVPR-2017
Densely Connected Convolutional Networks,CVPR-2017-best paper之一(共两篇,另外一篇是apple关于GAN的paper),早在去年八月 De ...
- 【转】python做一个http接口测试框架
出处: https://my.oschina.net/bysu/blog/751634 https://my.oschina.net/u/3041656/blog/820023
- flex hack 记录
IE从IE10开始. //共通 display: flex; flex-direction: column; align-items: flex-start;justify-content: cent ...
- Laravel开发:Laravel初始化简述
二话不说,先从public/index.php撸起 require __DIR__.'/../bootstrap/autoload.php';//Composer 自动加载 $app = requir ...
- 【BZOJ3993】[SDOI2015]星际战争 二分+最大流
[BZOJ3993][SDOI2015]星际战争 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团的阵地 ...
- 【HTML5开发系列】表单元素
<form> 创建一个HTML表单 属性: action 表示提交表单时浏览器应该把用户填写的数据发送到什么地方 method 用来指定表单数据发送到服务器的方式.允许值有get和post ...
- 洛谷 P2051 [SDOI2009]学校食堂
传送门- 题目分析:首先,我们先看看做菜时间的运算机制.$(A~\texttt{or}~B)-(A~\texttt{and}~B)$这个试子看起来有点复杂(因为我太菜了),仔细想想,是不是可以转化为$ ...
- 转。git 乌龟的使用安装
TortoiseGit 简称 tgit, 中文名海龟Git. 海龟Git只支持神器 Windows 系统, 有一个前辈海龟SVN, TortoiseSVN和TortoiseGit都是非常优秀的开源的版 ...
- Android Resources
Ref:Android开发最佳实践 Ref:Android高手速成--第一部分 个性化控件(View) Ref:Android高手速成--第二部分 工具库 Ref:Android高手速成--第三部分 ...
- java 从零开始 第三天
2015年5月2日 51刚过一天,电脑坏了.不开心,就没有更新了 Java中的类型转换 自动类型 在 Java 程序中,不同的基本数据类型的数据之间经常需要进行相互转换.例如: , 代码中 int 型 ...