什么是Filter
Filter被称作过滤器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。这就好比现实中的污水净化设备,它可以看一个过滤器,专门用于过滤污水杂质。
Filter接口中的方法
方法声明:init(FilterConfig filterConfig)
功能描述:init()方法用来初始化过滤器,开发人员可以在init()方法中完成与构造方法类似的初始化功能。如果初始化代码要使用到FilterConfig对象,那么,这些初始化代码就只能在Filter的init()方法中编写,而不能在构造方法编写
方法声明
doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
功能描述
doFilter()方法有多个参数,其中,参数request 和 response"为 Web服务器或Filter 链中的上一个Filter 传递过来的请求和响应对象;参数chain 代表当前 Filter链的对象,在当前 Filter对象中的doFilter()方法内部需要调用FilterChain 对象的doFilter)方法,才能把请求交付给Filter 链中的下一个 Filter 或者目标程序去处理
方法声明:
destroy()
功能描述
destroy()方法在Web服务器卸载Filter对象之前被调用,该方法用于释放被Filter对象打开的资源,例如关闭数据库和IO流
实现第一个Filter程序
(1)创建一个名为MyServlet的Servlet类
package chapter11;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyServlet
*/
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().write("Hello MyServlet ");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
(2)在web.xml文件中对Servlet进行如下配置
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>chapter11.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
Filter链
在chapter08项目的cn.itcast.chapter08.flter 包中创建过滤器MyFiter03,使用该过滤器来获取web.xml中设置的参数
package cn.itcast.chapter08.filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
public class myFilter3 implements Filter {
private String characterEncoding ;
FilterConfig fc;
public void init(FilterConfig fConfig) throws ServletException {
//获取FilterConfig对票
this.fc = fConfig;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException【参数信息
characterEncoding=fc.getInitParameter("encodi