0

私はこのサーブレット全体にかなり慣れていないので、間違った/紛らわしい用語を混ぜたり使用したりした場合は訂正してください。ただし、JAX-RS(Jersey)を使用してJavaでブログpingサーバーを作成していますが、REST入力を受け入れるサーブレットクラスと、同じコンテンツを一覧表示する別のサーブレットクラスがあるという問題に直面しています。

現在、次のようなクラスを介してオブジェクトを共有しています。

public class BlogPingUtils {

    private static final String LIST_OF_CHANGES = "listOfChanges";

    public static List<PingInfo> getListOfChanges(ServletContext context) {
        List<PingInfo> listOfChanges = (List<PingInfo>)context.getAttribute(LIST_OF_CHANGES);
        if(listOfChanges == null) listOfChanges = new ArrayList<PingInfo>();

        return listOfChanges;
    }

    public static void setListOfChanges(ServletContext context, List<PingInfo> listOfChanges) {
        context.setAttribute(LIST_OF_CHANGES, listOfChanges);
    }
}

これは小規模な開発環境では機能しますが、並行性の問題などが原因で、汚れた感じがし、高負荷の本番環境では機能しない可能性があります。また、それはあまり柔軟ではありません。私がやりたいのは、データの読み取りと書き込みのメソッドを持つインターフェイスを用意することです。次に、このインターフェイスを実装するクラスのオブジェクトをこれら2つのサーブレットに挿入して、データとの対話に実際に同じオブジェクトを使用するようにします。これは、同期されたリストやデータベーストランザクションなどによって裏付けられます。

これを行うための好ましい方法は何でしょうか?出来ますか?私のweb.xmlは現在非常に単純で、次のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <display-name>Blog Ping</display-name>

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.vrutberg.blogping</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
4

1 に答える 1

0

静的クラスではなく、実装クラスを作成するのではなく、ゲッターとセッターを使用してインターフェイスを設計します。

次に、シングルトン(または必要に応じてプール)実装クラスを、JNDIなどの両方のサーブレットから見えるスレッドセーフな中央リポジトリに登録します。

サーブレットは中央リポジトリにクエリを実行し、インターフェイスに「キャスト」します。

于 2012-03-13T18:09:58.917 に答える