Over a million developers have joined DZone.

WebAppResourceLoader

·
The following code is for loading Velocity resources (i.e. Velocity files) from a web application's ServletContext.


import java.io.InputStream;

import javax.servlet.ServletContext;

import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;

public class WebAppResourceLoader extends ResourceLoader {

    private static ServletContext context = null;

    public void init(ExtendedProperties extendedProperties) {

    }

    private static ServletContext getServletContext() {
        return context;
    }

    public static void setServletContext(ServletContext context) {
        WebAppResourceLoader.context = context;
    }

    /**
     * @see org.apache.velocity.runtime.resource.loader.ResourceLoader#getResourceStream(java.lang.String)
     */
    public InputStream getResourceStream(String name)
            throws ResourceNotFoundException {
        InputStream result = null;

        if (name == null || name.length() == 0) {
            throw new ResourceNotFoundException("No template name provided");
        }

        try {
            if (!name.startsWith("/"))
                name = "/" + name;

            result = getServletContext().getResourceAsStream(name);
        } catch (NullPointerException npe) {
            throw new ResourceNotFoundException("ServletContext not found");
        } catch (Exception fnfe) {
            throw new ResourceNotFoundException(fnfe.getMessage());
        }

        return result;
    }

    public boolean isSourceModified(Resource arg0) {
        return false;
    }

    public long getLastModified(Resource arg0) {
        return 0;
    }

}


Then to initialize Velocity:


    WebAppResourceLoader.setServletContext(servletContext);
    Properties props = new Properties();
    props.setProperty("resource.loader", "webapp");
    props.setProperty("webapp.resource.loader.description", 
        "Load from the ServletContext");
    props.setProperty("webapp.resource.loader.class",
        "package.WebAppResourceLoader");
    Velocity.init(props);


From then on out you can use #parse directives such as:


#parse("/WEB-INF/something.vm")
Topics:

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}