Servlet---过滤器

简介: 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/75804651 简介要实现过滤器,必须实现Filter接口,并再web.xml或者注解中定义过滤器。
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/75804651

简介

要实现过滤器,必须实现Filter接口,并再web.xml或者注解中定义过滤器。过滤器有三个主要方法:
- init(FilterConfig config) 获得初始化参数,用法与servlet相同,需要配置初始化参数
- doFilter(ServltRequest request,ServletResponse response,FilterChain chain) 执行过滤流程
- destory()过滤器关闭时执行

web.xml 配置过滤器

与Servlet的配置基本类似,除了url-pattern外,还可以通过servlet指定

<filter>
    <filter-name>FirstFilter</filter-name>
    <filter-class>filter.FirstFilter</filter-class>
    <init-param>
        <param-name>name</param-name>
        <param-value>tom</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

通过servlet-name指定servlet

<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <servlet-name>dispatcher.Dispatch</servlet-name>
</filter-mapping>

web3.0中使用注解配置过滤器

@WebFilter(
        filterName="WrapperFilter",
        urlPatterns={"/*"},
        servletNames={},
        initParams={
            @WebInitParam(name="name",value="tom"),
            @WebInitParam(name="password",value="123")
        }
        )

当同时有urlPattern和servletNames,则先对比urlPattern 再对比servletNames

多个过滤器

一个servlet可以同时有多个过滤器,执行时,按照web.xml先后顺序组装成一条链,执行完毕后,限制性最后进来执行的过滤器,即后进先出,类似于栈。

同时具有两个过滤器的情况:

// FirstFilter
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("start-doFilter---FirstFilter");
        arg2.doFilter(arg0, arg1);
        System.out.println("end-doFilter---FirstFilter");
    }

// SecondFilter
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("start---doFilter---SecondFilter");
        chain.doFilter(request, response);
        System.out.println("end---doFilter---SecondFilter");
    }

// 结果:
        start-doFilter---FirstFilter
        start---doFilter---SecondFilter
        end---doFilter---SecondFilter
        end-doFilter---FirstFilter

过滤器类别

  • request 用户直接访问页面时,调用过滤器
  • forward 通过RequestDispatcher的forward访问时调用过滤器
  • include 通过RequestDispatcher的include访问时调用过滤器
  • error 一场处理机制调用时,调用过滤器
  • async 异步

当Test1被forward方式访问时,触发FirstFilter过滤器

<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/Test1</url-pattern>
    <dispatcher>forward</dispatcher>
</filter-mapping>

触发方式

// Servlet
    RequestDispatcher dispatch = req.getRequestDispatcher("/Test1").forward(req, resp);
// JSP
  <jsp:forward page="index.jsp"></js

error

error-page可以在发生特定的错误时,跳转到指定的页面

 <error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
 </error-page>

由error-page跳转的页面需要经过error类型的过滤器,配置dispatcher后,发生错误时,过滤器可以采取相应措施

<filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/error.jsp</url-pattern>
    <dispatcher>error</dispatcher>
</filter-mapping>
相关文章
|
4月前
|
前端开发 Java 程序员
Servlet/过滤器/拦截器/监听器:
Servlet接口在Sun公司有两个默认的实现类:HttpServlet、GenericServlet。Servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
|
8月前
|
存储 Java 数据安全/隐私保护
servlet过滤器与监听器
前言 Servlet 过滤器和监听器是 Java Web 应用程序中常见的两种组件,它们提供了各种扩展 Web 应用程序功能的方式。 总的来说,过滤器和监听器都可以通过 Java Web 应用程序的配置文件或注解进行使用,方便灵活,并可以很好地实现框架与业务逻辑的分离,提高代码可维护性和扩展性。 过滤器(Filter) 1. 参数验证和转换:可以拦截用户提交的数据,并对数据格式进行验证、修正或转换。 2. 访问控制和认证:可以拦截请求并检查用户是否有访问特定资源的权限。 3. 日志记录:可以拦截请求并输出相应的日志信息,用于系统运行时的监测与故障排除。 4. 资源压缩和解密: 可以拦截响应并对
49 0
|
10月前
|
Java 数据安全/隐私保护
【Java Web编程 十】深入理解Servlet过滤器
【Java Web编程 十】深入理解Servlet过滤器
87 0
|
11月前
|
Java 容器
Servlet 过滤器方法
Servlet 过滤器方法
55 0
|
11月前
|
XML Java 数据安全/隐私保护
JSP 和 Servlet 中的过滤器都是 Java 类。
JSP 和 Servlet 中的过滤器都是 Java 类。
60 0
Servlet学习——过滤器
Servlet学习——过滤器
47 0
|
XML 设计模式 前端开发
Servlet、过滤器、监听器、拦截器
Servlet是javaEE规范中的一种,javaEE中的规范很多除了Servlet还有很多我们熟悉的JSP、JDBC、RMI、XML、EJB、JTS等等。
124 0
Servlet、过滤器、监听器、拦截器
|
前端开发 Java 应用服务中间件
servlet中的Filter接口(过滤器接口)
servlet中的Filter接口(过滤器接口)
162 0
servlet中的Filter接口(过滤器接口)
|
前端开发 Java 数据安全/隐私保护
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
用servlet和过滤器实现简单的权限管理和敏感词过滤功能
|
存储 编解码 Java
Java Web之Servlet中过滤器与监听器的解析及使用(附源码)
Java Web之Servlet中过滤器与监听器的解析及使用(附源码)
127 0