0

マグノリアサーブレットに大きな問題があります。これまでのところ、考えられるすべてのことを試しました。

マグノリアのドキュメントに関しては 、web.xmlの代わりにモジュール定義でサーブレット定義を設定できます(これは特に拡張するためのより良いアイデアに聞こえます)

だから私はこのコードを私のxmlモジュールに配置しました

 <servlets>
    <servlet>
        <name>jcaptcha</name>
        <class>com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet</class>
        <mappings>
        <mapping>/jcaptcha.jpg</mapping>
        </mappings>
    </servlet>
 </servlets>

次に、フィルターのバイパスノード(config.server.filters.bypasses.jcaptcha.xml)を作成しました

 <?xml version="1.0" encoding="UTF-8"?>
<sv:node sv:name="jcaptcha" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <sv:property sv:name="jcr:primaryType" sv:type="Name">
        <sv:value>mgnl:contentNode</sv:value>
    </sv:property>
    <sv:property sv:name="jcr:uuid" sv:type="String">
        <sv:value>f845ae89-a537-4e9f-b074-57d812fd92a6</sv:value>
    </sv:property>
    <sv:property sv:name="class" sv:type="String">
        <sv:value>info.magnolia.voting.voters.URIStartsWithVoter</sv:value>
    </sv:property>
    <sv:property sv:name="pattern" sv:type="String">
        <sv:value>/jcaptcha.jpg</sv:value>
    </sv:property>
    <sv:node sv:name="MetaData">
        <sv:property sv:name="jcr:primaryType" sv:type="Name">
            <sv:value>mgnl:metaData</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:activated" sv:type="Boolean">
            <sv:value>false</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:activatorid" sv:type="String">
            <sv:value>superuser</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:authorid" sv:type="String">
            <sv:value>superuser</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:creationdate" sv:type="Date">
            <sv:value>2007-04-25T18:23:31.784+02:00</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:lastaction" sv:type="Date">
            <sv:value>2007-05-02T17:00:15.025+02:00</sv:value>
        </sv:property>
        <sv:property sv:name="mgnl:lastmodified" sv:type="Date">
            <sv:value>2012-06-07T05:41:25.275-05:00</sv:value>
        </sv:property>
    </sv:node>
</sv:node>

それでも、localhost / magnolia / jcaptcha.jpgをリクエストすると、404エラーが発生します。 「しかし」サーブレット定義をweb.xmlに入れると、正しい結果が得られます。

誰かが私が欠けているものを教えてもらえますか?

4

1 に答える 1

0

これがマグノリアフォーラムから得た答えです

 <servlets>
 <servlet>
 <name>jcaptcha</name>
 <class>com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet</class>
 <mappings>
 <mapping>/jcaptcha.jpg</mapping>
 </mappings>
 </servlet>
 </servlets>

そうすることで、マグノリアにサーブレットを実行するように指示します。config:/ server / filters / servlets / jcaptchaにモジュールをインストールすると、サーブレットがインストールされていることを確認できます。

次に、フィルターのバイパスノード(config.server.filters.bypasses.jcaptcha.xml)を作成しました

そうすることで、マグノリアに上記のバイパスURLを処理しないように指示しますが、代わりにサーブレットコンテナハンドラーにその要求を許可します。Magnoliaだけがサーブレットについて知っているが、コンテナについては知らないので、404を取得します。コンテナにサーブレットを認識させると(web.xmlに追加することにより)、結果が得られます。

2つのオプションがあります。バイパスと定義をweb.xmlに保持するか、サーブレット定義をモジュールに保持します。両方を持つことはできません。また、Magnoliaはモジュールのインストール中にモジュール記述子からサーブレット定義を読み取るため、そのモジュールがすでにインストールされている場合は、更新の一部としてinfo.magnolia.module.delta.RegisterModuleServletsTaskを呼び出す必要があることに注意してください。

HTH、1月

于 2012-06-10T07:41:46.110 に答える