mod_perlハンドラを書く
Rev.1を表示中。最新版はこちら。
このテキストは
mod_perl2.0ドキュメントの"Writing mod_perl Handlers and Scripts"(http://perl.apache.org/docs/2.0/user/coding/coding.html)の和訳です。
現在編集中
目次
# Goodies Toolkit* Environment Variables
* Threaded MPM or not?
* Writing MPM-specific Code
# Code Developing Nuances
* Auto-Reloading Modified Modules with Apache2::Reload
# Integration with Apache Issues
* HTTP Response Headers
o Generating HTTP Response Headers
o Forcing HTTP Response Headers Out
* Sending HTTP Response Body
* Using Signal Handlers
# Perl Specifics in the mod_perl Environment
* BEGIN Blocks
* CHECK and INIT Blocks
* END Blocks
* Request-localized Globals
* exit
# ModPerl::Registry Handlers Family
* A Look Behind the Scenes
* Getting the $r Object
# Threads Coding Issues Under mod_perl
* Thread-environment Issues
* Deploying Threads
* Shared Variables
# Maintainers
# Authors
説明※
この章ではmod_perlのコーディングの詳細、通常のPerlコーディングとの違いを扱います。その他のほとんどのPerlコーディングに関する情報はperlのmanページや書籍で取り扱われています。
前提※
原文なし
Where the Methods Live
mod_perl 2.0では多くのモジュールに跨ってメソッドが存在します。これらのメソッドを使うためにメソッドを含むモジュールは最初にロードしておかないといけません。そうでないと、mod_perlは「メソッドを見つけられない」とエラーにします。どのモジュールが必要かを探すにはModPerl::MethodLookup モジュールが使えます。
Techniques
メソッドハンドラ
関数ハンドラに加えてメソッドハンドラを使うことができます。メソッドハンドラは継承のメリットを生かしたコードを書きたい場合に便利です。mod_perl2のメソッドとしてハンドラを作る場合、method属性を使ってください。
属性の詳細についてはPerlのmanページを参照してください(perldoc attributes)。
例:
package Bird::Eagle; @ISA = qw(Bird); sub handler : method { my ($class_or_object, $r) = @_; ...; } sub new { bless {}, __PACKAGE__ }
そして、これを以下のようにして登録します。
PerlResponseHandler Bird::Eagle
mod_perlはハンドラがmethod属性を持っている場合は、2つの引数をハンドラに渡します。
オブジェクトもしくはクラス名(どのように呼び出されたかに依存します)とRequestオブジェクトです。
クリーンアップ