- From: Paul Tyson <phtyson@sbcglobal.net>
- Date: Mon, 23 Feb 2015 09:07:51 -0600
- To: Florent Georges <fgeorges@fgeorges.org>
- Cc: EXPath CG <public-expath@w3.org>
On Mon, 2015-02-23 at 10:05 +0100, Florent Georges wrote: > Hi Paul, > > Sorry, I misunderstood your email (the part using "/myapp" sounded > like you really wanted to install an... app there :-p). So you really > want to have a root application in Servlex. > > This is not possible at the moment. If you want to recompile, > changing the parser is not enough. You need to change Servlex.service > as well. Probably easy for a deciated behaviour (like always by-pass > the application context root), and a bit more complex to make it fit > properly in Servlex. > > I will try to see if I can add the feature... That would be great. When I understand the code better perhaps I could help. > > A few notes on having a root application though. Till now, I always > avoided it myself. The main reason is that I want to be able to > install something aside my webapp, like the webapp maa=nager (if you > have a root application, you cannot have the graphical webapp manager, > the one that lets you install webapps and libraries through a web > interface). And anyway, I always put my Java EE Servlet containers > behind an Apache HTTP server (which proxies the request to the > specific Tomcat instance). Yes, there are other ways to make the user-visible url space appear to be independent of the application mechanics. And I would probably put an apache httpd in front of servlex for load-balancing or failover. But at this point I don't want to do it just to rewrite urls. As for putting other stuff aside servlex, what is the problem with just mapping these to a servlet *within* a root servlex webapp? I'm really wearing two hats here: I'm responsible for curating all the URLs under myhost.com (as in linked data, semantic web urls: 100s of millions of very fine-grained urls organized in RDF graphs). I'm also responsible for building the web applications to deliver useful views on these urls. As the url curator I want the freedom to invent new urls as the need arises and put them into play easily, without worrying too much about application constraints. As the application developer/maintainer I want simplicity, transparency, and flexibility in implementing the business logic that creates sensible views of the data in response to particular url requests. In the Expath Webapp spec I see an ideal solution to this. Thanks again for your interest in this. Regards, --Paul > > For instance, all requests to http://cxan.org/foo/bar are redirected > to http://localhost:xxx/servlex/cxan/foo/bar on the server. > > Do not hesitate to ping me in a few days if I don't give any > advancement notes on this one ;-) > > Regards, > > -- > Florent Georges > http://fgeorges.org/ > http://h2oconsulting.be/ > > > On 22 February 2015 at 21:39, Paul Tyson <phtyson@sbcglobal.net> wrote: > > On Sun, 2015-02-22 at 19:47 +0100, Florent Georges wrote: > >> On 20 February 2015 at 20:06, Paul Tyson wrote: > >> > >> Hi, > >> > >> > Is it possible to install servlex in the root context of tomcat? > >> > >> Yes. > >> > >> > I have configured a tomcat context "/" to go to servlex. > >> > >> So it is the root webapp? So it is in [tomcat]/webapps/ROOT/? > >> > >> > My webapps.xml has a single <webapp> with @root="/". The servlex > >> > WebappsParser complains this is not valid. > >> > >> > My goal is to make "servlex" disappear from the url, and only respond to > >> > urls defined by my webapp. That is, "http://myhost.com/myapp" instead of > >> > "http://myhost.com/servlex/myapp" (or any alias for "servlex"). > >> > >> I think there is a bit of confusion here. Servlex is a Java web > >> application, that you can deploy on Tomcat (for instance). It is > >> itself a web container for the EXPath webapp spec. Meaning that you > >> can deploy such EXPath webapps in Servlex. > >> > >> Since you have deployed Servlex at the root of your Tomcat instance, > >> Servlex itself is available at http://myhost.com/ (and everything > >> underneath...) If you want the webapps you deploy in Servlex to be > >> available as http://myhost.com/myapp/, then ou can deploy them as > >> usual. @root="/" is not what you want, rather root="myapp". > >> > >> There are 2 levels of context roots: those of Tomcat (one is > >> assigned to Servlex, here the special "root" one). And those of > >> Servlex itself, one being assigned to your webapp (in this case, it > >> should be "myapp"). > >> > >> Does that solve your problem? > > > > I didn't state my problem quite right. > > > > I am implementing something like a linked data platform, which will > > resolve all urls under a particular authority. So, for instance, I want > > servlex to handle all urls under http://myhost.com. > > > > Some urls in this space are distinguished by their initial path part. > > They need to be associated with a particular expath component. > > > > So I might have urls like these: > > http://myhost.com/some/special/url > > http://myhost.com/some-other/special/url > > http://myhost.com/any/ordinary/url > > > > I could have dedicated expath webapps named "some" and "some-other". > > (I've done this for the time being, just to make progress.) Then within > > each of these webapps, there is a servlet association to the desired > > component, using a pattern match relative to the webapp root. > > > > But I still want to handle urls with initial path parts like "any", > > "any1", "any-other", etc. In other words, the rest of the url space > > under http://myhost.com, which, even if I could enumerate it today, > > might change tomorrow. These could all be handled by a default component > > (until perhaps a need arises to implement some special processing). > > > > It would be cleaner and more flexible in this case to have a single > > expath webapp rooted at "", and use servlets to dispatch "special" urls > > to specialized components, and let a default url pattern handle the rest > > with a generic component. > > > > I can make tomcat use servlex as its default servlet by adding a > > Host/Context element in server.xml like so: > > > > <Context path="" docBase="servlex.war"/> > > > > and adjusting the Host attributes regarding auto-deployment and > > unpacking. > > > > But servlex doesn't like a webapp with @root="". It complains that it > > doesn't match the WebappsParser.ROOT_RE of "^[-a-zA-Z0-9]+$". I don't > > know if this is required by the spec, or if it is a servlex > > implementation detail. I can't find the schema definition for > > webapps/webapp/@root. > > > > It would be nice if servlex allowed @root="", with the same effect as > > tomcat's Context/@path="". Then I could have in .expath-web/webapps.xml: > > > > <webapp root=""...> > > > > And then in the root application's expath-web.xml: > > > > <servlet name="some-other-servlet"> > > <!-- associate to some-other component --> > > <match url="/some-other/"/> > > </servlet> > > <servlet name="some-servlet"> > > <!-- associate to some component --> > > <match url= "/some/"/> > > </servlet> > > <servlet name="default"> > > <!-- associate to a default component --> > > <match url="/"> > > </servlet> > > > > I am going to try to compile and run servlex with a modified > > WebappsParser.ROOT_RE (to change "+" to "*") and see if it works. I > > haven't looked into the code far enough to see if it will cause any > > other problems. Worst case, maybe some urls with "//" to start the path > > part. > > > > Thanks for your attention to this. > > > > Regards, > > --Paul > > > >> > >> Regards, > >> > > > >
Received on Monday, 23 February 2015 15:08:24 UTC