1

JSFおよび/または一般的なセッションについてはほとんど疑問がありませんでした。

まず、AS /サーブレットコンテナにWebアプリをロードするとセッションが作成されますか?つまり、右クリックして実行した後、サーバーで実行すると、アプリが起動して同期されますか?

または、Webアプリが読み込まれ、定義されたウェルカムページが表示されてから、クライアントがリクエストを行った後に作成されますか?

2番目:jsfで「応答がコミットされた後にセッションを作成できない」という問題を調査していました。

次のサイト http://java.net/jira/browse/JAVASERVERFACES-2215でこれを実行して、問題を再現しようとしました。

しかし、上記のようなエラーは発生しませんでした。すべてのBeanスコープで試してみました。セッションは作成されましたか?

これがコードです。

  <h:body>
      <h:form id="test">
      <p:growl id="msg"></p:growl>
        <h:outputText value="#{myTestBean.exceedBuffer}" />

      </h:form>
   </h:body>

Beanコードはです。

   public String getExceedBuffer() {    
       int size = FacesContext.getCurrentInstance().getExternalContext().getResponseBufferSize();
      char[] chars = new char[size];
       Arrays.fill(chars, 'x');
       return new String(chars);
    }

私の理解は次のとおりです、

まず、アプリが読み込まれると、サーブレットコンテナまたはASがセッションとsessionID(JSESSIONID)を作成し、サーバーメモリに配置します。したがって、最初のページはとにかくロードされます。つまり、応答バッファがオーバーフローしたかどうかに関係なく、セッションは作成されません。これで、クライアントがこのページでリクエストを行うと、セッションが作成されなかったため、エラーが発生します。でも、これもやってみました

<p:commandButton actionListener="#{myTestBean.onSelect}" update=":test"></p:commandButton>   

onSelectメソッドにダミーコードを入力しました。今でもいつものようにページが表示されています。

さて、それは私が完全に失われたときでした。誰かplsはこれで私を助けることができますか?前もって感謝します。

4

1 に答える 1

3

まず、AS /サーブレットコンテナにWebアプリをロードするとセッションが作成されますか?つまり、右クリックして実行した後、サーバーで実行すると、アプリが起動して同期されますか?

または、Webアプリが読み込まれ、定義されたウェルカムページが表示されてから、クライアントがリクエストを行った後に作成されますか?

これは、Webアプリケーションの起動時ではなく、HTTPセッションの開始時に作成されます(これがアプリケーションスコープです)。基本的に、request.getSession()が初めて呼び出され、HttpSessionまだ作成されていない場合。これはすべて、JSFが内部で使用しているサーブレットAPIによって処理されます。したがって、次の回答は、それがどのように機能するかを理解するのに役立つはずです。サーブレットはどのように機能しますか?インスタンス化、セッション、共有変数、マルチスレッド


2番目:jsfで「応答がコミットされた後にセッションを作成できない」という問題を調査していました。

次のサイトhttp://java.net/jira/browse/JAVASERVERFACES-2215でこれを実行して、問題を再現しようとしました。

しかし、上記のようなエラーは発生しませんでした。すべてのBeanスコープで試してみました。セッションは作成されましたか?

HttpSession応答がコミットされた時点でがまだ作成されていない場合、このエラーが発生します。このエラーが発生しなかったということは、セッションが事前に作成されていることを意味するだけです。新しく開始したWebアプリでテストする必要があり、セッションはまだ作成されていません。一部のサーバーは、デフォルトでシャットダウン/再起動時にセッションを保存することに注意してください。JSESSIONIDこのテストページで最初のリクエストを送信する前に、これを無効にするか、ブラウザのCookieを削除する必要があります。Webブラウザーを再起動するか、別のWebブラウザーを使用すると、新しいセッションが強制されます。

于 2012-05-19T17:24:54.027 に答える