JavaWeb学习——过滤器Filter学习
Filter过滤器简介
Filter实际上就是对web资源进行拦截,做一些处理后交给Servlet处理,相当于在客户端和服务端资源文件之间加了一层过滤网。在过滤器种经过逻辑判断将不符合要求的资源过滤掉。一般情况下是对请求request的过滤,当然也可以对相应进行过滤
原理图:
过滤器的一般应用场景:
- 统一设置编码格式
- 设置权限访问
- 敏感字符过滤
2.Filter具体是怎么实现拦截的
- Filter接口种有一个doFilter方法,当我们写好Filter并设置对哪个web资源进行拦截后,WEB服务器每次在调用WEB资源的service()方法之前都会先调用doFilter方法。该方法中可以决定是否过滤掉用户的请求。
- web服务器调用Filter的doFilter方法时,会传递一个FilterChain的对象进来,它也提供了一个doFilter方法,开发人员根据需求决定是否调用此方法(chain.doFilter(request,
response);)。若调用,web服务器通过调用web资源的service方法,用户就可以访问到请求的资源,否则就访问不了。
3.Filter开发的基本步骤
-
①编写Java类实现Filter接口,实现doFilter方法
package com.muhan.Filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class myFilter implements Filter { //过滤器初始化方法 @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("过滤器初始化"); } //主要业务逻辑 @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException { //把ServletRequest强转成HttpServletRequest HttpServletRequest request = (HttpServletRequest) req; //把ServletResponse强转成HttpServletResponse HttpServletResponse response = (HttpServletResponse) resp; //设定字符编码 request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); System.out.println("myFilter执行前"); filterChain.doFilter(request, response); System.out.println("myFilter执行后"); } @Override public void destroy() { System.out.println("过滤器销毁了"); } }
-
②在web.xml中配置Filter
<!--配置过滤器--> <filter> <filter-name>myFilter01</filter-name> <filter-class>com.muhan.Filter.myFilter</filter-class> </filter> <!--映射过滤器--> <filter-mapping> <filter-name>myFilter01</filter-name> <!--/*表示拦截所有请求--> <url-pattern>/*</url-pattern> </filter-mapping>