![]() | ![]() | ![]() |
| |||||||||||||||||||||||||
![]() | ||||||||||||||||||||||||||||
![]() | ![]() | |||||||||||||||||||||||||||
Resin 3.1 Documentation Examples Changes Overview Installation Configuration Quercus SOA/IoC JSP Servlets and Filters Admin (JMX) EJB Amber Security Performance Hessian XML and XSLT Third-party Troubleshooting/FAQ Servlets Servlet Lib WebDAV run-at Filters Filter Lib FAQ |
Resin provides a set of convenient filters in the com.caucho.filters.* package. GzipFilterThe GzipFilter compresses the output of pages for browsers which understand compression, and leaves the output unchanged if the browser does not support compression. A browser indicates to the server that it supports gzip compression by including "gzip" in the "Accept-Encoding" request header. GzipFilter is available in Resin-Professional.
<web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name="gzip" filter-class="com.caucho.filters.GzipFilter"/> <filter-mapping url-pattern="/*" filter-name="gzip"/> </web-app> See com.caucho.filters.GzipFilter. XsltFilterThe XsltFilter transforms the response using xslt. A Servlet or a JSP can produce XML results which are transformed using xslt. <web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name="xslt" filter-class="com.caucho.filters.XsltFilter"/> <filter-mapping url-pattern="/*.jsp" filter-name="xslt"/> </web-app>
See com.caucho.servlets.XsltFilter. A request attribute or xml processing directive specifies the stylesheetResin's XsltFilter determines the stylesheet (*.xsl file) to apply from the first of:
The classpath is used to find the stylesheet. A stylesheet can be placed in
<web-app xmlns="http://caucho.com/ns/resin"> <class-loader> <simple-loader path="WEB-INF/xsl"/> </class-loader> ... </web-app> WEB-INF/xsl/default.xsl In a JSP the request attribute can be set with the following: <% request.setAttribute("caucho.xsl.stylesheet","transform.xsl"); %> Specifying a processing instruction is another way to indicate the stylesheet (but a bit slower for performance considerations): <?xml-stylesheet type="text/xsl" href="transform.xsl"?> The stylesheet is applied only for certain content typesThe filter by default will only transform responses that have a content type of one of the following:
The filter can also be configured to unconditionally do a transformation regardless of the content type: <web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name='xslt' filter-class='com.caucho.filters.XsltFilter'> <init> <unconditional>true</unconditional> </init> </filter> <filter-mapping url-pattern='/xslt/*' filter-name='xslt'/> </web-app> TransactionFilterThe TransactionFilter wraps the request in a UserTransaction and commits the transaction when the servlet completes. All database calls for the request will either succeed together or fail. The UserTransaction is obtained by doing a jndi lookup with the name "java:comp/UserTransaction". This filter will gracefully handle any exceptions that occur during the request by doing a rollback on the transaction. <web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name='transaction-filter' filter-class='com.caucho.filters.TransactionFilter'/> <filter-mapping url-pattern='/DatabaseServlet/*' filter-name='transaction-filter'/> </web-app> See com.caucho.servlets.TransactionFilter. ExpiresFilterThe ExpiresFilter sets the Expires cache control header, allowing servlet output and jsp results to be cached for a short time. This is useful for indicating an Expires time to the browser, and it is even more useful when used in conjunction with Resin's HTTP proxy cache. If Resin's HTTP proxy cache is in use, even a short Expires time (like 2s) can result in performance gains.
<web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name='expires-60s' filter-class='com.caucho.filters.ExpiresFilter'> <init> <cache-time>60s</cache-time> </init> </filter> <filter-mapping servlet-name='StockQuoteServlet' filter-name='expires-60s'/> </web-app> In this example, the StockQuoteServlet will be only called once every 60 seconds. This indicates to a browser that it should refresh it's local cache of the url after 60 seconds have passed. If Resin's HTTP proxy cache is being used, the first request from any browser will cause execution of the StockQuoteServlet, any requests from any browser for the next 60 seconds will be served from the proxy cache (the servlet will not be called). See com.caucho.servlets.ExpiresFilter. AnonymousExpiresFilterThe AnonymousExpiresFilter caches the response for anonymous users. A user is anonymous if the do not have a session. When a page has custom formatting for logged in users, it may still want to cache the results for non-logged in users saving time and database access. The benefits of using this filter are similar to those described in ExpiresFilter.
Servlets should call <web-app xmlns="http://caucho.com/ns/resin"> <filter filter-name='anonymous-expires' filter-class='com.caucho.filters.AnonymousExpiresFilter'> <init> <cache-time>15m</cache-time> </init> </filter> <filter-mapping url-pattern='*.jsp' filter-name='anonymous-expires'/> </web-app> See com.caucho.servlets.AnonymousExpiresFilter. RewriteFilterThe RewriteFilter rewrites and forwards URLs matching a regular expression. It is useful either when URLs change during a site redesign or when a site might want to hide its JSP structure. The functionality is similar to mod_rewrite in the Apache web server. The RewriteFilter is configured with a list of <rewrite> tags. Each tag has a which matches against the URL and a which specifies the new URL to be forwarded to. Multiple <rewrite> tags are allowed.<filter filter-name='rewrite' filter-class='com.caucho.filters.RewriteFilter'> <init> <rewrite pattern="/a/([^/]*)/([^?]*)" target="/$2/$1.jsp"/> <rewrite pattern="/b/([^/]*)/([^?]*)" target="/$2/$1.html"/> </init> </filter> <filter-mapping url-pattern='/*' filter-name='rewrite'/> See com.caucho.servlets.RewriteFilter. ThrottleFilterThe ThrottleFilter filter implemented with com.caucho.filters.ThrottleFilter restricts the number of requests from the same IP, defaulting to 2 (the HTTP spec limit.) The ThrottleFilter is useful to limit some parallel download programs that can use more threads than they should. <filter filter-name="throttle" filter-class="com.caucho.filters.ThrottleFilter"> <init> <max-concurrent-requests>2</max-concurrent-requests> </init> </filter> <filter-mapping url-pattern="/*" filter-name="throttle"/>
|