1
2
3
4 package org.mortbay.jetty.servlet;
5
6 import java.io.File;
7 import java.io.IOException;
8 import java.io.InputStream;
9
10 import org.mortbay.io.Buffer;
11 import org.mortbay.io.nio.NIOBuffer;
12 import org.mortbay.jetty.Connector;
13 import org.mortbay.jetty.HttpConnection;
14 import org.mortbay.jetty.MimeTypes;
15 import org.mortbay.jetty.ResourceCache;
16 import org.mortbay.jetty.ResourceCache.Content;
17 import org.mortbay.jetty.nio.NIOConnector;
18 import org.mortbay.log.Log;
19 import org.mortbay.resource.Resource;
20
21 class NIOResourceCache extends ResourceCache
22 {
23 boolean _useFileMappedBuffer;
24
25
26 public NIOResourceCache(MimeTypes mimeTypes)
27 {
28 super(mimeTypes);
29 }
30
31
32 protected void fill(Content content) throws IOException
33 {
34 Buffer buffer=null;
35 Resource resource=content.getResource();
36 long length=resource.length();
37
38 if (_useFileMappedBuffer && resource.getFile()!=null)
39 {
40 File file = resource.getFile();
41 if (file != null)
42 buffer = new NIOBuffer(file);
43 }
44 else
45 {
46 InputStream is = resource.getInputStream();
47 try
48 {
49 Connector connector = HttpConnection.getCurrentConnection().getConnector();
50 buffer = new NIOBuffer((int) length, ((NIOConnector)connector).getUseDirectBuffers()?NIOBuffer.DIRECT:NIOBuffer.INDIRECT);
51 }
52 catch(OutOfMemoryError e)
53 {
54 Log.warn(e.toString());
55 Log.debug(e);
56 buffer = new NIOBuffer((int) length, NIOBuffer.INDIRECT);
57 }
58 buffer.readFrom(is,(int)length);
59 is.close();
60 }
61 content.setBuffer(buffer);
62 }
63
64 public boolean isUseFileMappedBuffer()
65 {
66 return _useFileMappedBuffer;
67 }
68
69 public void setUseFileMappedBuffer(boolean useFileMappedBuffer)
70 {
71 _useFileMappedBuffer = useFileMappedBuffer;
72 }
73 }