过滤器的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 ...
随机推荐
- EasyExcel写文件
公共部分 HttpServletResponse // 需要处理response HttpServletResponse response; response.reset(); response.se ...
- MSSQLSERVER 服务运行内存设置较小导致启动服务失败
问题产生原因: 手动设置MSSQLSERVER 运行内存,设置值未达到MSSQLSERVER 服务运行内存最低值(max server memory 所允许的最小内存量是 128 MB.),导致MSS ...
- 架构 MVC MVP MVVM 简介 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- java之spring之对象的创建
首先提供目录结构如下: 下面提供各文件代码,以供参考: UserDynamicFactory.java package cn.sxt.factory; import cn.sxt.vo.User; / ...
- 2019 4399java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.4399等公司offer,岗位是Java后端开发,最终选择去了4399. 面试了很多家公司,感觉大部分公司考察的点 ...
- JavaWeb 之 Filter:过滤器
一.Filter 概述 1.概念 web 中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能. 2.作用 一般用于完成通用的操作.如:登录验证.统一编码处理.敏感字符等功能 ...
- Mac版StarUML破解方法
StarUML是用nodejs写的.确切的说是用Electron前端框架写的.新版本中所有的starUML源代码是通过asar工具打包而成.确切的代码位置在“%LOCALAPPDATA%\Progra ...
- Flink实战学习资料
这份资料我已经看了一些,感觉挺不错的,在这里分享一下,有需要的可以购买学习.
- JMeter性能测试,入门
原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...
- ss-套接字监控工具
ss(Socket Statistics) - another utility to investigate sockets(研究套接字的另一个实用程序,原先的是netstat) ss用于转储套接字统 ...