1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.server;
20
21 import java.io.IOException;
22
23 import org.eclipse.jetty.http.HttpContent;
24 import org.eclipse.jetty.http.HttpContent.Factory;
25 import org.eclipse.jetty.http.MimeTypes;
26 import org.eclipse.jetty.http.ResourceHttpContent;
27 import org.eclipse.jetty.util.resource.Resource;
28 import org.eclipse.jetty.util.resource.ResourceFactory;
29
30
31
32
33
34
35
36 public class ResourceContentFactory implements Factory
37 {
38 private final ResourceFactory _factory;
39 private final MimeTypes _mimeTypes;
40 private final boolean _gzip;
41
42
43 public ResourceContentFactory(ResourceFactory factory, MimeTypes mimeTypes, boolean gzip)
44 {
45 _factory=factory;
46 _mimeTypes=mimeTypes;
47 _gzip=gzip;
48 }
49
50
51 @Override
52 public HttpContent getContent(String pathInContext,int maxBufferSize)
53 throws IOException
54 {
55
56 Resource resource=_factory.getResource(pathInContext);
57 HttpContent loaded = load(pathInContext,resource,maxBufferSize);
58 return loaded;
59 }
60
61
62
63 private HttpContent load(String pathInContext, Resource resource, int maxBufferSize)
64 throws IOException
65 {
66 if (resource==null || !resource.exists())
67 return null;
68
69 if (resource.isDirectory())
70 return new ResourceHttpContent(resource,_mimeTypes.getMimeByExtension(resource.toString()),maxBufferSize);
71
72
73 String mt = _mimeTypes.getMimeByExtension(pathInContext);
74 if (_gzip)
75 {
76
77 String pathInContextGz=pathInContext+".gz";
78 Resource resourceGz=_factory.getResource(pathInContextGz);
79 if (resourceGz.exists() && resourceGz.lastModified()>=resource.lastModified() && resourceGz.length()<resource.length())
80 return new ResourceHttpContent(resource,mt,maxBufferSize,
81 new ResourceHttpContent(resourceGz,_mimeTypes.getMimeByExtension(pathInContextGz),maxBufferSize));
82 }
83
84 return new ResourceHttpContent(resource,mt,maxBufferSize);
85 }
86
87
88
89 @Override
90 public String toString()
91 {
92 return "ResourceContentFactory["+_factory+"]@"+hashCode();
93 }
94
95
96 }