Hello, I did not test your cases, and I always use full paths to files on my URLs for static resources inside jars, but... did you try to setup a redirector? so whenever you hit your resource at /stat or /stat/ you get redirected to /stat/index.html ? I know it's a hack, and not a fix... and it will require redirectors for subfolders too... (/stat/yourstat -> /stat/yourstat/index.html). Maybe you can avoid the ones for subfolders by making sure you spec the full URL to the HTML file for subfolders.
On Fri, May 31, 2013 at 10:48 PM, Robert Brewer <[email protected]> wrote: > Anyone have any thoughts on this? Is nobody else serving up static > HTML/CSS/JS content from jar files? Should I create a GitHub issue? > > Thanks. > > On Fri, May 10, 2013 at 6:41 PM, Robert S Brewer <[email protected]> wrote: > > Hello Thierry B. My dissertation is finished, so I can finally get > > back to debugging this problem :) > > > > Your sample code & project were quite helpful, however, it differed > > from my code in one way: my static files are contained in a > > subdirectory of the jar file. So I made 2 tiny modifications to your > > sample: the path to the directory is now "/stat", and I created a > > "stat" directory in the jar file that contains the index.html file. > > > > Once I made these changes, it replicates the problem I am having. The > > modified sample code behaves just like my application: if I go to > > http://localhost:8182/stat/ my browser downloads a zero-length file, > > but localhost:8182/stat/index.html works fine. > > > > Am I misunderstanding something, or is this a bug? > > > > I have attached a zip file with my modified version of the project. > > There are two jar files: testRobert.jar is the original jar file, > > while newTestRobert.jar is my modified version so one can see the > > differences easily. > > > > Thank you for your assistance with this bedeviling problem. > > > > On Fri, Jan 11, 2013 at 12:07 AM, Thierry Boileau <[email protected]> > wrote: > >> oops, I missed the project file. > >> > >> Best regards, > >> Thierry Boileau > >> > >> > >> 2013/1/11 Thierry Boileau <[email protected]> > >>> > >>> Hi Robert, > >>> > >>> I send you a zip file of the eclipse project (testRobert.zip), and the > jar > >>> file generated by eclipse. > >>> I launch the application on command line as follow: > >>> java -cp > testRobert.jar:/home/thierry/restlet/branches/2.1/org.restlet.jar > >>> test.MyApplication > >>> > >>> > >>> Best regards, > >>> Thierry Boileau > >>> > >>> > >>> 2013/1/11 Robert Brewer <[email protected]> > >>>> > >>>> Hmm, I could not clap and jars for a directory to work. Do you have > >>>> the test code that worked available? I will try reducing my code to a > >>>> bare minimum to see what is going on, but another project has come up > >>>> so I have to investigate later. > >>>> > >>>> Thanks for your help. > >>>> > >>>> On Wed, Jan 9, 2013 at 10:36 PM, Thierry Boileau < > [email protected]> > >>>> wrote: > >>>> > Hi Robert, > >>>> > > >>>> > I've just tried the clap connector using a jar file and it works > for me > >>>> > (I > >>>> > mean such url works : "http://localhost:8182/stat/index.html", > >>>> > "http://localhost:8182/stat/"). Just take care to complete > properly the > >>>> > classpath when lauching your application from the command line. > >>>> > > >>>> > Best regards, > >>>> > Thierry Boileau > >>>> > > >>>> > > >>>> > 2013/1/10 Thierry Boileau <[email protected]> > >>>> >> > >>>> >> Hello Robert, > >>>> >> > >>>> >> from what I notice, the resolution of "a file" is more or less > based > >>>> >> on > >>>> >> the ability to discover ressources having the same base name. A > file > >>>> >> directory is perfect because it is possible to list all ressources > >>>> >> within > >>>> >> the same parent directory. > >>>> >> A classloader is more retrictive and gives access to a single > >>>> >> resource... > >>>> >> which explains the behaviour of the "indexName" attribute of a > >>>> >> Directory. > >>>> >> I check why it does not work from a jar file. > >>>> >> > >>>> >> You can also connect the Directory with the jar file using the JAR > >>>> >> protocol or the ZIP protocol. Such protocol is based on the JDK > >>>> >> ZipEntry > >>>> >> class which has the ability to list files (such as a directory). > >>>> >> directory = new Directory(getContext(), "zip:" + > >>>> >> LocalReference.createFileReference(new File("/your/path")) + "!/" > ); > >>>> >> Of course, it obliges you to reference the jarfile from itself. You > >>>> >> can > >>>> >> consider this as a workaround. > >>>> >> > >>>> >> Best regards, > >>>> >> Thierry Boileau > >>>> >> > >>>> >> > >>>> >> 2013/1/10 Robert Brewer <[email protected]> > >>>> >>> > >>>> >>> Hello Restlet folks. I have a problem serving static files using > >>>> >>> Restlet's Directory class and the CLAP pseudo protocol > (apparently a > >>>> >>> popular topic right now :) > >>>> >>> > >>>> >>> I have a standalone web application that uses Restlet to provide a > >>>> >>> RESTful API. Some students taking a class have written a nice > client > >>>> >>> for the web application as a Single Page Application (SPA) > consisting > >>>> >>> of HTML5/CSS/Javascript. I would like to store a directory > containing > >>>> >>> the static SPA files in my web application's jar file and to serve > >>>> >>> them under a specific URI so the SPA client and server are > >>>> >>> self-contained > >>>> >>> > >>>> >>> The way I am trying to do this is: > >>>> >>> > >>>> >>> public synchronized Restlet createInboundRoot() { > >>>> >>> ... > >>>> >>> Directory directory = new Directory(getContext(), > >>>> >>> "clap://class/spa/"); > >>>> >>> router.attach("/spa/", directory); > >>>> >>> ... > >>>> >>> > >>>> >>> Unfortunately, this doesn't work. When I run the server from my > jar > >>>> >>> file and point a browser at "/spa/", the browser downloads an > empty > >>>> >>> file (Chrome calls it "download", Safari calls it "spa") rather > than > >>>> >>> rendering the page. Browsing to "/spa/index.html" does work, but I > >>>> >>> don't want users to have to remember to add the "index.html". > >>>> >>> > >>>> >>> Am I doing something wrong here? It seems like this should work. > I'm > >>>> >>> open to other ways to accomplish this goal. > >>>> >>> > >>>> >>> Annoyingly, the server behaves differently when running from > Eclipse > >>>> >>> than when running from a jar file, which makes troubleshooting > this > >>>> >>> problem more painful since I have to build the jar file to test > >>>> >>> fixes.For example, when running from Eclipse, "/spa/" gives a 404 > >>>> >>> error, instead of downloading an empty file. > >>>> >>> > >>>> >>> I also tried playing with setIndexName(). If I set it to > "index.html" > >>>> >>> (including the extension despite the Javadoc saying the parameter > >>>> >>> should be without extension), then it works when run from Eclipse > but > >>>> >>> not from the jar file. > >>>> >>> > >>>> >>> Thanks in advance for any suggestions on how to make this work! > >>>> >>> > >>>> >>> -- > >>>> >>> Robert Brewer > >>>> >>> http://excitedcuriosity.wordpress.com/ > >>>> >>> https://www.facebook.com/kukuicup > >>>> >>> > >>>> >>> ------------------------------------------------------ > >>>> >>> > >>>> >>> > >>>> >>> > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3042270 > >>>> > >>>> -- > >>>> Robert Brewer > >>>> http://excitedcuriosity.wordpress.com/ > >>>> https://www.facebook.com/kukuicup > >>>> > >>>> ------------------------------------------------------ > >>>> > >>>> > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3042617 > > > > -- > > Robert Brewer > > http://excitedcuriosity.wordpress.com/ > > https://www.facebook.com/kukuicup > > > > -- > Robert Brewer > http://excitedcuriosity.wordpress.com/ > https://www.facebook.com/kukuicup > > ------------------------------------------------------ > > http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3056813 > -- Fabián Mandelbaum IS Engineer ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3056836

