/*
* $Id: DefaultContentHandler.java,v 1.6 2002/09/16 08:05:06 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.server;
import java.io.Writer;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import anvil.Product;
import anvil.parser.InputSource;
import anvil.parser.StreamInputSource;
import anvil.util.PrettyPrinter;
import anvil.util.HttpDate;
import anvil.server.listener.Response;
/**
* class DefaultContentHandler
*
* @author: Jani Lehtim�ki
*/
public class DefaultContentHandler implements ContentHandler
{
public static final ContentHandler INSTANCE = new DefaultContentHandler();
private static final int SIZE = 512;
public DefaultContentHandler()
{
}
public boolean isSessionRequired()
{
return false;
}
public void service(Context context, Resource resource) throws Exception
{
HttpServletRequest request = context.getRequest();
HttpServletResponse response = context.getResponse();
context.log().debug(request.getMethod()+' '+context.getAddress().getPathinfo());
long last_modified = resource.getLastModified();
if (last_modified > 0) {
String if_modified_since = request.getHeader("if-modified-since");
if (if_modified_since != null) {
HttpDate ifmod = new HttpDate();
if (ifmod.parse(if_modified_since)) {
HttpDate mod = new HttpDate(last_modified);
if (mod.after(ifmod)) {
response.setStatus(304);
response.setContentLength(0);
return;
}
}
}
}
int contentLength = (int)resource.getLength();
OutputStream output = context.getOutputStream();
response.setContentType(resource.getContentType());
response.setContentLength(contentLength);
response.setDateHeader("Last-Modified", last_modified);
resource.writeTo(output);
output.flush();
resource.close();
}
}