You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.5 KiB
Java

JSP file response filter
package com.ack.web.servlet;
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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
to configure this filter process the outgoing responses for the viewfile servlet
that is streaming back the contents of a jsp file.
Compile this class into the WEB-INF/classes directory
and configure you WEB-INF/web.xml file to include the following filter.
Note how you can map the filter onto a servlet of your choosing.
<web-app>
<filter>
<filter-name>jsp_response</filter-name>
<filter-class>com.ack.web.servlet.JSPFileResponseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jsp_response</filter-name>
<servlet-name>viewfile</servlet-name>
</filter-mapping>
</web-app>
*/
public class JSPFileResponseFilter extends HttpServlet implements Filter {
private FilterConfig filterConfig;
public void init( FilterConfig filterConfig ) {
this.filterConfig = filterConfig;
}
public void doFilter( ServletRequest request,
ServletResponse response,
FilterChain filterChain ) {
try {
// the extra path information contents the uri of the file to view
String pathInfo = ( (HttpServletRequest) request ).getPathInfo();
System.out.println( "delegate jsp view to -> " + pathInfo );
// if its a jsp file
if( pathInfo != null && pathInfo.endsWith( ".jsp" ) &&
response instanceof HttpServletResponse ) {
// create a response wrapper to handle the streaming
// of the jsp file back to the HTTP client
JSPHttpServletResponseWrapper wrapperResponse =
new JSPHttpServletResponseWrapper( (HttpServletResponse) response );
// and then do it
filterChain.doFilter( request, wrapperResponse );
}
else {
// if not a JSP file, there is no extra processing
// to do on the response
filterChain.doFilter( request, response );
}
}
catch( ServletException sx ) {
log( sx.getMessage() );
}
catch( IOException iox ) {
log( iox.getMessage() );
}
}
}