com.caucho.jsp.StaticPage Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of resin Show documentation
Show all versions of resin Show documentation
Resin Java Application Server
/*
* Copyright (c) 1998-2018 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
* Free SoftwareFoundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Scott Ferguson
*/
package com.caucho.jsp;
import com.caucho.util.CharBuffer;
import com.caucho.vfs.Depend;
import com.caucho.vfs.Path;
import com.caucho.vfs.PersistentDependency;
import com.caucho.vfs.ReadStream;
import com.caucho.vfs.TempCharBuffer;
import com.caucho.vfs.WriteStream;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
/**
* A static page is a page that's just a static file.
*/
public class StaticPage extends Page {
private Path _cacheEntry;
private long _lastModified;
private int _contentLength;
private boolean _hasSession;
/**
* Create a new Static page.
*
* @param path the underlying file
* @param hasSession if true, create a new session
*/
StaticPage(Path path, boolean hasSession)
throws IOException
{
_cacheEntry = path;
_contentLength = (int) _cacheEntry.getLength();
_hasSession = hasSession;
_caucho_setCacheable();
}
public void init(Path path)
throws ServletException
{
}
/**
* Returns true if the source has modified for this page.
*/
public boolean _caucho_isModified()
{
return ! _cacheEntry.exists() || super._caucho_isModified();
}
void _caucho_setUncacheable()
{
_lastModified = 0;
}
public long getLastModified(HttpServletRequest request)
{
return _caucho_lastModified();
}
/**
* Executes the JSP Page
*/
public void service(ServletRequest request, ServletResponse response)
throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
_caucho_init(req, res);
if (_hasSession) {
req.getSession();
res.setHeader("Cache-Control", "private");
}
// res.setContentLength(_contentLength);
TempCharBuffer buf = TempCharBuffer.allocate();
char []cBuf = buf.getBuffer();
int len;
PrintWriter out = response.getWriter();
ReadStream rs = _cacheEntry.openRead();
rs.setEncoding("UTF-8");
try {
while ((len = rs.read(cBuf, 0, cBuf.length)) > 0) {
out.write(cBuf, 0, len);
}
} finally {
rs.close();
}
TempCharBuffer.free(buf);
}
public boolean disableLog()
{
return true;
}
public static void writeDepend(Path dependPath,
ArrayList dependList)
throws IOException
{
WriteStream os = dependPath.openWrite();
try {
for (int i = 0; i < dependList.size(); i++) {
PersistentDependency dependency = dependList.get(i);
if (dependency instanceof Depend) {
Depend depend = (Depend) dependency;
os.print('"');
os.print(depend.getPath().getNativePath());
os.print("\" \"");
os.print(depend.getDigest());
os.println("\"");
}
}
} finally {
os.close();
}
}
static ArrayList parseDepend(Path dependPath)
throws IOException
{
ReadStream is = dependPath.openRead();
try {
ArrayList dependList = new ArrayList();
String name;
while ((name = parseName(is)) != null) {
long digest = Long.parseLong(parseName(is));
Depend depend = new Depend(dependPath.lookup(name), digest);
dependList.add(depend);
}
return dependList;
} finally {
is.close();
}
}
private static String parseName(ReadStream is)
throws IOException
{
int ch;
for (ch = is.read(); ch > 0 && ch != '"'; ch = is.read()) {
}
if (ch < 0)
return null;
CharBuffer cb = new CharBuffer();
for (ch = is.read(); ch > 0 && ch != '"'; ch = is.read()) {
cb.append((char) ch);
}
if (ch < 0)
return null;
return cb.toString();
}
public void destroy()
{
/*
try {
_cacheEntry.remove();
} catch (IOException e) {
}
*/
}
/**
* Returns a printable version of the static page object.
*/
public String toString()
{
return "StaticPage[" + _cacheEntry + "]";
}
}