0

私は何年もの間これに対する答えを探していましたが、どこにも見つかりません。誰かが助けてくれることを本当に願っています

私の構造:

WebContent
 - resources
     - css
         - style.css
 - WEB-INF
     - web.xml
template.html

web.xml

 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>

アプリケーション.java

String ROOT_URI = "C:/projects/testsite/WebContent/"
    try {
        configuration.setDirectoryForTemplateLoading(new File(ROOT_URI));
        configuration.setObjectWrapper(new BeansWrapper());
    } catch (IOException e) {
        e.printStackTrace();
    }

    router.attach("/resources", new Directory(getContext(), LocalReference.createFileReference(ROOT_URI)));
    router.attach("/index", IndexResource.class);

URL: localhost:8080/testsite/index に移動すると、正しいデータが入力されたテンプレート ファイルが取得されます。ただし、CSS は読み込まれません。Eclipse コンソールで、restlet がフェッチしようとしていることがわかりますが、404 が返されます

127.0.0.1   8080    GET /testsite/resources/css/style.css   -   404

上記のように、Directoryクラスを使用して css ディレクトリをロードしようとしていますが、効果がありません。もしかしてこれはダメ!?css が restlet を通過しない方法はありますか? ROOT_URI絶対パスではなく相対パスにすればよかった。私の場所のパスを取得する簡単な方法はありますか?

4

2 に答える 2

2

まず、ディレクトリが「ファイル」プロトコルに基づいているため、アプリケーションのコンテナでこのクライアント コネクタを宣言する必要があることに気付きました。これは、web.xml 構成ファイル内で行われます。

<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>test.MyApplication (actually the full name of your Application</param-value>
    </init-param>
    <init-param>
        <param-name>org.restlet.clients</param-name>
        <param-value>FILE</param-value>
    </init-param>
 </servlet>

この指示がない場合、ログには次のようなエントリが含まれていると思います。

ATTENTION: The protocol used by this request is not declared in the list of client connectors. (FILE)

そうは言っても、「ファイル」プロトコルを使用して静的ファイルを提供すると、アプリケーションがファイル システムに結び付けられます。これらのファイルを内部的に提供できます。つまり、コンテナーがアプリケーション WAR 内の静的リソースを検索できるようにします (圧縮されていないかどうかに関係なく)。次のように、「戦争」プロトコルに基づいてディレクトリを単純に作成できます。

router.attach("/resources", new Directory(getContext(), "war:///"));

これがお役に立てば幸いです。

敬具、 ティエリー・ボイロー

于 2012-05-28T08:26:53.067 に答える
0

このマッピングを web.xml ファイルに入れる必要がありました。

 <servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
于 2012-05-19T11:34:51.967 に答える