Skip to content

Instantly share code, notes, and snippets.

@nom3ad
Created January 2, 2017 09:53
Show Gist options
  • Save nom3ad/1676345f27da7b2e3c0ef5d7a6a1c00f to your computer and use it in GitHub Desktop.
Save nom3ad/1676345f27da7b2e3c0ef5d7a6a1c00f to your computer and use it in GitHub Desktop.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PushbackInputStream;
import java.util.zip.GZIPInputStream;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.ServletHolder;
public class Gziptest {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
org.mortbay.jetty.servlet.Context context = new org.mortbay.jetty.servlet.Context(org.mortbay.jetty.servlet.Context.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new GzipHandlerServlet()),"/*");
server.start();
server.join();
}
@SuppressWarnings("serial")
private static class GzipHandlerServlet extends HttpServlet
{
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
PushbackInputStream pb = new PushbackInputStream( request.getInputStream(), 2 );
if(isGZIPed(pb)){
GZIPInputStream gzis = new GZIPInputStream(pb);
InputStreamReader isReader = new InputStreamReader( gzis );
BufferedReader br = new BufferedReader(isReader);
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("<h1>"+"hey,i got a gzip with follwong head\n\n\n\n"+"</h1>");
response.getWriter().write(br.readLine());
}
else{
response.setStatus(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
response.getWriter().println("you have failed me!!!");
}
response.getWriter().println("session=" + request.getSession(true).getId());
}
private boolean isGZIPed( PushbackInputStream pb)
{
boolean isGziped = false;
try
{
byte[] signature = new byte[2];
pb.read( signature );
pb.unread( signature );
int head = ( (int)signature[0] & 0xff ) | ( ( signature[1] << 8 ) & 0xff00 );
isGziped = GZIPInputStream.GZIP_MAGIC == head;
}
catch( Exception ioe )
{
log("",ioe);
}
return isGziped;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment