Filter位于javax.servlet.Filter,作用是在请求到达Servlet处理之前进行处理
 Servlet处理完后再次对返回的结果进行拦截处理(多个过滤器)


  1. Filter接口使用方法
     实现Filter的接口,重写init()--初始、destroy()--销毁、doFilter()--逻辑处理

  2. web.xml设置过滤内容
     一个filter也可以设置多个filter-mapping
    <!-- 配置过滤器,后面的init表示自己定义的常量,在代码中可以获取到(暂时没发现设置这个常量有什么用) -->  
    <filter>  
    <filter-name>myFilter</filter-name>  
    <filter-class>com.test.c_171030.MyFilter</filter-class>  
    <init-param>  
    <param-name>data</param-name>  
    <param-value>a data</param-value>  
    </init-param>  
    </filter>
    <!-- 配置过滤器需要过滤的url -->  
    <filter-mapping>  
    <filter-name>myFilter</filter-name>  
    <url-pattern>/MyServlet</url-pattern>   <!--只过滤路径为MyServlet的请求-->
    <!--<url-pattern>/*</url-pattern>  过滤所有请求-->
    </filter-mapping>
    data=filterConfig.getInitParameter("data");  
    System.out.println("获取web.xml中存储的数值为:"+data);  
  3. 实例
     ServletRequest/Response中只提供了获取基本信息的方法,没有获取用户请求类型的方法所以需要转成HttpServletxxx
    public class FileterTest implements Filter{
    @Override
    public void destroy() {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpReq = (HttpServletRequest)request;
        HttpServletResponse httpResp = (HttpServletResponse)response;
        httpResp.setContentType("text/plain");
        httpResp.setCharacterEncoding("UTF-8");
    //访问请求的目标资源   
        chain.doFilter(httpReq , httpResp);
    }
    @Override
    public void init(FilterConfig config) throws ServletException {
    }
    }
  • text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
  • text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。
  • Content-Type:用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据
  • MIME:MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。