2011-09-02 65 views
2

我试图(没有成功)将JRuby Rack-Rails应用程序的响应传递给过滤器,以便处理它。基本上我想使用Orbeon XForm引擎来增强来自我的Rails应用程序的XHTML输出。如果我在JRuby Rack上使用简单的Java servlet,那么一切都可以顺利进行。JRuby Rack - 如何添加servlet过滤器?

这里的web.xml文件:

<!DOCTYPE web-app PUBLIC 
    "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 

    <context-param> 
    <param-name>public.root</param-name> 
    <param-value>/</param-value> 
    </context-param> 

    <context-param> 
    <param-name>rails.env</param-name> 
    <param-value>production</param-value> 
    </context-param> 

    <context-param> 
    <param-name>jruby.min.runtimes</param-name> 
    <param-value>2</param-value> 
    </context-param> 

    <context-param> 
    <param-name>jruby.max.runtimes</param-name> 
    <param-value>4</param-value> 
    </context-param> 


    <filter> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <filter-class>org.orbeon.oxf.servlet.OrbeonXFormsFilter</filter-class> 
    <init-param> 
     <param-name>oxf.xforms.renderer.context</param-name> 
     <param-value>/orbeon</param-value> 
    </init-param> 
    </filter> 

    <!-- This is necessary so that XForms engine resources can be served appropriately --> 
    <filter-mapping> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <url-pattern>/orbeon/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <!-- Any web resource under /xforms-jsp is processed by the XForms engine --> 
    <filter-mapping> 
    <filter-name>orbeon-xforms-filter</filter-name> 
    <url-pattern>/page/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 

    <filter> 
    <filter-name>RackFilter</filter-name> 
    <filter-class>org.jruby.rack.RackFilter</filter-class> 
    </filter> 

    <filter-mapping> 
    <filter-name>RackFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 


    <listener> 
    <listener-class>org.jruby.rack.rails.RailsServletContextListener</listener-class> 
    </listener> 


</web-app> 

在此先感谢
桑德罗。

+0

我不确定为什么它会使用“简单”servlet而不是JRuby Rack,因为JRuby Rack是一个servlet。当你说它不起作用时,它好像没有配置过滤器,或者你有错误?如果出现错误,那可能是解决方案的暗示。如果过滤器不在那里,也许JRuby Rack有特殊的方法输出其内容,而不会被过滤器拦截?检查代码时,过滤器中会覆盖getOutputStream()和getWriter(),所以这不应该成为问题。 – avernet

+0

供参考,这里是Orbeon XForms过滤器的源代码:https://github.com/orbeon/orbeon-forms/blob/master/src/java/org/orbeon/oxf/servlet/OrbeonXFormsFilter.java – avernet

回答

0

我不熟悉Orbeon XForms,所以我对你的问题不是很积极。但根据上述web.xml,Orbeon过滤器仅适用于/orbeon/*/page/* URL,而Rack过滤器适用于所有内容。

如果servlet方法有效,为什么不坚持呢?

+0

谢谢对于回复, 过滤器只需要应用于特定网址(/ orbeon/*和/ page/*)的事实是我想遵循的行为的一部分。 servlet方法意味着完全不使用Ruby,(因为它使用了Java servlet),并且我想让Ruby保持在这个项目中。你能确认可以将从Rails输出的HTML传递给另一个过滤器吗?你有一些示例代码?提前致谢 :) –

相关问题