2011-10-30 4 views
5

Webアプリケーション/コンテキストごとに、特定のWebアプリケーションだけの書き換えファイルを指定する方法はありますか?私が現在作業しているのを見る唯一の方法は、起動時にコマンドライン経由で行うことです。私は、おそらくoverride.xmlファイルまたはコンテキストXMLファイルの設定を考えていました。JettyにWebアプリケーションごとのjetty-rewrite.xmlファイルを割り当てることはできますか?

+0

https://github.com/eclipse/jetty.project/blob/master/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/でこれを行うことに関連することがあります。 RewriteHandler.javaしかし、それは明確ではありません。 –

答えて

1

context.xmlデプロイメントを使用する場合は、RewriteHandlerのルールをアプリ固有のコンテキストxmlに統合できます。

例:これはjetty-distributionで見つかった${jetty.home}/contexts/test.xmlの置き換えcontext.xmlです。すべてのリクエストのレスポンスにクッキー(visited = yes)を追加するだけのルールが追加されています。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 

<Configure class="org.eclipse.jetty.server.handler.ContextHandler"> 
    <Set name="contextPath">/</Set> 
    <Set name="handler"> 
    <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> 
     <Set name="handler"> 
     <New class="org.eclipse.jetty.webapp.WebAppContext"> 
      <Set name="contextPath">/</Set> 
      <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test.war</Set> 
      <Set name="extractWAR">true</Set> 
      <Set name="copyWebDir">false</Set> 
      <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set> 
      <Set name="overrideDescriptor"><SystemProperty name="jetty.home" default="."/>/contexts/test.d/override-web.xml</Set> 
     </New> 
     </Set> 
     <Set name="rewriteRequestURI">true</Set> 
     <Set name="rewritePathInfo">false</Set> 
     <Set name="originalPathAttribute">requestedPath</Set> 

     <!-- add a cookie to each path visited --> 
     <Call name="addRule"> 
     <Arg> 
      <New class="org.eclipse.jetty.rewrite.handler.CookiePatternRule"> 
      <Set name="pattern">/*</Set> 
      <Set name="name">visited</Set> 
      <Set name="value">yes</Set> 
      </New> 
     </Arg> 
     </Call> 
    </New> 
    </Set> 
</Configure> 

、このルールが機能するかどうかを確認桟橋を開始し、後藤​​し、「セッション」テストコンポーネントを使用するには、visited=trueは、上部のクッキーのように見えるようになることがわかります。

+0

_ "context.xml deployablesを使用している場合" _ - その意味はわかりませんが、{{jetty}/contexts/{name} .xml'で個々のコンテキストを定義しています。 .xmlまたは任意のテストコンポーネント。 –

+0

この例を既存のコンテキストコンフィグレーションに適用しようとしました(WebAppContextコンフィグレーションのSetコマンドをあなたのサンプルのそれぞれのNewタグに転送することによって)、その結果、org.eclipse.jetty.server.Dispatcher $にStackOverflowErrorが発生しました'/'にアクセスしようとするとForwardAttributes.setAttribute(Dispatcher.java:410) '([フルトレース](http://pastebin.com/vZEvmDRj)) - 動作しているように見えます。特定のファイルを訪問したとき。 –

+0

これはJettyのバグか、設定ミスなどの理由でわかりません。このハンドラがどのように動作するかについての説明はおそらく有用であろう。 (問題をデバッグしようとしましたが、トップレベルのcontextPathを取り出しました。何も変更されていないので、必要があるかどうか疑問に思っています) –

関連する問題