[Demo] Simple Servlet Filter and Servlet FilterChain

Filters are pluggable classes that stand between the client and a target component (like a servlet or JSP), within a web application. We can do pre or post processing of request/response data while it is coming from client to a servlet or from the servlet back to a client. 

Create a Servlet TargetServlet with URL Pattern as “/TargetServlet” and print some content to console from its doGet method. Code for TargetServlet is given in the end.

Now create a filter that will have the same url pattern for the servlet.

package com.javajee.filters;

 

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("/TargetServlet")

public class FirstFilter implements Filter {

 

  public FirstFilter() {

  }

 

  public void init(FilterConfig fConfig) throws ServletException {

  }

 

  public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

 

    System.out.println("Inside FirstFilter. Before FilterChain.doFilter");

    chain.doFilter(request, response);

    System.out.println("Inside FirstFilter. After FilterChain.doFilter");

  }

 

  public void destroy() {

  }

}

Execute the original servlet using the specified url pattern and you will get the below output in console:

Inside FirstFilter. Before FilterChain.doFilter

TargetServlet.doGet

Inside FirstFilter. After FilterChain.doFilter

 

FilterChain Demo

Create another filter exactly as FirstServlet with the same url pattern "/TargetServlet" and name it as SecondServlet.

Modify the SecondServlet's doFilter method print statements to reflect the servlet name as SecondServlet:

public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

 

    System.out.println("Inside SecondServlet. Before FilterChain.doFilter");

    chain.doFilter(request, response);

    System.out.println("Inside SecondServlet. After FilterChain.doFilter");

  }

Execute the original servlet using the specified url pattern and you will get the below output in console:

Inside FirstFilter. Before FilterChain.doFilter

Inside SecondFilter. Before FilterChain.doFilter

TargetServlet.doGet

Inside SecondFilter. After FilterChain.doFilter

Inside FirstFilter. After FilterChain.doFilter

 

Complete Code

TargetServlet Code

package com.javajee.servlets;

 

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/TargetServlet")

public class TargetServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

 

  public TargetServlet() {

    super();

  }

 

  protected void doGet(HttpServletRequest request, HttpServletResponse response)

      throws ServletException, IOException {

    System.out.println("TargetServlet.doGet");

  }

}

 

SecondServlet.java

package com.javajee.filters;

 

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("/TargetServlet")

public class SecondFilter implements Filter {

  public SecondFilter() {

  }

  public void init(FilterConfig fConfig) throws ServletException {

  }

  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {

    System.out.println("Inside SecondFilter. Before FilterChain.doFilter");

    chain.doFilter(request, response);

    System.out.println("Inside SecondFilter. After FilterChain.doFilter");

  }

  public void destroy() {

  }

}

 

Development and Execution Environment

Eclipse Luna Java EE IDE for Web Developers and Apache Tomcat 8.0.18, using Servlet spec 3.1.

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)