一、步骤
1.创建一类实现Filter接口,重写父类的方法
public class SimpleFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub } public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub } }
2.配置web.xml文件,
<!-- filter配置 -->
<filter>
<filter-name>filter</filter-name>
<filter-class>com.mxp.filter.UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<!-- <url-pattern>*.do</url-pattern> --><!-- url的配置方式 -->
<url-pattern>/*</url-pattern><!-- 通配过滤的是所有url -->
</filter-mapping>
3.在dofilter()方法中处理可以放行的请求
二、过滤器的生命周期
1.服务器启动的时候执行初始化方法,它的初始化方法在servlet的init()方法之前执行
2.在用户每一次发起url请求的时候会执行dofilter()方法,在doget()和dopost()方法之前执行.需要注意的是filter过滤的是url,而servlet的doget和dopost方法处理的是request请求
3.在服务器销毁的时候执行destroy()方法
三、实例
1.index.jsp添加一个超链接
<a href="login.do">测试</a> <br>
2.新建servlet文件,用来处理超链接的请求
public class UserServlet extends HttpServlet { @Override
public void init() throws ServletException {
// TODO Auto-generated method stub System.out.println("servletinit");
} @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("servletdo");
req.getRequestDispatcher("main.jsp").forward(req, resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
3.添加过滤器
public class UserFilte implements Filter { // 销毁
public void destroy() {
System.out.println("destroy");
} // 过滤
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
System.out.println("UserFilte do");
arg2.doFilter(arg0, arg1);//相当于放行
} // 初始化
public void init(FilterConfig arg0) throws ServletException { System.out.println("UserFilteinit");
} }
4.web.xml配置
<servlet>
<servlet-name>USER</servlet-name>
<servlet-class>com.hgd.servlet.UserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>USER</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping> <filter>
<filter-name>filter</filter-name>
<filter-class>com.hgd.filter.UserFilte</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
5.部署并打开主页,在控制台可以看到当服务器运行过滤器已经初始化了
6.点击“测试”超链接,从控制台输出可以看出只有当过滤器请求通过了才会执行servlet中的dopost或doget方法