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可以将数字格式化 ...
随机推荐
- Apache中KeepAlive 配置
引子 先来分析一个Yslow 测试的一个页面的前端性能. 这里所有的请求是指http请求,对于一个请求各个阶段的划分,阻挡->域名解析->建立连接->发送请求->等待响应-&g ...
- Prometheus+Grafana搭建监控系统
之前在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题.这样显得开发很被动.所以是时候搭建一套监控系统了. 由于是业余时间自己捯饬,所以神马业务层面的监 ...
- oracle 11g r2 blob类型getString报错问题
摘要: 问题: 在hibernate中实体类中blob类型字段为 private String textBlob; 查询时报错: java.sql.SQLException: 无效的列类型: getS ...
- ios 手势返回<1>2
iOS-给push出来的控制器添加全局滑动(返回)手势 在iOS中,当我们push出一个新的控制器的时候,我们可以向右拖拽屏幕的左边缘来返回(pop)到上一级控制器,但是这个功能有两个缺陷: 当自 ...
- String、StringBuilder、 StringBuffer 深入分析 源代码解析
java学习有一段时间了.但学习的东西都是框架等东西,java基础知识有点遗忘.所以重温一下java基础知识.写写文章里面有错的希望大家指正共同进步~~ 一.String 大家常常会说使用" ...
- ASIHTTPRequest-Cookie的使用
本文转载至 http://www.cocoachina.com/bbs/read.php?tid=93220&page=e&#a 持久化cookie ASIHTTPReques ...
- WCF基础之数据协定
数据协定最重要的当然就是DataContract和DataMember.这两个特性能应用到类.结构和枚举.这个两个特性跟服务契约的特点是一样的,只有被DataContract标记的类和类中被标记Dat ...
- 使用memcache进行账号验证服务
适用环境是需要频繁进行账号和请求合法性验证的地方 大致思路: 1.登陆时,服务器端接收一个账号和密码,还可以再加上用户的ip等信息通过md5等加密算法计算出一个定长的字符串作为用来验证的token 2 ...
- zabbix server 端安装
1.系统环境 [root@crazy-acong ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@crazy-acong ~] ...
- 我的Java开发学习之旅------>Base64的编码思想以及Java实现
Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...