📄 urlprocessor.java
字号:
output = buffer.toString();
if (mimeType.equals(MimeConstants.MIME_JS) && scriptCompressed)
{
output = JavascriptUtil.compress(output, compressionLevel);
}
if (!dynamic)
{
scriptCache.put(path, output);
}
}
}
response.setContentType(mimeType);
response.setDateHeader(HttpConstants.HEADER_LAST_MODIFIED, servletContainerStartTime);
response.setHeader(HttpConstants.HEADER_ETAG, etag);
PrintWriter out = response.getWriter();
out.println(output);
out.flush();
}
/**
* Do we need to send the conent for this file
* @param req The HTTP request
* @param path The file path (for debug purposes)
* @return true iff the ETags and If-Modified-Since headers say we have not changed
*/
private boolean isUpToDate(HttpServletRequest req, String path)
{
if (ignoreLastModified)
{
return false;
}
long modifiedSince = req.getDateHeader(HttpConstants.HEADER_IF_MODIFIED);
if (modifiedSince != -1)
{
// Browsers are only accurate to the second
modifiedSince -= modifiedSince % 1000;
}
String givenEtag = req.getHeader(HttpConstants.HEADER_IF_NONE);
// Deal with missing etags
if (givenEtag == null)
{
// There is no ETag, just go with If-Modified-Since
if (modifiedSince > servletContainerStartTime)
{
if (log.isDebugEnabled())
{
log.debug("Sending 304 for " + path + " If-Modified-Since=" + modifiedSince + ", Last-Modified=" + servletContainerStartTime); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
return true;
}
// There are no modified setttings, carry on
return false;
}
// Deal with missing If-Modified-Since
if (modifiedSince == -1)
{
if (!etag.equals(givenEtag))
{
// There is an ETag, but no If-Modified-Since
if (log.isDebugEnabled())
{
log.debug("Sending 304 for " + path + " Old ETag=" + givenEtag + ", New ETag=" + etag); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
return true;
}
// There are no modified setttings, carry on
return false;
}
// Do both values indicate that we are in-date?
if (etag.equals(givenEtag) && modifiedSince <= servletContainerStartTime)
{
if (log.isDebugEnabled())
{
log.debug("Sending 304 for " + path); //$NON-NLS-1$
}
return true;
}
return false;
}
/**
* @param ignoreLastModified The ignoreLastModified to set.
*/
public void setIgnoreLastModified(boolean ignoreLastModified)
{
this.ignoreLastModified = ignoreLastModified;
}
/**
* To what level do we compress scripts?
* @param scriptCompressed The scriptCompressed to set.
*/
public void setScriptCompressed(boolean scriptCompressed)
{
this.scriptCompressed = scriptCompressed;
}
/**
* @param compressionLevel The compressionLevel to set.
*/
public void setCompressionLevel(int compressionLevel)
{
this.compressionLevel = compressionLevel;
}
/**
* Setter for the remoter
* @param remoter
*/
public void setRemoter(Remoter remoter)
{
this.remoter = remoter;
}
/**
*
* @param debugPageGenerator
*/
public void setDebugPageGenerator(DebugPageGenerator debugPageGenerator)
{
this.debugPageGenerator = debugPageGenerator;
}
/**
* Setter for the Plain Javascript Marshaller
* @param marshaller
*/
public void setPlainJsMarshaller(DwrpPlainJsMarshaller marshaller)
{
this.plainJsMarshaller = marshaller;
}
/**
* Setter for the HTML Javascript Marshaller
* @param marshaller
*/
public void setHtmlJsMarshaller(DwrpHtmlJsMarshaller marshaller)
{
this.htmlJsMarshaller = marshaller;
}
/**
* Do we use our hack for when pathInfo is null?
* @param nullPathInfoWorkaround The nullPathInfoWorkaround to set.
*/
public void setNullPathInfoWorkaround(boolean nullPathInfoWorkaround)
{
this.nullPathInfoWorkaround = nullPathInfoWorkaround;
}
/**
* The time on the script files
*/
private static final long servletContainerStartTime;
/**
* The etag (=time for us) on the script files
*/
private static final String etag;
/**
* Initialize the container start time
*/
static
{
// Browsers are only accurate to the second
long now = System.currentTimeMillis();
servletContainerStartTime = now - (now % 1000);
etag = "\"" + servletContainerStartTime + '\"'; //$NON-NLS-1$
}
/**
* Do we use our hack for when pathInfo is null?
* Enabling this will require you to have a / on the end of the DWR root URL
*/
private boolean nullPathInfoWorkaround = false;
/**
* The page id length
*/
private int pageIdLength = 16;
/**
* The method by which we get new page ids
*/
private IdGenerator generator = new IdGenerator();
/**
* Do we ignore all the Last-Modified/ETags blathering?
*/
private boolean ignoreLastModified = false;
/**
* How much do we compression javascript by?
*/
private int compressionLevel = JavascriptUtil.LEVEL_DEBUGGABLE;
/**
* Do we retain comments and unneeded spaces in Javascript code?
*/
private boolean scriptCompressed = true;
/**
* We cache the script output for speed
*/
private final Map scriptCache = new HashMap();
/**
* The bean to handle debug page requests
*/
private DebugPageGenerator debugPageGenerator = null;
/**
* The 'HTML Javascript' method by which objects are marshalled
*/
private DwrpPlainJsMarshaller plainJsMarshaller = null;
/**
* The 'Plain Javascript' method by which objects are marshalled
*/
private DwrpHtmlJsMarshaller htmlJsMarshaller = null;
/**
* The bean to execute remote requests and generate interfaces
*/
private Remoter remoter = null;
/**
* The session id parameter that goes in engine.js
*/
private static final String PARAM_HTTP_SESSIONID = "${httpSessionId}"; //$NON-NLS-1$
/**
* The page id parameter that goes in engine.js
*/
private static final String PARAM_SCRIPT_SESSIONID = "${scriptSessionId}"; //$NON-NLS-1$
/**
* The log stream
*/
private static final Logger log = Logger.getLogger(UrlProcessor.class);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -