Java学习日记3(过滤器)

    xiaoxiao2021-03-25  69

    过滤器

    访问Servlet之前和之后,可以增加一些我们的业务程序,就是过滤器。 执行顺序:

    如何实现Filter:

    编写Filter类实现javax.servlet.Filter接口配置Filter过滤哪些Servlet

    在xml配置中,哪个Filter配置在前面就先执行哪个 Xml配置:

    <filter> <filter-name>logger</filter-name> <filter-class>com.oracle.LoggerFilter</filter-class> </filter> <filter-mapping> <filter-name>logger</filter-name> <url-pattern>/admin/*</url-pattern>//意思是过滤admin文件夹下所有的页面 </filter-mapping>

    也可以用Annotation配置,不过xml可以保证Filter的顺序。

    @WebFilter("/admin/*")

    一个简单的Filter:

    package com.oracle; 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; public class FirstFilter implements Filter { FilterConfig fc; @Override public void destroy() { System.out.println("FirstFilter......destroy..........."); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("FirstFilter......dofilter..........."); System.out.println("执行目标Servlet之前。。。。。。。。。。。。。。。。。"); arg2.doFilter(arg0, arg1);//把当前请求响应交给下一个目标,这里执行下一个Filter或者是目标Servlet。 System.out.println("执行目标Servlet之后。。。。。。。。。。。。。。。。。。"); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("FirstFilter......init..........."); this.fc=arg0; } }

    再写另一个过滤器。。

    package com.oracle; 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; import javax.servlet.annotation.WebFilter; //@WebFilter("/admin/*") public class LoggerFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("Logger....前日志。。。。。。。"); arg2.doFilter(arg0, arg1); System.out.println("Logger....后日志..........."); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }

    在控制台的显示:

    Logger....前日志。。。。。。。 FirstFilter......dofilter........... 执行目标Servlet之前。。。。。。。。。。。。。。。。。 HelloServlet.....service...... 执行目标Servlet之后。。。。。。。。。。。。。。。。。。 Logger....后日志...........

    如果想重写Request和Response中的方法,那么就可以继承以下4个包装类:

    ServletRequestWrapperServletResponseWrapperHttpServletRequestWrapperHttpServletResponseWrapper

    用过滤器我们可以实现:

    过滤IP图片防外链(只能从自己的网站上看到正确图片,从别的网站请求看到的是不同的图片)重写一个好看的404页面,对用户友善一些

    这里就这些啦~

    转载请注明原文地址: https://ju.6miu.com/read-35027.html

    最新回复(0)