15、filter

filter

  1. Filter :过滤器,过滤请求和响应。
  2. web三大组件
  • Servlet
  • Filter:是用来执行过滤任务的对象,作用于

1) 请求一个资源(动态资源servlet,jsp,静态资源)

2)来自于一个资源的响应

3)两个都可以

filter过滤请求和响应

1)filter可以拦截请求(request),可以修改请求头,请求内容

2)filter可以拦截来自服务器的响应(response),可以修改响应头和响应内容

3)放行请求

  • Listener
  1. filter执行原理
  • 未加过滤器

在这里插入图片描述

  • 加过滤器
    在这里插入图片描述
  1. filter的执行周期
  • 创建-初始化:服务器已启动,(项目加载进服务器),创建filter对象
  • 每次拦截都执行:doFilter方法
  • 销毁:项目从服务器中卸载(destory)
  1. filter-urlpatter配置
  • 精确匹配:写要拦截的资源的详细路径 /hello.jsp /page/a.jsp
<url-pattern>/pages/a.jsp</url-pattern>
  • 路径匹配:/路径名/* 拦截所有访问(路径名)下的资源,*表示所有
<url-pattern>/pages/*</url-pattern>
  • 后缀匹配:*.后缀名 所有已给定的后缀结尾的都拦截
<url-pattern>*.jsp</url-pattern>
  • filter能拦截的资源:
<!--并不能拦截所有可拦截的类型文件 -->
<url-pattern>*.*</url-pattern>
  1. 通过request拦截
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest req=(HttpServletRequest) request;
		String uri=req.getRequestURI();
		StringBuffer url=req.getRequestURL();
		System.out.println("过来的请求uri:"+uri);
		System.out.println("过来的请求url:"+url);
		if(uri.endsWith("jsp")){
			System.out.println("拦截jsp结尾的");
		}else{
			chain.doFilter(request, response);
		}
	}
  1. filter放行之前写中文有乱码

在这里插入图片描述

  1. filterConfig
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		//FilterConfig是封装filter配置的信息
		String filterName=filterConfig.getFilterName();//filter别名
		//filter初始化参数
		String filterParameter=filterConfig.getInitParameter("username");
		//ServletContext-->对应我们的web应用
		ServletContext servletContext=filterConfig.getServletContext();
		//获取web初始化参数
		String initParameter=servletContext.getInitParameter("user");
		System.out.println("filterParameter"+filterParameter+"  "+"initParameter"+initParameter);
	}
  1. filter链(Bfilter配置在Afilter前)

在这里插入图片描述

  1. dispatcher配置

web.xml

  <!-- 全局错误页面配置 -->
  <error-page>
  	<!-- 错误发生代码 404 500 等 -->
  	<error-code>500</error-code>
  	<!-- 指定发生错误以后的页面 -->
  	<location>/test.jsp</location>
  </error-page>
<filter-mapping>
  	<filter-name>Bfilter</filter-name>
  	<url-pattern>/pages/a.jsp</url-pattern>
  	<!-- 
  	dispatcher  可以设置多个,告诉服务器都拦截哪些方法到达的资源
  	- FORWARD:拦截转发过来的
	- INCLUDE:拦截包含的,包含这个地址的会被拦截,拦截动态包含,不拦截静态包含
	- REQUEST:直接请求这个地址会被拦截,默认的 get  post
	- ASYNC:
	- ERROR:发生错误,去全局配置的一个错误页面会被拦截,不是errorPage指向的页面(转发得到的),指的是全局的配置
  	 -->
  	<dispatcher>REQUEST</dispatcher>
  	<dispatcher>FORWARD</dispatcher>
  	<dispatcher>INCLUDE</dispatcher>
  	<dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>ERROR</dispatcher>
```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值