public class ZipServlet
extends javax.servlet.http.HttpServlet
HttpServlet to serve content from within a specified Zip (or Jar) file.
Follows the standards described in RFC 2616 as applicable. In particular, this implementation supports last modified checking and partial content requests.
Considered items better solved elsewhere:
Filter instead.Filter instead,
e.g. CompressFilter.
java.util.zip APIs don't currently provide for this possibility.Accepted ServletConfig parameters:
zipFile (Required): Local path of zip file to serve. (Is effectively passed to ZipFile.ZipFile(String).)zipPrefix (Optional): Redefines the "root directory" in the zip file to serve from.comboEnabled (Optional): Enables or disables the functionality available by
YUI's Combo Handling.
Boolean.parseBoolean(String).Boolean.TRUE.comboPath (Optional): Path on which combination requests will be answered.
combo".comboPath from the zip file (like the basic functionality,
as if the combination functionality was disabled).dateMode (Optional): Configures what date to use for the Last-Modified headers and conditional checks.
zipEntry", default: Value of ZipEntry.getTime().zipFile": Value of the zip file's File.lastModified().servlet": Value of System.currentTimeMillis() upon GenericServlet.init().| Modifier and Type | Field and Description |
|---|---|
protected static Pattern |
COMBO_SPLIT_PATTERN |
protected boolean |
comboEnabled |
protected String |
comboPath |
protected String |
dateMode |
protected long |
initDate |
protected static org.slf4j.Logger |
LOGGER |
protected static Pattern |
RANGE_PATTERN |
protected String |
servletName |
protected ZipFile |
zipFile |
protected String |
zipPrefix |
| Constructor and Description |
|---|
ZipServlet() |
| Modifier and Type | Method and Description |
|---|---|
protected void |
check(ZipEntry entry,
javax.servlet.http.HttpServletResponse response,
String path,
String file) |
protected boolean |
checkModifiedDates(long checkDate,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected byte[] |
createResponseBuffer(javax.servlet.http.HttpServletResponse response) |
protected void |
denyDirectory(ZipEntry entry,
javax.servlet.http.HttpServletResponse response,
String path)
ZipFile.getEntry(String) returns a ZipEntry for a directory,
even if the passed name doesn't end with '/'. |
void |
destroy() |
protected void |
doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected void |
doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent) |
protected void |
doHead(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected long |
getCheckDate(long time) |
protected void |
getComboFiles(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent) |
protected void |
getSingleFile(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent) |
void |
init(javax.servlet.ServletConfig config) |
protected void |
initComboPath(javax.servlet.ServletConfig config) |
protected void |
initDateMode(javax.servlet.ServletConfig config) |
protected void |
initZipFile(javax.servlet.ServletConfig config) |
protected void |
initZipPrefix(javax.servlet.ServletConfig config) |
protected void |
setContentLength(javax.servlet.http.HttpServletResponse response,
long length)
Content-Length, http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
|
protected boolean |
setHeaders(com.ziesemer.utils.web.zipServlet.RequestContext rc,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected void |
streamResource(com.ziesemer.utils.web.zipServlet.RequestContext rc,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected void |
streamResource(ZipEntry entry,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) |
protected void |
verifyExists(ZipEntry entry,
javax.servlet.http.HttpServletResponse response,
String path,
String file) |
doDelete, doOptions, doPost, doPut, doTrace, getLastModified, service, serviceprotected static final org.slf4j.Logger LOGGER
protected static final Pattern RANGE_PATTERN
protected static final Pattern COMBO_SPLIT_PATTERN
protected transient ZipFile zipFile
protected String zipPrefix
protected boolean comboEnabled
protected String comboPath
protected String dateMode
protected long initDate
protected String servletName
public void init(javax.servlet.ServletConfig config)
throws javax.servlet.ServletException
init in interface javax.servlet.Servletinit in class javax.servlet.GenericServletjavax.servlet.ServletExceptionprotected void initZipFile(javax.servlet.ServletConfig config)
throws javax.servlet.ServletException
javax.servlet.ServletExceptionprotected void initZipPrefix(javax.servlet.ServletConfig config)
throws javax.servlet.ServletException
javax.servlet.ServletExceptionprotected void initComboPath(javax.servlet.ServletConfig config)
throws javax.servlet.ServletException
javax.servlet.ServletExceptionprotected void initDateMode(javax.servlet.ServletConfig config)
throws javax.servlet.ServletException
javax.servlet.ServletExceptionprotected void doHead(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException,
IOException
doHead in class javax.servlet.http.HttpServletjavax.servlet.ServletExceptionIOExceptionprotected void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException,
IOException
doGet in class javax.servlet.http.HttpServletjavax.servlet.ServletExceptionIOExceptionprotected void doGet(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent)
throws javax.servlet.ServletException,
IOException
javax.servlet.ServletExceptionIOExceptionprotected void getSingleFile(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent)
throws javax.servlet.ServletException,
IOException
javax.servlet.ServletExceptionIOExceptionprotected void getComboFiles(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response,
boolean sendContent)
throws javax.servlet.ServletException,
IOException
javax.servlet.ServletExceptionIOExceptionprotected void check(ZipEntry entry, javax.servlet.http.HttpServletResponse response, String path, String file) throws IOException
IOExceptionprotected void verifyExists(ZipEntry entry, javax.servlet.http.HttpServletResponse response, String path, String file) throws IOException
IOExceptionprotected void denyDirectory(ZipEntry entry, javax.servlet.http.HttpServletResponse response, String path) throws IOException
ZipFile.getEntry(String) returns a ZipEntry for a directory,
even if the passed name doesn't end with '/'. However, this entry's
ZipEntry.isDirectory() still returns false, so this needs to be
checked for.IOExceptionprotected boolean setHeaders(com.ziesemer.utils.web.zipServlet.RequestContext rc,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException,
IOException
javax.servlet.ServletExceptionIOExceptionprotected long getCheckDate(long time)
protected boolean checkModifiedDates(long checkDate,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
protected void setContentLength(javax.servlet.http.HttpServletResponse response,
long length)
protected void streamResource(com.ziesemer.utils.web.zipServlet.RequestContext rc,
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws IOException
IOExceptionprotected void streamResource(ZipEntry entry, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws IOException
IOExceptionprotected byte[] createResponseBuffer(javax.servlet.http.HttpServletResponse response)
public void destroy()
destroy in interface javax.servlet.Servletdestroy in class javax.servlet.GenericServletCopyright © 2008–2017 Mark A. Ziesemer. All rights reserved.