
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