Filter过滤器
什么是Filter
在开发中,通过浏览器访问服务器端的目标资源时,过滤器实现拦截功能。如果过滤器判断是合理的请求,就方形,允许访问目标资源。
Filter在web应用中拦截的过程如下:
- Filter过滤器就是一个实现了javax.servlet.Filter接口的类,在接口中定义了三个方法:
- init方法:在过滤器对象被创建后,执行初始化方法
- doFilter方法:在这个方法里面实现拦截和放行
- destroy方法:在过滤器销毁后,执行
实现第一个Filter程序
步骤:
创建MyServlet,通过浏览器访问servlet资源
package chapter08;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class MyServlet
*/
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().print("hello Filter");
}
/**
* @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);
}
}
创建MyFilter,拦截访问servlet资源,如果要放行,执行doFilter方法
package chapter08;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* Servlet Filter implementation class MyFilter
*/
public class MyFilter implements Filter {
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 允许访问目标资源
chain.doFilter(request, response);
System.out.println("输出内容了,代表拦截响应");
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
a.创建一个frist.jsp,该页面用来输出内容
b.创建ForwardServlet的Servlet类,该类用于将请求转发给first.jsp页面。
同时也要配置web.xml
c.创建一个过滤器ForwardFilter.java,该类过滤器专门用于对frist.jsp页面进行拦截。
为了拦截ForwardServlet通过forward()方法转发的frst.isp 页面,需要在web xml文件中的对应过滤器配置信息中增加一-个子元素,将该元素的值设置为FORWARD,修改后的ForwardFilter 的映射