最新の I/O と Tomcat

目次の表

はじめに

重要な注意: これらの機能を使用するには HTTP コネクターを使用する必要があります。AJP コネクターではサポートされていません。

非同期書き込み

HTTP コネクターを使用する場合、Tomcat は sendfile を使用して大規模な静的ファイルを転送できます。これらの書き込みは、システムの負荷が増加するとすぐに、最も効率的な方法で非同期に実行されます。ブロック書き込みを使用して大規模なレスポンスを送信する代わりに、コンテンツを静的ファイルに書き込んで、sendfile コードを使用して書き込むことができます。キャッシュバルブはこれを利用して、レスポンスデータをメモリに格納するのではなく、ファイルにキャッシュできます。リクエスト属性 org.apache.tomcat.sendfile.supportBoolean.TRUE に設定されている場合、sendfile サポートが利用できます。

すべてのサーブレットは、適切なリクエスト属性を設定することによって、Tomcat に sendfile 呼び出しを実行するように指示できます。また、レスポンスのコンテンツの length を正しく設定する必要があります。sendfile を使用する場合、レスポンス本文がコネクター自体によって後で送信されるため、 フィルタリングできないため、リクエストまたはレスポンスのどちらかがラップされていないことを確認することをお勧めします。3 つの必要なリクエスト属性を設定する以外に、サーブレットはレスポンスデータを送信しないでください。ただし、レスポンスヘッダーを変更する (クッキーの設定など) 他の方法を使用できます。

  • org.apache.tomcat.sendfile.filename: 文字列として送信されるファイルの正規ファイル名
  • org.apache.tomcat.sendfile.start: 開始オフセット (Long)
  • org.apache.tomcat.sendfile.end: 終了オフセット (Long)

これらのパラメーターを設定する以外にも、コンテンツの length ヘッダーを設定する必要があります。出力をストリームに既に書き込んでいる可能性があるため、Tomcat はこれを代わりに実行しません。

sendfile を使用すると、Tomcat がそれ以外の場合はレスポンスに対して実行した可能性のある圧縮が無効になることに注意してください。