zoukankan      html  css  js  c++  java
  • 过滤器

    一:基础介绍

    1.介绍

      基本功能是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现一些特殊的功能。

      在Servlet api中定义了三个接口供开发人员编写Fileter程序:Filter,FilterChain,FilterConfig  

      Filter程序是实现了Filter接口的java类,与Servlet类似,由Servlet容器进行调用与执行。

      Filter程序需要在web.xml文件中进行注册和设置它所能拦截的资源,可以拦截JSP,Servlet,静态图片文件和html文件。

    2.Filter重要总结

      是JavaWeb的一个重要组件,可以对发送到Servlet的请求进行拦截,也可以对响应进行拦截。

      需要在web.xml中进行配置与映射。

    3.创建一个Fileter  

      创建一个Filter类,实现Filter接口。

      在web.xml中配置和映射,其中url-pattern指定Filter可以拦截哪些资源,就是可以通过哪些url访问到Filter

    4.Filter接口

      public void init(FilterConfig arg0)

        FilterConfig 类似与ServletConfig。

        可以在web.xml文件中配置当前的Filter初始化参数,配置与Servlet类似。

      public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)

        doFilter(request,response):把请求传给Filter链的下一个Filter。如果是最后一个Filter,就把请求给目标servlet或Jsp。

      

    5.Filter拦截顺序

      和<filter-mapping>配置顺序有关,靠前的先执行。

    二:基础案例helloFilter

    1.项目目录

      

    2.index.jsp

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4 <meta charset="UTF-8">
     5 <title>Insert title here</title>
     6 </head>
     7 <body>
     8     <a href="test.jsp">TO Test Page</a>
     9 </body>
    10 </html>

    3.test.jsp

     1 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     2     pageEncoding="ISO-8859-1"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <h2>Test Page</h2>
    11 </body>
    12 </html>

    4.HelloFilter.java

     1 package web;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.Filter;
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.FilterConfig;
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletRequest;
    10 import javax.servlet.ServletResponse;
    11 
    12 public class HeloFilter implements Filter {
    13     @Override
    14     public void destroy() {
    15         System.out.println("destory");
    16     }
    17     @Override
    18     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    19             throws IOException, ServletException {
    20         System.out.println("doFilter");
    21         chain.doFilter(request, response);
    22 
    23     }
    24     @Override
    25     public void init(FilterConfig arg0) throws ServletException {
    26         System.out.println("init");
    27     }
    28 
    29 }

    5.web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     4     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     5     id="WebApp_ID" version="3.1">
     6     <!-- 注册Filter -->
     7     <filter>
     8         <filter-name>heloFilter</filter-name>
     9         <filter-class>web.HeloFilter</filter-class>
    10     </filter>
    11     <!-- 映射Filter -->
    12     <filter-mapping>
    13         <filter-name>heloFilter</filter-name>
    14         <url-pattern>/test.jsp</url-pattern>
    15     </filter-mapping>
    16 </web-app>

    6.效果

      

    三:dispatcher节点

    1.介绍

      <dispatcher>指定过滤器拦截的资源被Servlet容器调用的方式,可以是Request,include,forward,error之一。

      默认是request。

      可以同时设置多个。

    2.方式的使用

      直接访问,就走request。

      当jsp里面使用<jsp:forward>时,forward如果被允许,就会走过滤器

      当jsp里面有<jsp:include>时,include被允许,也会走过滤器

      当去错误页面,一般有两种方式:

        在当前页面写<%@ page errorPage="/test.jsp">这时,这是一个转发,会走forward。

        在web.xml中可以定义<erroe-page>标签,这时如果允许error,则走error。

    3.使用位置

      在web.xml中的<filter-mapping>中定义<dispatcher>

    四:过滤器应用

    1.禁用浏览器缓存的过滤器

      有三个Http响应头字段都可以禁止浏览器缓冲当前页面,他们在Servlet中的示例代码如下:

      response.setDateHeader("Expires",-1);

      response.setHeader("Cache-Control","no-cache");

      response.setHeader("Pragma","no-cache");

    2.字符编码的过滤器

      如果浏览器上出现乱码,可以在jsp里书写request.setCharactEncoding("UTF-8");

      但是页面太多,不方便,所以定义一个字符编码过滤器。

      然后在web.xml中配置。

    3.

  • 相关阅读:
    文件上传笔记
    使用customize-cra,react-app-rewired扩展create-react-app
    regeneratorRuntime is not defined报错处理
    gulp使用笔记
    pyinstaller打包带图标时报错问题
    不使用npm eject 修改create-react-app的wepack配置less-loader
    mockjs使用笔记
    树莓派安装TPLINK_WN725n v2网卡驱动
    csv数据文件如何设置
    Jmeter多线程token传递
  • 原文地址:https://www.cnblogs.com/juncaoit/p/7518294.html
Copyright © 2011-2022 走看看