org.apache.jena.fuseki.servlets.SimpleVelocityServlet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jena-fuseki1 Show documentation
Show all versions of jena-fuseki1 Show documentation
Fuseki is a SPARQL 1.1 Server
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.fuseki.servlets;
import java.io.IOException ;
import java.io.Writer ;
import java.util.Map ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;
import org.apache.velocity.VelocityContext ;
import org.apache.velocity.app.VelocityEngine ;
import org.apache.velocity.runtime.RuntimeConstants ;
import org.apache.velocity.runtime.RuntimeServices ;
import org.apache.velocity.runtime.log.LogChute ;
import org.apache.velocity.runtime.log.NullLogChute ;
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
/** Simple servlet that uses Velocity
* to format pages. It isolates the use of velocity by taking a configuration map.
* Use with a servlet mapping of "*.vm" or some such extension.
*/
public class SimpleVelocityServlet extends HttpServlet
{
//private static Logger log = LoggerFactory.getLogger(SimpleVelocityServlet.class) ;
/* Velocity logging
* Instead of internal velocity logging, we catch the exceptions,
* log the message ourselves. This gives a celaner log file without
* loosing information that the application could use.
*/
private static Logger vlog = LoggerFactory.getLogger("Velocity") ;
private static LogChute velocityLog = new NullLogChute() ;
//private static LogChute velocityLog = new SimpleSLF4JLogChute(vlog) ;
private String docbase ;
private VelocityEngine velocity ;
private String functionsName = null ;
private final Map datamodel ;
public SimpleVelocityServlet(String base, Map datamodel)
{
this.docbase = base ;
this.datamodel = datamodel ;
velocity = new VelocityEngine();
// Turn off logging - catch exceptions and log ourselves
velocity.setProperty( RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, velocityLog) ;
velocity.setProperty( RuntimeConstants.INPUT_ENCODING, "UTF-8" ) ;
velocity.setProperty( RuntimeConstants.FILE_RESOURCE_LOADER_PATH, base) ;
velocity.init();
}
// See also
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
{
process(req, resp) ;
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
{
process(req, resp) ;
}
private void process(HttpServletRequest req, HttpServletResponse resp)
{
try
{
resp.setContentType("text/html") ;
resp.setCharacterEncoding("UTF-8") ;
Writer out = resp.getWriter() ;
String path = path(req) ;
VelocityContext vc = SimpleVelocity.createContext(datamodel) ;
vc.put("request", req) ;
SimpleVelocity.process(docbase, path, out, vc) ;
} catch (IOException ex)
{
vlog.warn("IOException", ex) ;
}
}
private String path(HttpServletRequest request)
{
String path = request.getPathInfo();
if (path != null) return path;
path = request.getServletPath();
if (path != null) return path;
return null ;
}
@Override
public String getServletInfo()
{
return "Lightweight Velocity Servlet";
}
/** Velocity logger to SLF4J */
static class SimpleSLF4JLogChute implements LogChute
{
// Uusally for debugging only.
private Logger logger ;
SimpleSLF4JLogChute( Logger log )
{
this.logger = log ;
}
@Override
public void init(RuntimeServices rs)
{ }
@Override
public void log(int level, String message)
{
if ( logger == null ) return ;
switch(level)
{
case LogChute.TRACE_ID : logger.trace(message) ; return ;
case LogChute.DEBUG_ID : logger.debug(message) ; return ;
case LogChute.INFO_ID : logger.info(message) ; return ;
case LogChute.WARN_ID : logger.warn(message) ; return ;
case LogChute.ERROR_ID : logger.error(message) ; return ;
}
}
@Override
public void log(int level, String message, Throwable t)
{
if ( logger == null ) return ;
// Forget the stack trace - velcoity internal - long - unhelpful to application.
t = null ;
switch (level)
{
case LogChute.TRACE_ID : logger.trace(message, t) ; return ;
case LogChute.DEBUG_ID : logger.debug(message, t) ; return ;
case LogChute.INFO_ID : logger.info(message, t) ; return ;
case LogChute.WARN_ID : logger.warn(message, t) ; return ;
case LogChute.ERROR_ID : logger.error(message, t) ; return ;
}
}
@Override
public boolean isLevelEnabled(int level)
{
switch(level)
{
case LogChute.TRACE_ID: return logger.isTraceEnabled() ;
case LogChute.DEBUG_ID: return logger.isDebugEnabled() ;
case LogChute.INFO_ID: return logger.isInfoEnabled() ;
case LogChute.WARN_ID: return logger.isWarnEnabled() ;
case LogChute.ERROR_ID: return logger.isErrorEnabled() ;
}
return true ;
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy