<?xml version="1.0"?>
<rss version="2.0">
<channel>
<link>http://helma.org/wiki/Helma+NG/Middleware/</link>
<title>helma.org/wiki/Helma NG/Middleware</title>
<description>Updates for Page helma.org/wiki/Helma NG/Middleware</description>
<pubDate>Thu, 24 May 2012 04:27:45 +0000</pubDate>
<item>
<title>Version 5</title>
<link>http://helma.org/wiki/Helma+NG/Middleware/history.diff?v=5</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;21&lt;/td&gt;&lt;td&gt;The above list shows some of the middleware that comes with Helma NG. Have a look at the &lt;span class=&#39;diffremoved&#39;&gt;[modules/helma/middlware][http://github&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;[modules/helma/middlware](http://github&lt;/span&gt;.&lt;span class=&#39;diffremoved&#39;&gt;com/hns/helma-ng/tree/master/modules/helma/middleware] &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;com/hns/helma-ng/tree/master/modules/helma/middleware) &lt;/span&gt;directory for more middleware.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Thu, 12 Nov 2009 14:03:41 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 4</title>
<link>http://helma.org/wiki/Helma+NG/Middleware/history.diff?v=4</link>
<description>&lt;ul class=&#39;diffproperties&#39;&gt;&lt;li&gt;Set &lt;span class=&#39;diffpropname&#39;&gt;useMarkdown&lt;/span&gt; to &lt;span class=&#39;diffadded&#39;&gt;true&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;1&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Middleware is feature &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;The idea &lt;/span&gt;of &lt;span class=&#39;diffremoved&#39;&gt;the Helma NG webapp framework that provides a simple interface &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;middleware is &lt;/span&gt;to &lt;span class=&#39;diffremoved&#39;&gt;inject additional code between &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;wrap &lt;/span&gt;the &lt;span class=&#39;diffremoved&#39;&gt;web server and &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;[JSGI] application (or any middleware already wrapping &lt;/span&gt;the &lt;span class=&#39;diffremoved&#39;&gt;web application&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;application) to run some pre- or post-request code&lt;/span&gt;. &lt;span class=&#39;diffremoved&#39;&gt;Middleware uses &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Since middleware exposes &lt;/span&gt;the same &lt;span class=&#39;diffremoved&#39;&gt;calling conventions as web app actions: a function that takes a Request object as argument and returns a Response object&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;JSGI interface to the outside world, it can be nested or &amp;quot;stacked&amp;quot; at will&lt;/span&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;3&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Since &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Usually, JSGI &lt;/span&gt;middleware &lt;span class=&#39;diffremoved&#39;&gt;wraps the web &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;comes as a function that takes a JSGI &lt;/span&gt;application &lt;span class=&#39;diffremoved&#39;&gt;(and any middlware stacked upon it)&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;as argument&lt;/span&gt;, &lt;span class=&#39;diffremoved&#39;&gt;it is in full control of how the request is processed&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;and returns a middleware function wrapping that app&lt;/span&gt;. &lt;span class=&#39;diffadded&#39;&gt;For example, a simple middleware that adds logging to each request might be implemented as follows:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;5&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;* Inspect and modify the request object before processing it further&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; exports.Logger = function(app) &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;6&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;* Decide not to pass the request on,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;returning its own response instead&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;  return function(env) &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;* Inspect and modify the response obtained from the application&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log(env.SCRIPT_NAME + env.PATH_INFO);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;8&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return app(env);&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The middleware that comes with Helma NG follows this pattern. Additionally, the Helma NG JSGI implementation offers a convenience feature to automatically instantiate and wrap middleware so you don&#39;t have to. All you need to do is export your middleware factory functions as an array called `middleware` in your `config` module. If your middleware factory function is called `middleware` or `handleRequest` it is even enough to just export the module name:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Middleware is configured in an exported Array called &amp;lt;code&amp;gt;middleware&amp;lt;/code&amp;gt; in the app&#39;s &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt; module.&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;By convention,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;the webapp looks for a function called &amp;lt;code&amp;gt;handleRequest&amp;lt;/code&amp;gt; in middleware modules&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; exports&lt;/span&gt;.&lt;span class=&#39;diffadded&#39;&gt;middleware =&lt;/span&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;8&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;helma/middleware/gzip&#39;,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;helma/middleware/etag&#39;,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;helma/middleware/error&#39;,&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;helma/middleware/notfound&#39;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; ];&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;The &lt;span class=&#39;diffremoved&#39;&gt;&amp;lt;code&amp;gt;request&amp;lt;/code&amp;gt; argument contains a &amp;lt;code&amp;gt;process&amp;lt;/code&amp;gt; method that is used to pass &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;above list shows some of &lt;/span&gt;the &lt;span class=&#39;diffremoved&#39;&gt;request on in the &lt;/span&gt;middleware &lt;span class=&#39;diffremoved&#39;&gt;chain&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;that comes with Helma NG&lt;/span&gt;. &lt;span class=&#39;diffremoved&#39;&gt;Thus, &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Have &lt;/span&gt;a &lt;span class=&#39;diffremoved&#39;&gt;middleware implementation that just passes on the request might &lt;/span&gt;look &lt;span class=&#39;diffremoved&#39;&gt;like this:&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;at the [modules/helma/middlware][http://github.com/hns/helma-ng/tree/master/modules/helma/middleware] directory for more middleware.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Of course,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffadded&#39;&gt;the great thing about JSGI middleware is that it&#39;s easy to write your own,&lt;/span&gt;&amp;nbsp;&lt;span class=&#39;diffremoved&#39;&gt;exports&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;or use middleware from another package&lt;/span&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; &amp;nbsp; return req.process();&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;14&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;15&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffremoved&#39;&gt;Have a look at the *modules/helma/middlware|http://github.com/hns/helma-ng/tree/master/modules/helma/middleware* directory for the standard middleware currently shipping with Helma NG.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Thu, 12 Nov 2009 14:01:03 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 3</title>
<link>http://helma.org/wiki/Helma+NG/Middleware/history.diff?v=3</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;Have a look at the &lt;span class=&#39;diffremoved&#39;&gt;*modules/helma/middlware|https://dev&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;*modules/helma/middlware|http://github&lt;/span&gt;.&lt;span class=&#39;diffremoved&#39;&gt;helma.org/trac/helma/browser/helma-ng/trunk/modules/helma/middleware* &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;com/hns/helma-ng/tree/master/modules/helma/middleware* &lt;/span&gt;directory for the standard middleware currently shipping with Helma NG.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Thu, 18 Jun 2009 20:20:43 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 2</title>
<link>http://helma.org/wiki/Helma+NG/Middleware/history.diff?v=2</link>
<description>&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;1&lt;/td&gt;&lt;td&gt;Middleware is &lt;span class=&#39;diffremoved&#39;&gt;a &lt;/span&gt;feature of &lt;span class=&#39;diffremoved&#39;&gt;web connectors &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;the Helma NG webapp framework that provides a simple interface &lt;/span&gt;to &lt;span class=&#39;diffremoved&#39;&gt;plug in &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;inject &lt;/span&gt;additional code between the web server and the web &lt;span class=&#39;diffremoved&#39;&gt;app using a standard interface&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;application&lt;/span&gt;. &lt;span class=&#39;diffremoved&#39;&gt;Another common term for middleware that is used in &lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;Middleware uses &lt;/span&gt;the &lt;span class=&#39;diffremoved&#39;&gt;Java Servlet API is &amp;quot;Filters&amp;quot;&lt;/span&gt;&lt;span class=&#39;diffadded&#39;&gt;same calling conventions as web app actions: a function that takes a Request object as argument and returns a Response object&lt;/span&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;2&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;3&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Since middleware wraps the web application (and any middlware stacked upon it), it is in full control of how the request is processed. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;4&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;5&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;* Inspect and modify the request object before processing it further&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;6&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;* Decide not to pass the request on, returning its own response instead&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;7&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;* Inspect and modify the response obtained from the application&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;8&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;9&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Middleware is configured in an exported Array called &amp;lt;code&amp;gt;middleware&amp;lt;/code&amp;gt; in the app&#39;s &amp;lt;code&amp;gt;config&amp;lt;/code&amp;gt; module. By convention, the webapp looks for a function called &amp;lt;code&amp;gt;handleRequest&amp;lt;/code&amp;gt; in middleware modules. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;10&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;11&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;The &amp;lt;code&amp;gt;request&amp;lt;/code&amp;gt; argument contains a &amp;lt;code&amp;gt;process&amp;lt;/code&amp;gt; method that is used to pass the request on in the middleware chain. Thus, a middleware implementation that just passes on the request might look like this:&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;12&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;13&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; exports.handleRequest(req) {&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;14&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; &amp;nbsp; return req.process();&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;15&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&amp;nbsp; }&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;16&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;17&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Have a look at the *modules/helma/middlware|https://dev.helma.org/trac/helma/browser/helma-ng/trunk/modules/helma/middleware* directory for the standard middleware currently shipping with Helma NG.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;18&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Tue, 19 May 2009 13:55:18 +0000</pubDate>
<author>hannes</author>
</item>
<item>
<title>Version 1</title>
<link>http://helma.org/wiki/Helma+NG/Middleware/history.diff?v=1</link>
<description>&lt;ul class=&#39;diffproperties&#39;&gt;&lt;li&gt;Set &lt;span class=&#39;diffpropname&#39;&gt;tags&lt;/span&gt; to &lt;span class=&#39;diffadded&#39;&gt;web framework&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&#39;diffbody&#39;&gt;&lt;table&gt;&lt;tr&gt;&lt;td style=&quot;width:2em; color:#999;&quot;&gt;1&lt;/td&gt;&lt;td&gt;&lt;span class=&#39;diffadded&#39;&gt;Middleware is a feature of web connectors to plug in additional code between the web server and the web app using a standard interface. Another common term for middleware that is used in the Java Servlet API is &amp;quot;Filters&amp;quot;. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</description>
<pubDate>Fri, 20 Feb 2009 20:07:27 +0000</pubDate>
<author>hannes</author>
</item>
</channel>
</rss>

