shannon 2002/06/27 12:40:55 Modified: src/documentation/xdocs/faq faq-configure-environment.xml Log: Updated FAQs courtesy of Luca Morandini ([EMAIL PROTECTED]) plus a few minor copy edits from me. Revision Changes Path 1.2 +181 -149 xml-cocoon2/src/documentation/xdocs/faq/faq-configure-environment.xml Index: faq-configure-environment.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/src/documentation/xdocs/faq/faq-configure-environment.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- faq-configure-environment.xml 13 May 2002 17:55:25 -0000 1.1 +++ faq-configure-environment.xml 27 Jun 2002 19:40:54 -0000 1.2 @@ -4,111 +4,185 @@ <faqs title="Environment Configuration FAQs"> <faq> - <question>How could I have my Cocoon app in an URI other than - <you-server>/cocoon/<my-app>? + <question>How can I reach my Cocoon app from an URI other than + <your-server>/cocoon/<my-app>? </question> <answer> - <note> This entry refers only to an Apache + Tomcat + Cocoon configuration, - and was tested under: Windows NT 4.0 + Apache 1.3.14 + Tomcat 3.2 + Cocoon - 2.0b1. - </note> - <p>Test whether Tomcat passes everything under the /cocoon context to - Cocoon. This may be tested by pointing your browser at - <your-server>:8080/cocoon/xsp/simple, if a text page named - "A simple XSP page", everything's fine. + <p> + Suppose the following. + </p> + <ol> + <li>You have a Cocoon application named "bar" which works fine when + called with this URI: http://www.foo.com/cocoon/bar/index.html + </li> + <li>You want the "bar" app to be called from + http://www.foo.com/bar/index.html instead (getting rid of "cocoon"). + </li> + </ol> + <p> + There are, basically, two methods to achieve this. + </p> + <ol> + <li> + Set Cocoon as the root servlet in your servlet-container + </li> + <li>Rewrite the URI in the web-server. (When a user asks for + http://www.foo.com/bar/index.html, the web-server redirects him/her to + http://www.foo.com/cocoon/bar/index.html + </li> + </ol> + <p> + Let us explore the first method (Cocoon as the root servlet). </p> - <p>Now, suppose:</p> + <note> + This entry was tested under: Windows 2000 + Professional + IIS 5.0 + Tomcat 4.0.1 + Cocoon 2.0.2. + </note> <ol> - <li>you have a Cocoon application named "foo" which works fine when - called with <your-server>:8080/cocoon/foo + <li> + Edit the server.xml file which is located under $TOMCAT_HOME/conf + </li> + <li> + Go to the line containing "Tomcat Root Context". (This should be a comment). </li> - <li>you want the "foo" app to be called from - <your-server>:8080/foo instead. + <li> + Add following line after that comment: + <code> + <context path="" docBase="/cocoon" debug="0"/> + </code> + </li> + <li> + Re-start Tomcat. + </li> + <li> + Try: http://www.foo.com:8080/ and the Cocoon welcome page should appear </li> </ol> - <p>The idea is just to redirect the desidered URI (foo) to the one within - the cocoon context (cocoon/foo). + <p> + Now, http://www.foo.com/bar/index.html should also work. </p> - <p>Since this has to be done before the URI is processed by Tomcat, it is - just natural to use Apache for this. And, of course the user should not - notice the redirection. + <p> + Let us explore the second method (URI rewriting). </p> - <p>Apache has an handy feature called mod_rewrite which does just this: URI - rewriting (see the "URL Rewriting Guide" in the Apache user's guide for + <note> This entry was tested under: Windows NT 4.0 + Apache 1.3.14 + Tomcat 3.2 + + Cocoon 2.0b1. It is Apache-specific. + </note> + <p> + The idea is just to redirect a portion of the desired URI (bar) to the one within + the cocoon context (cocoon/bar). + </p> + <p> + Apache has an handy feature called mod_rewrite that does just this: URI + rewriting. (See the "URL Rewriting Guide" in the Apache user's guide for details). </p> - <p>First of all, you should instruct Apache to load the mod_rewrite, hence, - you should add (on a Windows system) this line to the httpf.conf: + <p> + First of all, you should instruct Apache to load the mod_rewrite. + Add (on a Windows system) to httpd.conf the following line: </p> - <source>LoadModule rewrite_module modules/ApacheModuleRewrite.dll</source> - <p>(by the way, most probably, this line is already on the httpd.conf, you - just have to un-comment it). + <source> + LoadModule rewrite_module modules/ApacheModuleRewrite.dll + </source> + <p> + (By the way it's quite likely that this line is already on the httpd.conf. You + just have to uncomment it). + </p> + <p> + Add this line to httpd.conf in order to activate mod_rewrite: </p> - <p>Add this line to httpd.conf in order to activate mod_rewrite:</p> - <source>RewriteEngine On</source> - <p>It is highly recommended to use the logging option of mod_rewrite, in - order to check the correctness of the URI rewriting; just add this lines - to the httpd.conf:</p> - <source> -RewriteLog "C:/logs/rewrite.log" -RewriteLogLevel 9</source> - - <p>The first line tells Apache to put the URI rewriting log in the + RewriteEngine On + </source> + <p> + It is highly recommended to use the logging option of mod_rewrite, in + order to check the correctness of the URI rewriting. Just add these lines + to the httpd.conf: + </p> + <source> + RewriteLog "C:/logs/rewrite.log" + RewriteLogLevel 9 + </source> + <p> + The first line tells Apache to put the URI rewriting log in the c:\logs\rewrite.log file (which happens to be on a Windows system, of course). The second one tells Apache to record everything mod_rewrite - does, if you don't want to log anything, just set the RewriteLogLevel to + does. If you don't want to log anything, just set RewriteLogLevel to 0. </p> - <p>Now, it's time to do the URI rewriting trick:</p> - <source>RewriteRule foo/(.*) /cocoon/foo/$1 [PT]</source> - <p>This line instructs Apache to redirect everything under "foo" to - "cocoon/foo" and passes it on to other processing ("[PT]" option), + <p> + Now, it's time to do the URI rewriting trick. + </p> + <source> + RewriteRule bar/(.*) /cocoon/bar/$1 [PT] + </source> + <p> + This line instructs Apache to redirect everything under "bar" to + "cocoon/foo" and to pass it on for other processing ("[PT]" option), like mod_alias. </p> - <p>Now, just restart Apache and point your browser to:</p> - <source><your-server>:8080/foo/<something>...</source> - <p>it should work just fine.</p> + <p> + Just restart Apache and point your browser to: + </p> + <source> + <your-server>:8080/bar/<something> + </source> + <p> + It should work just fine. + </p> + <note> + The RewriteRule may not work in all cases (notably under Slackware Linux with Apache 1.3), + if so, try replacing it with: + RewriteRule ^/Foo /cocoon/Foo/ [R] + RewriteRule ^/Foo(.*) /cocoon/Foo$1 [R] + </note> </answer> </faq> <faq> - <question>How could I have my Cocoon app in a directory other than + <question>How could I have my Cocoon app located in a directory other than $TOMCAT_HOME/webapps/cocoon/<my-app>? </question> <answer> - <note>This entry refers only to an Apache + Tomcat + Cocoon configuration, - and was tested under: Windows NT 4.0 + Apache 1.3.14 + Tomcat 3.2 + Cocoon + <note> + This entry was tested under Windows NT 4.0 + Apache 1.3.14 + Tomcat 3.2 + Cocoon 2.0b1. </note> - <p>Let's suppose the following:</p> + <p>Let's suppose the following.</p> <ol> - <li>you have an application called "foo" which works perfectly when + <li> + You have an application called "foo" which works perfectly when located under the %TOMCAT_HOME%\webapps\cocoon\foo directory. </li> - <li>you want it to be located under the "c:\foo" directory instead</li> + <li> + You want it to be located under the "c:\foo" directory instead + </li> </ol> - <p>This could be done pretty easily twisting a little bit the sitemap. The - idea is to mount the sub-sitemap of the "foo" application on a specific - location on the file system, rather than under the deafult cocoon context. + <p> + This could be accomplished quite easily by twisting the sitemap a little bit. The + idea is to mount the sub-sitemap of the "foo" application in a specific + location of the file system instead of under the default cocoon context. </p> - <p>Here's the sitemap.xmap fragment used to do this:</p> - - <source><![CDATA[ + <p> + Here's the sitemap.xmap fragment used to do this. + </p> + <source> +<![CDATA[ <map:pipeline> <map:match pattern="foo/**"> <map:mount uri-prefix="foo" src="file:///c:/foo/"/> </map:match> </map:pipeline> -]]></source> - - <p>The "file:" type of source instructs Cocoon to search the sub-sitemap +]]> + </source> + <p> + The "file:" type of source instructs Cocoon to search the sub-sitemap under the specified directory (which happens to be "c:\foo", since this is a Windows system). See explanation of <link href="../userdocs/concepts/sitemap.html#file-url">file: URLs</link> </p> - <p>Now, you just need to copy everything which was under the - webapps/cocoon/foo directory to the /foo directory, and it should work + <p> + Now, you just need to copy everything which was under the + %TOMCAT_HOME%\webapps\cocoon\foo directory to the c:\foo directory, and it should work graciously. </p> </answer> @@ -120,115 +194,73 @@ </question> <answer> <p> - You need to use mod_jk. Add the following line to <code>%APACHE_HOME%\conf\httpd.conf</code> + You need to use mod_jk. Add the following line to <code>%APACHE_HOME%\conf\httpd.conf</code> </p> - - <source>JkMount /cocoon/* ajp12</source> - + <source> + JkMount /cocoon/* ajp12 + </source> <p> - along with other directives that are already listed in mod_jk.conf-auto - in the tomcat/conf directory. The the above directives can be added at the - end of httpd.conf. + along with other directives that are already listed in mod_jk.conf-auto + in the tomcat/conf directory. The above directives can be added at the + end of httpd.conf. </p> </answer> </faq> <faq> <question> - How do I hide "cocoon" in the URL's once I integrate using mod_jk as shown above? + How can I improve performance by making the web-server deliver the static contents ? </question> <answer> - <p> - Basically to use <code>http://your.server.org/Foo/welcome</code> (as an example) instead of - <code>http://your.server.org/cocoon/Foo/welcome</code>. You need the following two modifications: - </p> - <p> - Step #1: Add the following lies to to httpd.conf. - </p> - - <source><![CDATA[ -RewriteEngine On -RewriteLog "/var/log/rewrite.log" -RewriteLogLevel 0 -RewriteRule ^/Foo /cocoon/Foo/ [R] -RewriteRule ^/Foo(.*) /cocoon/Foo$1 [R] -]]></source> - - <p> - The file rewrite.log does not have to be located in <code>/var/log</code>. For - instance, under Windows NT other locations may be appropriate. The - RewriteLogLevel should be set 3 for debug purposes. The third line is - essentially a redirect, so that Foo becomee <code>/cocoon/Foo/</code> with the - trailing <code>/</code>, without it the request would not map onto - </p> - - <source><![CDATA[ -<map:match pattern=""> - <map:redirect-to uri="welcome" /> -</map:match>]]></source> - - <p> - when you I request <code>http://your.server.org/Foo</code>. - - Finally, the last RewriteRule could depend on the local settings. - The original suggestion by Luca was a single line entry (that replaces - both RewriteRules above) according to: - </p> - - <source>RewriteRule Foo/(.*) /cocoon/Foo/$1 [PT]</source> - - <note> - This did not work in my case (Slackware Linux with Apache1.3, - tomcat3.2.2, Cocoon). Again, these RewriteRules may vary somewhat - depending on the local settings. You may have to experiment a bit. - </note> - <p> - Step #2: Add to the sitemap.xmap in the cocoon directory. - </p> - - <source><![CDATA[ -<map:pipeline> - <map:match pattern="Foo/**"> - <map:mount uri-prefix="Fru" src="file:///www/Foo/" - check-reload="yes" reload-method="synchron"/> - </map:match> -</map:pipeline> -]]></source> - - <p> - Here, <code>/www/Foo</code> is a some directory on the local file system where the - xml, xsp, .., files of the application Foo live. - </p> + <p> + Fairly easy to do. + </p> + <ol> + <li> + Put the static contents in a physical directory. (Let's call it "c:\foo\static-stuff". + On UNIX it may be "/foo/static-stuff".) + </li> + <li> + Make a virtual directory out of "c:\foo\static-stuff" (or, under UNIX "/foo/static-stuff") + in you favorite web-server, and name it "static-foo". + </li> + <li> + Reference the static contents in your Cocoon app by URIs starting with "/static-foo", as in: + "/static-foo/images/foo.gif" or "/static-foo/scripts/bar.js" + </li> + </ol> + <p> + The web-server will now handle the static contents, leaving Cocoon to take care of the + dynamic stuff only, delivering optimal performance. + </p> </answer> </faq> <faq> <question> - How can I run Cocoon without X11. Why is a Display needed? + How can I run Cocoon without X11. Why is a Display needed ? </question> <answer> - <p> - An Xserver is needed due to the batik library fop uses. batik uses - java's graphics code, which in turn requires the Xserver. - If you don't have an xserver on your system, and can't set the DISPLAY - variable to one, then try out xvfb. xvfb gives you an 'in-memory' - xserver, which doesn't require any display hardware to run. - </p> + <p> + An Xserver is needed because of the batik library fop uses. batik uses + java's graphics code, which in turn requires the Xserver. + If you don't have an xserver on your system and can't set the DISPLAY + variable to one, then try out xvfb. xvfb gives you an 'in-memory' + xserver, which doesn't require any display hardware to run. + </p> - <source><![CDATA[ + <source><![CDATA[ $> Xvfb :1 -screen 0 800x600x8 & $> export DISPLAY=:1 $> $TOMCAT_HOME/bin/startup.sh -f server.xml -]]></source> +]]> + </source> - <p> - Another solution is to use PJA library. Read 'Linux/Headless/Batik' - section in the <link href="../installing/index.html">Cocoon installation guide</link>. - </p> + <p> + Another solution is to use PJA library. Read 'Linux/Headless/Batik' + section in the <link href="../installing/index.html">Cocoon installation guide</link>. + </p> </answer> </faq> - - - -</faqs> +</faqs> \ No newline at end of file
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]