2

私はRestletsが初めてです。web.xml を構成しようとしています (JBoss で)。2 つのエントリがあります。1 つはサーブレット用 (Web サービスとは関係ありません)、もう 1 つは Web サービス用で、Restlet を使用しています。ここにエントリがあります..

 <servlet>
  <servlet-name>AuthenticationServlet</servlet-name>
  <servlet-class>com.safeid.web.server.api.servlet.AuthenticationServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>

 <servlet-mapping>
  <servlet-name>AuthenticationServlet</servlet-name>
  <url-pattern>/authenticate/*</url-pattern>
 </servlet-mapping>


<!--  Start of Entries for the REST Web Services. -->

  <context-param>
   <param-name>org.restlet.application</param-name>
   <param-value>com.safeid.web.server.SafeIDRouterApplication</param-value>
  </context-param>

 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>com.noelios.restlet.ext.servlet.ServerServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>


 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>
<!-- END of Entries for the REST Web Services.-->

どちらも一緒に動作しません。上記のセットアップでは、Restlet が機能します。ただし、変更すると

RestletServlet /*

のようなものに

<servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/credential/*</url-pattern>
 </servlet-mapping>

Restlet が機能しなくなり、AuthenticationServlet が正常に機能します。ここで何が欠けていますか?

4

2 に答える 2

3

私も同じようなフラストレーションを感じていました。たぶん、私が見つけたことが役立つかもしれません。

Application クラスに次のような Router エントリがありました。

router.attach("/users", UsersResource.class);

そして、私のサーブレット マッピングが次のような場合、問題なく動作しました。

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

これを次のように変更すると、次のようになります。

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/users/*</url-pattern>
</servlet-mapping>

それは機能しなくなりました。

問題は、サーブレット コンテナが一致した URL の一部を「消費」または削除することです。この場合、「/users」を削除します。したがって、次のような URL を使用していた場合:

http://www.mywebsite.com/users

次のように変更する必要があります。

http://www.mywebsite.com/users/users

もちろん、url-pattern を好きなように設定できます:

<servlet-mapping>
    <servlet-name>Sandbox</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

次に、次のようにアクセスします。

http://www.mywebsite.com/rest/users

url-pattern は取り除かれ、独自のルーティング目的で Application クラスに残っているものはすべて取得されます。

HTH

于 2011-09-09T21:29:25.627 に答える
1

以下の例のように、init-params が欠落しているようです。

<servlet>
    <servlet-name>MyApplication</servlet-name> 
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>my.class.that.extends.Application.MyApplication</param-value>
    </init-param> 
</servlet>

org.restlet.Application を拡張するクラスが必要です (少なくとも Restlet 2.0 では)。

于 2010-06-15T19:07:03.710 に答える