All Downloads are FREE. Search and download functionalities are using the official Maven repository.

li.rudin.jjst.servlet.JJSTServlet Maven / Gradle / Ivy

package li.rudin.jjst.servlet;

import java.io.IOException;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import li.rudin.jjst.core.JJST;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WebServlet(loadOnStartup=1, urlPatterns="/jjst")
public class JJSTServlet extends HttpServlet
{

	private static final Logger logger = LoggerFactory.getLogger(JJSTServlet.class);

	private Map> cache = new HashMap<>();

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
	{
		//classname parameter
		String className = req.getParameter("class");
		String debugStr = req.getParameter("debug");
		
		boolean debug = false;
		
		if (debugStr != null && Boolean.parseBoolean(debugStr))
			debug = true;

		try
		{
			String script = null;
			
			//aquire reference
			SoftReference reference = cache.get(className);
			
			if (reference != null)
				//Try to get soft cached script
				script = reference.get();

			if (script == null)
			{
				//Generate from class
				Class type = Class.forName(className);			
				script = JJST.transform(type, !debug);
				
				//Store in cache
				cache.put(className, new SoftReference(script));
			}

			resp.setContentType("text/javascript");
			resp.getOutputStream().write(script.getBytes());
		}
		catch (Exception e)
		{
			logger.error("doGet", e);
			throw new ServletException(e);
		}
	}

	@Override
	public void init() throws ServletException
	{
		logger.info("JJST Servlet {}", JJST.getVersion());
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy