版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/84668257
Filter被称作过滤器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而实现一些特殊功能,
Filter接口包含了三个方法
init()方法主要就是用来初始化过滤器,只会在web程序加载的时候调用一次
doFilter()方法是响应客户端请求的,只要有请求就会被调用
destroy()方法在web服务器卸载Filter对象时被调用,
下面通过一个样例实现一下Filter是如何对servlet程序的调用进行拦截的
1、创建名为web-chapter08 的web项目,并在项目中创建一个名为cn.itcast.chapter08.filter包,在该包下创建一个名为MyServlet的servlet
代码如下:
package cn.itcast.chapter08.filter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write("Hello MyServlet");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
并在web.xml文件中进行配置,
配置代码如下:
<servlet>
<description></description>
<display-name>MyServlet</display-name>
<servlet-name>MyServlet</servlet-name>
<servlet-class>cn.itcast.chapter08.filter.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
将web-chapter08部署到tomcat上,并启动tomcat,在浏览器网址栏输入http://localhost:8080/web-chapter08/MyServlet结果如下:
2、创建名为MyFilter的Filter类
在cn.itcast.chapter08.filter包中创建MyFilter,该类用于拦截MyServlet程序,实现代码如下:
package cn.itcast.chapter08.filter;
import java.io.*;
import javax.servlet.Filter;
import javax.servlet.*;
public class MyFilter implements Filter {
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
PrintWriter out =response.getWriter();
out.write("Hello MyFilter!");
}
public void destroy() {
// TODO Auto-generated method stub
}
}
同样需要在web.xml中进行配置,代码如下:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>cn.itcast.chapter08.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/MyServlet</url-pattern>
</filter-mapping>
启动tomcat,在浏览器网址栏输入http://localhost:8080/web-chapter08/MyServlet结果如下:
可以看到虽然网址访问的是MyServket,但是出现的结果还是MyFilter的内容,至此我们的第一个Filter程序就正式完成了