Modified dispatcher servlet to stick servlet context into Velocity's

application context and implemented a servlet context resource loader
which loads resources via ServletContext.getResourceAsStream().


git-svn-id: https://samskivert.googlecode.com/svn/trunk@414 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
mdb
2001-11-02 02:03:23 +00:00
parent f06fb0b18a
commit f09ce0d0fc
2 changed files with 113 additions and 3 deletions
@@ -1,5 +1,5 @@
//
// $Id: DispatcherServlet.java,v 1.5 2001/11/01 21:34:03 mdb Exp $
// $Id: DispatcherServlet.java,v 1.6 2001/11/02 02:03:23 mdb Exp $
//
// samskivert library - useful routines for java programs
// Copyright (C) 2001 Michael Bayne
@@ -25,11 +25,13 @@ import java.util.HashMap;
import java.util.Properties;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.context.Context;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
@@ -167,6 +169,10 @@ public class DispatcherServlet extends VelocityServlet
// Log.info("Initializing dispatcher servlet.");
// initialize the Velocity application context
ServletContext sctx = getServletContext();
Velocity.setApplicationContext(sctx);
// load up our application configuration
try {
String appcl = config.getInitParameter(APP_CLASS_PROPS_KEY);
@@ -182,8 +188,8 @@ public class DispatcherServlet extends VelocityServlet
if (StringUtil.blank(logicPkg)) {
logicPkg = "";
}
_app.init(getServletContext());
_app.postInit(getServletContext(), logicPkg);
_app.init(sctx);
_app.postInit(sctx, logicPkg);
} catch (Throwable t) {
Log.warning("Error instantiating application.");
@@ -0,0 +1,104 @@
//
// $Id: ServletContextResourceLoader.java,v 1.1 2001/11/02 02:03:23 mdb Exp $
//
// samskivert library - useful routines for java programs
// Copyright (C) 2001 Michael Bayne
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package com.samskivert.velocity;
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.RuntimeServices;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;
/**
* A Velocity resource loader that loads resources from the servlet
* context.
*
* @see ServletContext#getResource
* @see ServletContext#getResourceAsStream
*/
public class ServletContextResourceLoader extends ResourceLoader
{
/**
* Called by Velocity to initialize this resource loader.
*/
public void init (ExtendedProperties config)
{
// there seems to be a tradition of logging this stuff; surely we
// don't want to buck tradition, do we?
rsvc.info("ServletContextResourceLoader: initialization starting.");
// the web framework was kind enough to slip this into the runtime
// instance when it started up
_sctx = (ServletContext)rsvc.getApplicationContext();
rsvc.info("ServletContextResourceLoader : initialization complete.");
}
/**
* Returns the input stream that can be used to load the named
* resource.
*
* @param path the path (relative to the webapp root) of resource to
* get.
*
* @return an input stream that can be used to read the resource.
*
* @exception ResourceNotFoundException if the resource was not found.
*/
public InputStream getResourceStream (String path)
throws ResourceNotFoundException
{
InputStream stream = _sctx.getResourceAsStream(path);
if (stream == null) {
String errmsg = "Unable to load resource via servlet context " +
"[path=" + path + "].";
throw new ResourceNotFoundException(errmsg);
}
return stream;
}
/**
* Things won't ever be modified when loaded from the servlet context
* because they came from the webapp .war file and if that is
* reloaded, everything will be thrown away and started afresh.
*/
public boolean isSourceModified (Resource resource)
{
return false;
}
/**
* Things won't ever be modified when loaded from the servlet context
* because they came from the webapp .war file and if that is
* reloaded, everything will be thrown away and started afresh. So we
* can punt here and return zero.
*/
public long getLastModified (Resource resource)
{
return 0;
}
/** A reference to the servlet context through which we'll load
* things. */
protected ServletContext _sctx;
}