Posted in: Servlet Filter
The filters in deployment descriptor:
<web-app>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>subin.rnd.enterprise.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<servlet-name>MyServlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
</web-app>
We can have a filter (or a chain of filters) processing the request/response. In the above descriptor, we are linking a filter for a URL pattern as well as for a specific servlet. So in the above case, for MyServlet, the filter will get executed twice as we have mapped the filter MyFilter to all URLs and for MyServlet. So the order of execution will be MyFilter.doFilter() > MyFilter.doFilter() > MyServlet.doGet().
MyServlet.java
01 | import javax.servlet.ServletException; |
02 | import javax.servlet.http.HttpServlet; |
03 | import javax.servlet.http.HttpServletRequest; |
04 | import javax.servlet.http.HttpServletResponse; |
10 | public void doGet(HttpServletRequest request, |
11 | HttpServletResponse response) |
12 | throws ServletException |
14 | System.out.println("doGet()"); |
15 | response.setContentType("text/plain"); |
16 | ServletUtility.write(response, "Hello world!".getBytes()); |
MyFilter.java
01 | import java.io.IOException; |
02 | import javax.servlet.Filter; |
03 | import javax.servlet.FilterChain; |
04 | import javax.servlet.FilterConfig; |
05 | import javax.servlet.ServletException; |
06 | import javax.servlet.ServletRequest; |
07 | import javax.servlet.ServletResponse; |
08 | import javax.servlet.http.HttpServletResponse; |
17 | public void doFilter(ServletRequest request, ServletResponse response, |
18 | FilterChain filterChain) |
19 | throws IOException, ServletException |
21 | System.out.println("doFilter()"); |
23 | ByteStreamResponseWrapper responseWrapper = null; |
24 | byte[] responseAsBytes = null; |
25 | String processedResponse = null; |
28 | responseWrapper = new ByteStreamResponseWrapper( |
29 | (HttpServletResponse) response); |
30 | filterChain.doFilter(request, responseWrapper); |
33 | processedResponse = responseWrapper.toString(); |
34 | if (null != processedResponse) |
36 | processedResponse = processedResponse.toUpperCase(); |
37 | responseAsBytes = processedResponse.getBytes(); |
41 | ServletUtility.write(response, responseAsBytes); |
44 | public void init(FilterConfig filterConfig) |
45 | throws ServletException |
Other filesThere are two more Java files – ByteStreamResponseWrapper & ServletUtility.ByteStreamResponseWrapper is an extension ofjavax.servlet.http.HttpServletResponseWrapper with some methods – toString(),getOutputStream() & getWriter() – overriden. ServletUtility is a utility class to write a byte stream to the servlet output stream.
OutputThe “Hello world!” from MyServlet is filtered to “HELLO WORLD!” by MyFilter.
Fig: Output in browser

Fig: Jboss console output