3

私たちのコードは変更されていませんが、HttpServletRequest の属性とパラメーターに関して、JavaEE1.4 では 1.6 とは異なる動作をしています。ただし、この異なる動作は (常に) 一貫しているわけではありません。また、BEA Weblogic 10 も使用しています (バージョン 8 ではまだ機能しています)。

例: 「request.setAttribute(name, value)」を実行し、後で「request.getAttribute(name)」を実行する場合、リクエストにそのような「name」がまったくないように見える場合があります。設定したことがない場合。8v3 と Ja11 の両方で Eclipse デバッガーを使用してこれを実行しましたが、8v3 ではこの属性が表示されますが、Ja11 では見つかりません。これは、コードの動作と一致しています。

私たちのコードは、「name」と「value」の値が両方とも「public final static String;」として定義されている少なくとも 1 つのケースで一貫して失敗します。

代わりに「request.getPathInfo」を介して必要な情報を取得することにより、この特定のインスタンス行の周りをコーディングしましたが、コードの他の場所で同じまたは同様の問題が発生していると思われますが、別のそのようなインスタンスでは完全に散発的であるため、デバッグモードで (または Sysout ステートメントを入れても) 再作成できなかったため、問題のある行をトラップできません。別の例では、決定的にトラップすることはできません-その「名前」がデータとともにjspフォームに存在するにもかかわらず、何も返さないのは request.getParameter(name) だと思います。

(HttpServlet の 1 つの要求サイクル (つまり、HttpServletRequest、HttpServletResponse、HttpSession、HttpServlet) に関連するすべてのデータとメソッドを実装し、カプセル化する RequestContext クラス全体があるため、コードが実際にどのように見えるかをいくらか単純化していることに注意してください。

とにかく、Java Servlet 仕様に 1.6 でいくつかの変更があったと聞いたことがありますが、それらの違いが何であるかをどこかに明示的に述べているのでしょうか、それとも文字通り 1.4 仕様をその隣に引き上げて独自の比較を行う必要があるのでしょうか?

確かに、私は HttpServeltRequest の扱いに精通していませんが、このコードは何年もの間正常に機能しています。

4

1 に答える 1

0

サーブレットはスレッドセーフではなく、リクエストごとに再作成されません。すべてのリクエストは、1つの同じサーブレットオブジェクトによって処理されます。サーブレットクラスのpublicstaticfinalフィールドに変数を格納していますか?

于 2013-01-16T00:12:24.560 に答える