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

li.rudin.mavenjs.servlet.MavenJSServlet Maven / Gradle / Ivy

package li.rudin.mavenjs.servlet;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

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

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



public class MavenJSServlet extends HttpServlet
{
	
	private static final Logger logger = LoggerFactory.getLogger(MavenJSServlet.class);
	
	private URL getResource(String name)
	{
		URL url = Thread.currentThread().getContextClassLoader().getResource(name);
		
		if (url == null && name.length() > 1)
			//try without leading /
			url = Thread.currentThread().getContextClassLoader().getResource(name.substring(1));
		
		if (url == null)
			//try locally
			url = MavenJSServlet.class.getResource(name);
		
		return url;
	}
	
	private void resolveEntry(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
	{
		// /test/x/y
		String requestUri = req.getRequestURI();
		// /test
		String servletPath = req.getContextPath() + req.getServletPath();
		// /x/y
		String requestString = requestUri.substring( servletPath.length() );

		logger.debug("Got Request: {} and method: {}", requestString, req.getMethod());
		
		try
		{
			InputStream stream = null;
			
			URL url = getResource(requestString);
			if (url != null)
				stream = url.openStream();
			
			if (stream != null)
			{
				StreamUtil.streamCopy(stream, resp.getOutputStream());
				stream.close();
				
				String contentType = "text/html";
				if (requestString.endsWith(".js"))
					contentType = "text/javascript";
				else if (requestString.endsWith(".css"))
					contentType = "text/css";
				
				resp.setContentType(contentType);
				resp.setStatus(HttpServletResponse.SC_OK);
				
				return;
			}
			
			
			resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
		}
		catch (Exception e)
		{
			//rethrow
			throw new ServletException(e);
		}

	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
	{
		resolveEntry(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
	{
		resolveEntry(req, resp);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy