What am I missing? All of these syntaxes look invalid to me. Why isn't
the syntax of the normal form
protocol://[servername[:port]]/path
From the discussions it isn't obvious to me if the block name should be
the server name or part of the path.
Ralph
Alexander Klimetschek wrote:
Hi guys,
I have a hack for our local Cocoon release that integrates global bean
ids into the servlet protocol. It's not perfect and that's why I
didn't provide a patch yet for
https://issues.apache.org/jira/browse/COCOON-2044 (and because I have
so much to do for our upcoming release).
But I have some practical experience with that, so I can help in the
discussion:
Reinhard Poetz schrieb:
> servlet:byId:com.mycompany.block1.servlet:/...
> servlet:!com.mycompany.block1.servlet:/...
> servlet:~com.mycompany.block1.servlet:/...
> servlet:@com.mycompany.block1.servlet:/...
>
> My favorite is the last one.
1) the @ will make the URL invalid (it's reservered for
username:[EMAIL PROTECTED] in the URL pattern)
2) I simply put the global bean id instead of the shorthand - in
ServletServiceContext:getNamedContext() I simply look for the
shorthand first and if that fails I do a lookup in the beanfactory
assuming it is the global bean id, eg.:
servlet:com.something.my-block:/path
3) IMPORTANT: one very important thing to note is that the servlet
protocol is caller-dependent: servlet:SUPER: has a special meaning,
ie. two calls to servlet:SUPER: from to different blocks are not
identical - thus you have to add a marker for those calls. My pattern
is to add "__super" after the global bean id, eg.:
servlet:com.something.my-block__super:/path
4) I simply make the URLs absolute in the ServletSource() constructor
and set the systemId of the source to the absolute path. Because any
include/import mechanism (like in XSLT) will use source.getURI() to
resolve the relative filename, it is important that this is fully
resolvable by the servlet source implementation - 2) and 3) (but here
I don't tell any new stuff ;-)
5) Different story, but also regarding globally unique keys:
Environment.getURIPrefix() must be set to have the filename-part of
the cache keys globally unique (it is empty in the current
implementation, don't know when it was introduced and for what; but it
is very useful, since it will be used for cache keys) - I simply use
the mount path for the uri prefix, this makes the cache keys readable,
because they look like the real URLs the browser sees.
Alex