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

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

The newest version!
package li.rudin.mavenjs.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

import li.rudin.mavenjs.servlet.handler.Handler;
import li.rudin.mavenjs.servlet.handler.HandlerResult;

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



public class Servlet extends HttpServlet
{
	
	private static final Logger logger = LoggerFactory.getLogger(Servlet.class);
	

	@Override
	public void init() throws ServletException
	{
		ServletConfig cfg = this.getServletConfig();
		
		//Check if prefix specified
		String prefix = cfg.getInitParameter("prefix");
		if (prefix != null)
			this.prefix = prefix;
	}
	
	/**
	 * Path prefix, defaults to none
	 */
	private String prefix = "";
	
	private void resolveEntry(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
	{
		// /test/x/y
		String requestUri = req.getRequestURI();
		
		// /test
		String contextPath = req.getContextPath();
		
		// /x/y
		String requestString = requestUri.substring( prefix.length() + contextPath.length() );

		//map / to /index.html internally
		if (requestString.endsWith("/"))
			requestString += "index.html";
		
		logger.debug("Got Request: {} and method: {}", requestString, req.getMethod());
		
		try
		{
			for (Handler h: Handler.handlers)
			{
				HandlerResult result = h.processRequest(requestString);
				if (result != null)
				{
					resp.setContentType(result.getContentType());
					
					if (result.getContent() != null)
					{
						resp.getOutputStream().write(result.getContent());
					}
					else if (result.getStream() != null)
					{
						StreamUtil.streamCopy(result.getStream(), resp.getOutputStream());
						result.getStream().close();
					}
					
					
					resp.setStatus(HttpServletResponse.SC_OK);
					
					return;
				}
			}
			
			resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
		}
		catch (Exception e)
		{
			logger.error("Could not serve resource: " + requestString, e);
			resp.setStatus(500);
			ServletOutputStream outputStream = resp.getOutputStream();
			PrintWriter writer = new PrintWriter(outputStream);
			
			e.printStackTrace(writer);
		}

	}


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


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy