📄 plugin-dispatch.xtp
字号:
<s1 title="How the Plugins Dispatch to Resin"><summarylist/><p>The web server plugins (mod_caucho, isapi_srun, and nsapi) havetwo main tasks:</p><ol><li>Select urls to dispatch to the Java process<li>Pass the request and retrieve the response from the Java process.</ol><note>This page uses "mod_caucho" to mean all the plugins. All of the pluginswork the same, so "mod_caucho" is just a shorthand for "mod_caucho,isapi_srun, and nsapi".</note><p>In most cases, mod_caucho will just use resin.conf as expected.This tutorial should help understand what's going for themore complicated cases.</p><s2 title="servlet-mapping selects URLs"><p>The <a href="../ref/app-config.xtp#servlet-mapping">servlet-mapping</a>tag selects the URLs to send to Resin.<a href="../ref/http-config.xtp#host"><host></a> and <a href="../ref/http-config.xtp#web-app"><web-app></a> group theservlet-mapping tags. mod_caucho ignores all other tags in the resin.conf.</p><p>(mod_caucho does understand<a href="../ref/resin-config.xtp#include">resin:include</a> and how tofind web.xml, but that's part of the parsing, not part of the dispatch logic.)</p><p>When reading the resin.conf, mod_caucho uses only the following tags:</p><ul><li><a href="../ref/http-config.xtp#host"><host></a> to select virtual hosts. The <var/id/> attribute names the host.<li><a href="../ref/http-config.xtp#web-app"><web-app></a> to select applications. The <var/id/> attribute selects a URL prefix.<li><a href="../ref/app-config.xtp#servlet-mapping"><servlet-mapping></a> to select URLs. The <var/url-pattern/> attribute selects URLs.</ul><s3 title="url-pattern"><p>servlet-mapping's <a href="../ref/app-config.xtp#url-pattern">url-pattern</a>selects the URLs to pass to Resin. servlet-mapping and url-patternare part of the Servlet 2.3 standard, so there are many references explaininghow it works.</p><p>url-pattern can take one of four forms:</p><ul><li>"<var///>" matches all URLs. Use this to pass all requests to Resin.<li>"<var//prefix/url/*/>" matches any URL starting with <var//prefix/url/>,including <var/prefix/url/> itself. It does not match <var//prefix/urlfoo/>because any slash must immediately follow <var/url/><li>"<var//exact/path/>" matches only the exact path. In other words, itwill not match <var//exact/path/bogus/>.<li>"<var/*.ext/>" matches any URL with the extension <var/ext/>. Resinallows path-infos, so <var//foo/bar.ext/path/info/> will also match.</ul></s3><s3 title="url-regexp"><note>mod_caucho does not understand regular expressions. If youput regular expressions in your resin.conf, mod_caucho will not sendthe request to Resin. Apache will handle the request itself.</note><p>If you want to use regular expressions in servlet-mapping, web-app, orhosts, you must use Apache-specific configuration to send the requestto Resin. You can see this by looking at /caucho-status. /caucho-statuswill not display any regular expressions.</p></s3><s3 title="special servlet-mappings"><p>There are two special servlet-names which only affect the plugins:<var/plugin_match/> and <var/plugin_ignore/>.</p><p><var/plugin_match/> will direct a request to Resin.The servlet engine itselfwill ignore the plugin_match directive. You can use plugin_match todirect an entire subtree to Resin, e.g. to workaround theregexp limitation, but allow Resin's other servlet-mapping directivesto control which servlets are used.</p><p><var/plugin_ignore/> keeps the request at on the web server. So youcould create a directory <var//static/> where all documents, including JSPs areserved by the web server.</p><example><!-- send everything under /resin to Resin --><servlet-mapping url-pattern='/resin/*' servlet-name='plugin_match'/><!-- keep everything under /static at the web server --><servlet-mapping url-pattern='/static/*' servlet-name='plugin_ignore'/></example></s3><s3 title="<web-app>"><p><a href="../ref/http-config.xtp#web-app">web-apps</a> collect servlets andJSP files into separate applications. All the servlet-mappings in aweb-app apply only to the URL suffix.</p><p>In the following example, every URL starting with /prefix/url maps tothe web-app. The servlet-mapping only applies to URLs matching the prefix.</p><example>...<web-app id='/prefix/url'> <servlet-mapping url-pattern='*.foo' .../></web-app>..</example><p>In the exaple, mod_caucho will match any URL matching /prefix/url/*.foo./prefix/url/bar.foo will match, but /test/bar.foo will not match.</p><note>Resin standalone allows a <var/regexp/> attribute instead of anid. Because mod_caucho does not understand regexps, it will ignore anyweb-app with a <var/regexp/> attribute.</note><note>web.xml files and war files are treated exactly the same as web-appsin the resin.conf.</note></s3><s3 title="<host>"><p><a href="../ref/resin-config.xtp#host">host</a> blocks configure<a href="../ref/virtual-host.xtp">virtual hosts</a>. There's a bit ofextra work for virtual hosts that we'll ignore here. (Basically, youneed to add Apache <var/ServerName/> directives so Resin knows the nameof the virtual host.)</p><p>For dispatching, a host block gathers a set of web-apps. Each hostwill match a different set of URLs, depending on the web-app configuration.The default host matches any host not matched by a specific rule.</p><p>As usual, /caucho-status will show the URLs matched for each host.</p><note>mod_caucho does not understand the host <var/regexp/> attribute.It will ignore all hosts using <var/regexp/>. To get around this, you caneither configure Apache directly (see below), or configure the default hostwith the same set of servlet-mappings. Since mod_caucho will use thedefault host if no others match, it will send the right requests toResin.</note></s3></s2><s2 title="/caucho-status shows mod_caucho's URLs"><p>The special URL <var//caucho-status/> is invaluable in debuggingResin configurations. <var//caucho-status/> displays all the resin.confpatterns, so you can easily scan it to see which URLs mod_caucho is sendingto Resin and which ones are handled by Apache.</p></s2><s2 title="Dispatching using Apache's http.conf"><p>You can configure Apache directly, instead of letting mod_caucho dispatchfrom the resin.conf file. If you use this method, you need to makesure you match the Apache configuration with the Resin configuration.</p><note>This technique uses Apache-specific features, so it's notdirectly applicable to IIS or iPlanet.</note><p>Apache's <var/Location/> and <var/SetHandler/> directives send requeststo Resin. The mod_caucho handler is <var/caucho-request/>.</p><example title=httpd.conf>LoadModule caucho_module libexec/mod_caucho.soAddModule mod_caucho.cCauchoHost localhost 6802AddHandler caucho-request jsp<Location /servlet/*> SetHandler caucho-request</Location></example><p>Because Apache's <var/SetHandler/> is external to mod_caucho,/caucho-status will not show any <var/SetHandler/> dispatching.</p></s2></s1>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -