The following example demonstrates how to use
HttpServletResponseWrapper
in a filter to modify response content.
This filter appends additional HTML content to the response:
package com.mtitek.filters.test1;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
import jakarta.servlet.FilterConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpServletResponseWrapper;
public class MyFilter2 implements Filter {
FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponseWrapper httpServletResponseWrapper = new HttpServletResponseWrapper((HttpServletResponse) servletResponse) {
private PrintWriter out;
{
out = new PrintWriter(((HttpServletResponse) getResponse()).getWriter()) {
@Override
public void close() {
// Override close to prevent premature closure
}
@Override
public void flush() {
// Override flush to control when content is sent
}
};
}
@Override
public PrintWriter getWriter() throws IOException {
return out;
}
};
filterChain.doFilter(servletRequest, httpServletResponseWrapper);
PrintWriter out = httpServletResponseWrapper.getWriter();
out.println("<br /><hr /><br />Add HTML code to the filter ...");
out.close();
}
@Override
public void destroy() {
// Cleanup resources if needed
}
}
This example creates a custom response wrapper that overrides the
getWriter()
method to provide a controlled PrintWriter.
The wrapper prevents the writer from being closed or flushed prematurely, allowing the filter to append content after the servlet has finished processing.