Servlet Tutorial
A filter is an object that can transform the header and content (or both) of a request or response. Filters are deployed on the container and can be applied to either all requests for a resource or can be conditionally applied to certain types of requests or requests for certain types of resources.
Here's a simple guide to creating a filter using Java Servlet API:
Step 1: Create a new dynamic web project
Create a new dynamic web project in your IDE.
Step 2: Create a New Filter
In the Project Explorer, right-click on your newly created project > New > Class. In the next window, enter the details of your filter (like package name, class name, etc.) and click on Finish.
Step 3: Write the Filter Code
Your filter class should implement javax.servlet.Filter
. Here's an example of a simple logging filter:
package com.example; 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; public class LoggingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // This method is called by the web container to indicate to a filter that it is being // placed into service. We can initialize filter configuration objects here. System.out.println("LoggingFilter initialized"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // This method is called by the container each time a request/response pair is passed // through the chain due to a client request for a resource at the end of the chain. System.out.println("LoggingFilter request"); chain.doFilter(request, response); System.out.println("LoggingFilter response"); } @Override public void destroy() { // This method is called by the web container to indicate to a filter that it is being // taken out of service. We can free up any resources here. System.out.println("LoggingFilter destroyed"); } }
This filter logs a message before and after the request is processed.
Step 4: Configure the Deployment Descriptor (web.xml)
The web.xml
file is used to define filters and other components. Open your web.xml
file and add a filter and a filter-mapping to tell the server which URL patterns should trigger your filter:
<filter> <filter-name>LoggingFilter</filter-name> <filter-class>com.example.LoggingFilter</filter-class> </filter> <filter-mapping> <filter-name>LoggingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
This configuration applies the filter to all requests.
Step 5: Run the Project
Right-click on your project in the Project Explorer > Run As > Run on Server. Choose your installed server and click on Finish. If your server started successfully, you should be able to see the filter logs in the console output when you make requests to your server.
This is a very basic introduction to servlet filters. Filters can be very powerful, and can be used for a variety of tasks, such as logging, compression, encryption, input validation, XSLT transformations of XML content, and more.
Filter configuration in Servlets:
Define filters in the web.xml
deployment descriptor or use annotations.
<filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
Ordering of filters in Java Servlet: Specify the order of filters in the deployment descriptor.
<filter-mapping> <filter-name>Filter1</filter-name> <url-pattern>/servlet/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> <filter-mapping> <filter-name>Filter2</filter-name> <url-pattern>/servlet/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
Filter chaining in Servlets: Chain multiple filters for a URL pattern.
<filter-mapping> <filter-name>Filter1</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Filter2</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
Servlet filter initialization parameters: Pass initialization parameters to filters in the deployment descriptor.
<filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> <init-param> <param-name>paramName</param-name> <param-value>paramValue</param-value> </init-param> </filter>
Filtering based on URL patterns in Servlet: Define URL patterns for which a filter should be applied.
<filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping>
Character encoding filters in Servlet: Set character encoding for request and response data to handle internationalization.
request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8");
Custom filter development in Java:
Develop custom filters by implementing the javax.servlet.Filter
interface.
public class MyFilter implements Filter { // Implement methods: init, doFilter, and destroy }