What are Filters in Java J2EE applications.
Points To Remember
- A filter is hit before the servlet or a controller is hit and before the response is sent back to the client.
- Filters can be used to apply some action on application level.
- A filter implements the javax.servlet.Filter interface and the primary filter functionality is implemented by the doFilter() method of the filter.
- Filters can be used to manipulate both requests from client and response from server.
- Authentication Filters
- Data compression Filters
- Encryption Filters
- Filters that trigger resource access events
- Image Conversion Filters
- Logging and Auditing Filters
- MIME-TYPE Chain Filters
- Tokenizing Filters
- XSL/T Filters That Transform XML Content
Example : Implementation of a Filter
web.xml -
It contains the following
- Welcome file list
- Mapping for a filter named MyFilter
- Mapping for a servlet named DemoServlet
<web-app id="WebApp_ID" version="2.5" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>FilterDemo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>MyFilter</filter-name> <filter-class>com.ekiras.filter.MyFilter</filter-class> <init-param> <param-name>my-param</param-name> <param-value>my-param-value</param-value> </init-param> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <description></description> <display-name>DemoServlet</display-name> <servlet-name>DemoServlet</servlet-name> <servlet-class>com.ekiras.servlet.DemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DemoServlet</servlet-name> <url-pattern>/DemoServlet</url-pattern> </servlet-mapping> </web-app>
Filter - MyFilter
This filter implements the Filter interface and overrides its methods init(), destroy() and doFilter(). We write the filtering logic in the doFilter() method. In this case we are just going to add the init parameters for the filter to the response object inorder to show it on the jsp. filterChain.doFilter() method will take the control to the requested servlet or jsp. After a response has been set the control comes back to this filter.package com.ekiras.filter; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; // Implements Filter class public class MyFilter implements Filter { // To get The FilterConfig object FilterConfig filterConfig = null; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } public void destroy() { } //doFilter() method is the method where we write filtering logic. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { servletResponse.setContentType("text/html"); PrintWriter out = servletResponse.getWriter(); // Get init parameter out.println("my-param (InitParameter): " + filterConfig.getInitParameter("my-param")); out.println(" Parameters: "); EnumerationparameterNames = servletRequest.getParameterNames(); if (parameterNames.hasMoreElements()) { while (parameterNames.hasMoreElements()) { String name = parameterNames.nextElement(); String value = servletRequest.getParameter(name); out.println("name:" + name + ", value: " + value + " "); } } else { out.println("---None--- "); } out.println(" Start Regular Content:
"); // Pass request back down the filter chain filterChain.doFilter(servletRequest, servletResponse); out.println("
End Regular Content: "); } }
Servlet - DemoServlet
This is a demo servlet and just calls a method performTask() to print a demo message.package com.ekiras.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DemoServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DemoServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { performTask(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { performTask(request, response); } private void performTask(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("TestServlet says hi"); } }
Jsp - index.jsp
This is the jsp that will be hit. This jsp just contains a demo message .<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1">; <html> <head> <title>Test Filter</title> </head> <body> Hi This is My JSP </body> </html>
No comments: