public interface Caching
<script src='/foo/bar.js?version=13'></script>Generally, the version number wouldn't be hard-coded into the dynamic page, but would instead pick up the value of a variable, such that you can simply bump up the value in one configuration file and have all versioned URLs change dynamically.
Because Smart GWT performs the assembly of image URLs dynamically, versioning of
Smart GWT skins must be done with a path component. You can do this by changing the base
Page.setSkinDir() - e.g:
Page.setSkinDir('/version/5.6/isomorphic/skins/SmartGWT/');You can then either deploy the new skins under the versioned directory above or use a URL rewriting engine such as mod_rewrite for Apache to map all such versions into a single deploy directory.
To actually tell the browser to cache images for a longer length of time than the browser session, you need to set the HTTP 'Expires' header. If you're not using the Smart GWT Java back-end there are several caching solutions available, depending on your server of choice. Microsoft's IIS has built-in caching capability, please check the reference manual for details. If you're using Apache, you can use mod_expires. Some servlet containers also natively support the setting of caching headers.
The Smart GWT Java back-end supports setting caching headers via the FileDownload service on a per-mimetype basis. To use it, first register the FileDownload servlet in your web.xml as follows:
Next, map any resource that you want to serve with caching headers to the FileDownload servlet in your web.xml. Typically, you'll want to serve the Smart GWT modules and all skin images with caching headers. You can do so by adding the following servlet-mapping directives to your web.xml:
<servlet-mapping> <servlet-name>FileDownload</servlet-name> <url-pattern>/isomorphic/system/modules/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FileDownload</servlet-name> <url-pattern>/isomorphic/skins/*</url-pattern> </servlet-mapping>