过滤器的API
1、API
a、生命周期(和servletcontext相似):
(1)创建:服务器启动的时候创建(执行init方法)。
(2)销毁:服务器关闭的时候销毁(执行destory方法)。
b、filterConfig.getFilterName():读取配置文件中的名字。
getInitParameter():读取配置文件中的初始化配置参数。
public class FilterDemo implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
String s1=filterConfig.getFilterName();
String s2=filterConfig.getInitParameter("zhai");
System.out.println(s1);
System.out.println(s2);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
public void destroy() {
}

配置文件:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
<init-param>
<param-name>zhai</param-name>
<param-value></param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/filter</url-pattern>
</filter-mapping>
2、配置文件:
(1)全名匹配:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/servlet1</url-pattern>
</filter-mapping>
即访问的虚拟路径名必须为servlet1,匹配的是全部的名字。
(2)目录匹配:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/abc/*</url-pattern>
</filter-mapping>
即必须为abc目录下的资源。
(3)后缀名匹配:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
3、dispatcher:访问的方式。
(1)REQUEST:默认值,代表直接访问某个资源时执行此filter。
在部队REQUEST参数进行配置的时候:
创建两个Servlet,由servlet1请求转发到servlet2:
Servlet1:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1运行了");
request.getRequestDispatcher("servlet2").forward(request,response);
}
Servlet2:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2运行了");
}
过滤器:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("过滤器运行了");
}

当在配置文件中添加了dispatcher属性后:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
只有访问Servlet1的时候有过滤器,因为请求转发的时候,只有第一次的时候是直接访问,请求转发到Servlet2的时候不是直接访问。
当把Servlet1改为重定向到Servlet2的时候,Servlet1和Servlet2触发过滤器:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1运行了");
response.sendRedirect(request.getContextPath()+"/servlet2");
}
因为重定向是对服务器的重新访问,而请求转发发生在服务器内部。

(2)FORWARD:
<filter>
<filter-name>FilterDemo</filter-name>
<filter-class>pers.zhb.filter.FilterDemo</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
只有转发的时候才能触发过滤器:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1运行了");
response.sendRedirect(request.getContextPath()+"/servlet2");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2运行了");
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1运行了");
request.getRequestDispatcher("/servlet2").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2运行了");
}

(3)INCLUDE:包含其他资源的时候触发过滤器。
(4)ERROR:发生错误的时候触发过滤器。
过滤器的API的更多相关文章
- WEBAPI使用过滤器对API接口进行验证
用户登录控制器:[ActionFilter]自定义过滤器 用户信息:var userData = new JObject(); userData.Add(" ...
- Hbase学习(三)过滤器 java API
Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...
- MVC和Web API 过滤器Filter [转]
ASP.NET MVC 支持以下类型的操作筛选器: · 授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性) ...
- Web Api 过滤器之 ExceptionFilter 异常过滤器
一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...
- MVC和Web API 过滤器Filter
MVC和Web API Filter(过滤器) ASP.NET MVC 支持以下类型的操作筛选器: · 授权筛选器.这些筛选器用于实现IAuthorizationFilter和做出关于是 ...
- Servlet过滤器
Servlet过滤器 [TOC] 1.过滤器的基本概念 1.1.基本概念 过滤器(Filter)属于tomcat服务器中的Servlet功能.在普通的javaweb服务中,jsp中的请求要被Servl ...
- [Java] JSP笔记 - Filter 过滤器
一.什么是Web过滤器 Servlet API 很久以前就已成为企业应用开发的基石,而 Servlet 过滤器则是对 J2EE 家族的相对较新的补充. Servlet 过滤器是可插入的 Web 组件, ...
- DELPHI下API简述(1800个API)
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...
- Filter过滤器(1)
Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 ht ...
随机推荐
- Java常用函数式接口--Predicate接口使用案例
Java常用函数式接口--Predicate接口使用案例 该方法可以使用and来优化: 调用:
- .Net MVC如何渲染带有网页标签的字符串
有时候我们在解析一段文字时,可能文字中会包含网页上的标签,如div.p等等.那么如果将这种文字渲染成对应的标签效果呢?如图,最近博主就拿到了这么一段字符串(如图) 由于中间带有很多特殊字符,用Html ...
- .net Aop 实现原理
本文实现所有继承BaseModel的类都通过代理拦截 using System; using System.Reflection; using System.Collections.Generic; ...
- 使用@Async注解创建多线程,自定义线程池
说明 使用@Async注解创建多线程非常的方便,还可以通过配置,实现线程池.比直接使用线程池简单太多.而且在使用上跟普通方法没什么区别,加上个@Async注解即可实现异步调用. 用法 AsyncTas ...
- idea下java项目的打包与使用
一. 打包 (1)打开项目结构,选择Artifacts --> + --> JAR --> From modules with dependencies ... 有main方法就添加 ...
- 手写MQ框架(二)-服务端实现
一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...
- JavaScript之原型、函数、实例
JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { // 执行代码 } 当调用该函数时,会执 ...
- 安装仪表盘控件Iocomp会遇到的几个常见问题
相信从事HMI和自动化开发专业的小伙伴在使用工业仪表盘和图表控件时,都很熟悉怎么安装和操作Iocomp产品(毕竟它功能太强大了,基本人手一份的节奏),但是小编想肯定还是有很多和小编一样的入门的伙伴在安 ...
- How to set up "lldb_codesign" certificate!
To use the in-tree debug server on macOS, lldb needs to be code signed. TheDebug, DebugClang and Rel ...
- PHP使用Redis的Pub/Sub(发布订阅)命令
1.概念 名称 含义 channel 频道:生产者和消费者直接操作的对象 publish 生产者:向channel发送消息 subscribe 消费者:订阅一个或多个channel psubscrib ...