Clone this wiki locally
Web applications often need to serve static content, such as images or stylesheets. Ring provides two middleware functions to do this.
wrap-file. This serves static content from a directory on the local filesystem:
(use 'ring.middleware.file) (def app (wrap-file your-handler "/var/www/public"))
The other is
wrap-resource. This serves static content from the JVM classpath:
(use 'ring.middleware.resource) (def app (wrap-resource your-handler "public"))
If you're using a Clojure build tool like Leiningen or Cake, then the non-source-file resources for a project are kept in the "resources" directory. Files in this directory are automatically included in jar or war files.
So in the above example, files placed in the "resources/public" directory will in the public directory will be served up as static files.
Often you'll want to combine
wrap-resource with the
(use 'ring.middleware.resource 'ring.middleware.file-info) (def app (-> your-handler (wrap-resource "public") (wrap-file-info)))
wrap-file-info middleware checks the modification dates and the file extension of the file, adding
Last-Modified headers. This makes sure the browser knows the type of the file being served, and doesn't re-request the file if its already in the browser's cache.
Note that the
wrap-file-info middleware needs to wrap around (i.e. come after) the