by.stub.handlers.FaviconHandler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of stubby4j Show documentation
Show all versions of stubby4j Show documentation
HTTP stub server written in Java with embedded Jetty
package by.stub.handlers;
import by.stub.utils.ConsoleUtils;
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.resource.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URL;
public class FaviconHandler extends AbstractHandler {
private final long faviconModified = (System.currentTimeMillis() / 1000) * 1000L;
private byte[] faviconBytes;
public FaviconHandler() {
try {
final URL fav = this.getClass().getClassLoader().getResource("ui/images/favicon.ico");
if (fav != null) {
faviconBytes = IO.readBytes(Resource.newResource(fav).getInputStream());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public void handle(final String target,
final Request baseRequest,
final HttpServletRequest request,
final HttpServletResponse response) throws IOException, ServletException {
ConsoleUtils.logIncomingRequest(request);
if (response.isCommitted() || baseRequest.isHandled()) {
ConsoleUtils.logIncomingRequestError(request, "favicon", "HTTP response was committed or base request was handled, aborting..");
return;
}
baseRequest.setHandled(true);
if (faviconBytes != null && HttpMethod.GET.is(request.getMethod()) && request.getRequestURI().equals("/favicon.ico")) {
if (request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.toString()) == faviconModified)
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
else {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("image/x-icon");
response.setContentLength(faviconBytes.length);
response.setDateHeader(HttpHeader.LAST_MODIFIED.toString(), faviconModified);
response.setHeader(HttpHeader.CACHE_CONTROL.toString(), "max-age=360000,public");
response.getOutputStream().write(faviconBytes);
}
return;
}
}
}