1

Java サーブレットで利用可能なServletInputStreamとの使用に関して質問があります。ServletOutputStream最初に、非常に必要なコンテキストをいくつか示します。

私が取り組んでいる割り当ては、Google App Engine でのタスク キューの実装に関する呼び出しです。タスクをアプリ エンジンに追加し、適切なワーカーを呼び出すことができました。ArrayList<>ただし、シリアル化可能なオブジェクトをワーカーのメソッドに渡す方法を理解するのに苦労していますdoPost()。一般的な方法は、明らかに、HTTP 要求オブジェクトと応答オブジェクトの入力ストリームと出力ストリームをそれぞれ使用して、サーブレット間のこの通信を処理することです。私は広範囲にグーグル検索しましたが、出力ストリームとして送信するためにそのような配列リストを準備し、それを最初のサーブレットの応答に追加してから、2 番目のサーブレットの要求から取得し、最後に、コードで使用するために配列リストに変換し直します。doPost()方法。それが基本的に私の質問です。私は Java の経験が浅いため、自分ですべてを理解するのは難しく、頭を悩ませているところがほとんどです。

もう少し明確にするために、doPost()問題のワーカーのメソッドを投稿します。

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
{
    try
    {
        ArrayList<Quote> qs = /*Here the list needs to be read in.*/ null;

        EntityManager manager = EMF.get().createEntityManager();
        CarRentalModel.get().confirmQuotes(qs, manager);
    }
    catch (ReservationException e)
    {
    }       
}

どんな助けでも大歓迎です。

前もって感謝します、

ケビン

4

1 に答える 1

3

BalusC のアドバイスに従う価値があります。シンプルで迅速な解決策を探している場合は、Java のシリアル化を使用して実行できます。

doPost() メソッドで、基になるサーブレット入力ストリームからデータを読み取り、データをデシリアライズ (オブジェクトを作成) する ObjectInputStream を作成できます。

ServletInputStream sis = req.getInputStream();
ObjectInputStream ois = new ObjectInputStream(sis);

ArrayList<Quote> qs = (ArrayList<Quote>) ois.readObject();

ObjectOutputStream とその writeObject() メソッドを使用して、反対側のオブジェクトを同様に書き込みます。これがその場で機能しない場合は、書き込み操作の終了後に出力ストリームを .flush() または .close() して、残りのバッファリングされたデータの送信をトリガーしてください。

于 2012-11-29T15:01:46.570 に答える