1. ホーム
  2. java

なぜHttpServletはSerializableを実装しているのですか?

2023-08-08 04:29:41

疑問点

私の理解では、Servletはコンテナによってインスタンス化され、その init() メソッドが一度呼び出され、JVMがシャットダウンするまでサーブレットはシングルトンのように動作します。

サーブレットは、アプリサーバーが回復したとき、または通常起動したときに新しく構築されるので、シリアライズされることを期待していません。サーブレットはセッション固有のメンバーを保持しないので、ディスクに書き込まれ、再インスタンスされることは意味がありません。 これに対する実用的な使用法はありますか?

私の懸念は、そこにいくつかの非シリアライズ可能なフィールドを置き、そして私のアプリが、異なる種類のセッションの複製が行われる本番環境で不思議なことに失敗することです。

どのように解決するのですか?

技術的には、サーブレット コンテナは、EJB セッション ビーンと同様の方法で、サーブレット オブジェクトをディスクに "passivate" することが許可されていると考えています。したがって、シリアライズ不可能なフィールドが原因でアプリが失敗するかどうかを質問するのは正しいことです。

実際には、私はコンテナがこれを行うことを聞いたことがないので、これは本当に初期のJ2EEの悪い時代のレガシーな荷物です。私はそれを心配することはありません。