An interesting article I read in the CFDJ recently was entitled Poor Man’s HTTP Compression with ColdFusion. Almost every web application will benefit from the compression of content. A compression filter optimises the size of the content that is sent from a webserver to a web browser via the Internet. Since generating content and serving pages via the World Wide Web is the core behind web applications, it is simple components that aid these processes that are incredibly useful. This is where servlet filters come into play.
Servlet filters are tools available to web application developers. They are designed to be able to manipulate the request and responses that are sent to a web application, without manipulating the servlets, static pages like HTML and, in this case, CFM pages that are being used by the web application (unless of course that is the desired response). Servlet filters act like a chain of steps that a request and response must go through before reaching the page in the application.
Compressing Content Using a Servlet Filter
Compression is a process that reduces the number of bytes required to define a document in order to save disk space or transmission time. It is extremely useful for sending information across the web, because the speed at which people receive information from a web application is dependent upon how much data you are trying to send. The smaller the amount of information that is to be sent, the faster it can be sent. Therefore, compression and the associated responsiveness is a key component to retaining users and generating revenue from those retained users.
Compression can be effectively achieved by having a servlet filter conditionally pipe the produced content to a GZip-compressed file. GZip is supported by the HTTP protocol and almost all modern browsers (hence the servlet filter conditionally compresses the content).
GZip compression usually results in a 6:1 compression ratio, although this depends on how much content is being sent and what the content is.
Setting up the Servlet Filter in ColdFusion
Using the ColdBeans servlet filter found at the following URL:
- Download the GZipFilter.jar
- Save GZipFilter.jar in the WEB-INF/lib folder in the ColdFusion Server wwwroot.
- Edit the web.xml file in the WEB-INF folder in the ColdFusion Server wwwroot with the following code:
<filter> <filter-name>GzipFilter</filter-name> <filter-class>com.cj.gzipflt.GzipFilter</filter-class> </filter> <filter-mapping> <filter-name>GzipFilter</filter-name> <url-pattern>*.cfm</url-pattern> </filter-mapping>
- Restart the ColdFusion Service
Now, when you invoke any
.cfm page the GzipFilter will check out client’s browser settings. If the browser does not support gzip, the filter invokes resource normally. If the browser does support gzip, output will be compressed.