2828import org .osgl .$ ;
2929import org .osgl .http .H ;
3030import org .osgl .mvc .result .NotFound ;
31- import org .osgl .util .E ;
3231import org .osgl .util .IO ;
3332import org .osgl .util .S ;
3433
@@ -49,6 +48,8 @@ public class StaticResourceGetter extends FastRequestHandler {
4948
5049 private static final char SEP = '/' ;
5150
51+ private FastRequestHandler delegate ;
52+
5253 private String base ;
5354 private URL baseUrl ;
5455 private int preloadSizeLimit ;
@@ -69,17 +70,19 @@ public StaticResourceGetter(String base) {
6970 String path = S .ensureStartsWith (base , SEP );
7071 this .base = path ;
7172 this .baseUrl = StaticFileGetter .class .getResource (path );
72- E .illegalArgumentIf (null == this .baseUrl , "Cannot find base URL: %s" , base );
73- this .isFolder = isFolder (this .baseUrl , path );
74- if (!this .isFolder && "file" .equals (baseUrl .getProtocol ())) {
75- Act .jobManager ().beforeAppStart (new Runnable () {
76- @ Override
77- public void run () {
78- preloadCache ();
79- }
80- });
73+ this .delegate = verifyBase (this .baseUrl , base );
74+ if (null == delegate ) {
75+ this .isFolder = isFolder (this .baseUrl , path );
76+ if (!this .isFolder && "file" .equals (baseUrl .getProtocol ())) {
77+ Act .jobManager ().beforeAppStart (new Runnable () {
78+ @ Override
79+ public void run () {
80+ preloadCache ();
81+ }
82+ });
83+ }
84+ this .preloadSizeLimit = Act .appConfig ().resourcePreloadSizeLimit ();
8185 }
82- this .preloadSizeLimit = Act .appConfig ().resourcePreloadSizeLimit ();
8386 }
8487
8588 @ Override
@@ -88,7 +91,7 @@ protected void releaseResources() {
8891
8992 @ Override
9093 public boolean express (ActionContext context ) {
91- if (preloaded ) {
94+ if (preloaded || null != delegate ) {
9295 return true ;
9396 }
9497 String path = context .paramVal (ParamNames .PATH );
@@ -100,6 +103,10 @@ public boolean express(ActionContext context) {
100103
101104 @ Override
102105 public void handle (ActionContext context ) {
106+ if (null != delegate ) {
107+ delegate .handle (context );
108+ return ;
109+ }
103110 context .handler (this );
104111 String path = context .paramVal (ParamNames .PATH );
105112 handle (path , context );
@@ -268,6 +275,19 @@ public boolean supportPartialPath() {
268275
269276 @ Override
270277 public String toString () {
271- return baseUrl .toString ();
278+ return null != baseUrl ? baseUrl .toString () : base + "(not found)" ;
272279 }
280+
281+ /*
282+ * If base is valid then return null
283+ * otherwise return delegate request handler
284+ */
285+ private FastRequestHandler verifyBase (URL baseUrl , String baseSupplied ) {
286+ if (null == baseUrl ) {
287+ logger .warn ("URL base not exists: " + baseSupplied );
288+ return AlwaysNotFound .INSTANCE ;
289+ }
290+ return null ;
291+ }
292+
273293}
0 commit comments