I have a simple web application written using the Lift framework. I am using Maven to build and test with, in the way recommended by various Lift docs (i.e. I use mvn jetty:run to launch the app). I ran into an issue when it came to serving static image content, however.
- The app is called webapp
- The app deploys to /webapp
- Images are on local disk at /hdd/data/images (i.e. not in the .war)
- Want to access images from /images (i.e. outside of the context root of the Lift app)
- Needs to work when developing and running with Maven's jetty:run
The main issue was simply "how do I setup a virtual directory from http://server/images to /hdd/data/images on disk?" This seems trivial, but I had a really difficult time finding any straightforward docs on how to do it. My complicating requirement was that it had to work when developing with jetty:run. For "real" deployment, the images location will be manually configured, so whether this makes sense in production is not a factor here.
Long story short: you can configure the maven-jetty-plugin to load up additional "context handlers" at startup. Some decent info on this here. A context handler of type WebAppContext will do the job as far as acting like a virtual directory. Here's the config from pom.xml for the project:
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<contextPath>/webapp</contextPath>
<scanIntervalSeconds>0</scanIntervalSeconds>
<contextHandlers>
<!-- setup a simple webapp to serve our images -->
<contextHandler implementation="org.mortbay.jetty.webapp.WebAppContext">
<contextPath>/images</contextPath>
<resourceBase>/hdd/data/images</resourceBase>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
I make no claims about this being secure or the best way to do things, but after a lot of trial and error it does at least work.

0 comments:
Post a Comment