[10] 过滤器 Filter
1、过滤器的基本概念和作用
2、过滤器相关的API
- Filter
- FilterChain (在Filter中init方法作为参数)
- FilterConfig (在Filter中doFilter方法作为参数)
- init(FilterConfig filterConfig)
- 该方法是对Filter对象进行初始化的方法,仅在容器初始化Filter对象结束后被调用一次,其中FilterConfig可以获取初始化参数
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- 该方法是Filter进行过滤操作的方法,是最重要的方法。我们自定义的过滤器类都要实现该方法。
- 方法体中可以对请求和响应进行预处理,FilterChain则可以将处理后的请求响应传递到过滤链上的下一个资源
- destroy()
- 该方法在容器销毁过滤器对象之前被调用
- getInitParameter(String name)
- 该方法用来获取过滤器的初始化参数,这个初始化参数在web.xml中进行配置,方式和Servlet初始化参数类似
- doFilter(ServletRequest request, ServletResponse response)
- 该方法可以将当前请求和相应传递到过滤链上的下一个资源,可能是下个过滤器,也可能是目标资源
3、示例:过滤器限制页面访问时间
3.1 创建jsp页面
3.2 自定义过滤器
public class TimeFilter implements Filter {
private int start = 0;
private int end = 24;
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("TimeFilter初始化,开始抓取初始化参数");
start = Integer.parseInt(filterConfig.getInitParameter("start"));
end = Integer.parseInt(filterConfig.getInitParameter("end"));
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("TimeFilter过滤");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int curHour = calendar.get(Calendar.HOUR_OF_DAY);
if (curHour >= end || curHour < start) {
request.setAttribute("start", start);
request.setAttribute("end", end);
request.getRequestDispatcher("/WEB-INF/notice.jsp").forward(request, response);
}
chain.doFilter(request, response);
}
public void destroy() {
System.out.println("TimeFilter爆炸");
}
}
public class TimeFilter implements Filter {
private int start = 0;
private int end = 24;
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("TimeFilter初始化,开始抓取初始化参数");
start = Integer.parseInt(filterConfig.getInitParameter("start"));
end = Integer.parseInt(filterConfig.getInitParameter("end"));
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("TimeFilter过滤");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int curHour = calendar.get(Calendar.HOUR_OF_DAY);
if (curHour >= end || curHour < start) {
request.setAttribute("start", start);
request.setAttribute("end", end);
request.getRequestDispatcher("/WEB-INF/notice.jsp").forward(request, response);
}
chain.doFilter(request, response);
}
public void destroy() {
System.out.println("TimeFilter爆炸");
}
}
3.3 配置web.xml和初始化参数
<filter>
<filter-name>timeFilter</filter-name>
<filter-class>com.zker.TimeFilter</filter-class>
<init-param>
<param-name>start</param-name>
<param-value>15</param-value>
</init-param>
<init-param>
<param-name>end</param-name>
<param-value>22</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>timeFilter</filter-name>
<url-pattern>/limit/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>timeFilter</filter-name>
<filter-class>com.zker.TimeFilter</filter-class>
<init-param>
<param-name>start</param-name>
<param-value>15</param-value>
</init-param>
<init-param>
<param-name>end</param-name>
<param-value>22</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>timeFilter</filter-name>
<url-pattern>/limit/*</url-pattern>
</filter-mapping>
4、Filter使用总结和配置说明
- 首先要实现Filter接口
- 自定义的过滤方法写在doFilter方法体中,最后并通过形参 FilterChain 的 doFilter(request, response) 方法传递请求和响应
- 然后要在web.xml中进行配置,包括过滤器的具体类,过滤文件,初始参数等
- <filter> 定义Filter的具体类
- <init-param> 定义初始化参数
- <filter-mapping> 定义过滤器的限制目录
<filter-mapping>
<filter-name>timeFilter</filter-name>
<url-pattern>/limit/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>timeFilter</filter-name>
<url-pattern>/limit/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
[10] 过滤器 Filter的更多相关文章
- javaWeb学习总结(10)- Filter(过滤器)学习(2)
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...
- javaWeb学习总结(10)- Filter(过滤器)学习
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有 web资源:例如Jsp, Servlet, 静 ...
- javaWeb学习总结(10)- Filter(过滤器)常见应用(3)
一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 package me.gacl.web.filter; import java.io. ...
- 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)
一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...
- 通过定义过滤器filter解决跨域问题
跨域是比较常见问题,比较简单的方式就是直接定义一个过滤器filter,然后在请求头里面加上一些参数.下面来看看具体的写法吧. 一.java代码 package com.hj.usera ...
- java Web 过滤器Filter详解
简介 Filter也称之为过滤器,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊 ...
- SpringBoot系列教程web篇之过滤器Filter使用指南扩展篇
前面一篇博文介绍了在 SpringBoot 中使用 Filter 的两种使用方式,这里介绍另外一种直接将 Filter 当做 Spring 的 Bean 来使用的方式,并且在这种使用方式下,Filte ...
- (十三)过滤器Filter(转)
--------转自孤傲苍狼博客 一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例 ...
- springCloud学习05之api网关服务zuul过滤器filter
前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器fil ...
随机推荐
- Big Endian与Litter Endian
Big Endian是大端,Litter Endian是小端,意思很明了,但是很难记住谁是谁.每次涉及到这个概念的时候,我都会GOOGLE一下,浪费精力. 怎样才能永远记住他们呢?网上搜索了一下,有很 ...
- jFreeChart利用CategoryDatase,ChartFactory.createBarChart生成的柱状图
package com.potevio.rnd; import java.io.File; import java.io.FileNotFoundException; import java.io.F ...
- 通过maven test 报org.apache.ibatis.binding.BindingException: Invalid bound statement
背景 直接使用eclipse工具去执行,没有问题,通过testng.xml去执行,没有问题,但通过mvn clean test执行,就报错,提示org.apache.ibatis.binding.Bi ...
- Http2改造实践:statusText丢失问题
背景: 1.项目中的nginx由http1.1改造为http2, 2.代码中采用axios的interceptors做统一返回处理,对于系统逻辑性错误弹窗(例如:表单字段唯一性校验弹窗提示) 现象: ...
- HTML DOM (文档对象模型)
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. HTML DOM 树 通过可编程的对象模型,JavaScrip ...
- zetcode :: First programs in PyQt5
练习代码,详见网站 http://zetcode.com/gui/pyqt5/firstprograms/ import sys from PyQt5 import QtWidgets from Py ...
- 浅谈服务器对SEO的影响,该如何选择服务器?
对于SEO,很多人想的都是怎么做好网站的内部优化,做好外部推广.其实SEO没什么技术含量,到网上搜别人的心得看,千篇一律,都是翻来覆去的说一样的东西,就像吃不同人做的馒头,吃来吃去就是一个味道.笔者经 ...
- 记录-新建一个web应用的过程与曲折
第一步/ 打开eclipse,菜单栏下,File–New–Other-,打开后找到web–Dynamic Web Project,然后单击Next. 解释一下,Dynamic ,动态的,变化的,Dyn ...
- 在Linux 环境下搭建 JDK 和 Tomcat
在Linux 环境下搭建 JDK 和 Tomcat 参考地址:http://www.cnblogs.com/liulinghua90/p/4661424.html [JDK安装] 1.首先下载 ...
- pycharm中的快捷键和简单设置
PyCharm3.x默认快捷键 PyCharm Default Keymap 1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Sp ...