HTTPステータスコード 405 Method Not Allowed

本日ブログ担当の林です。

2年生のサーバサイドプログラミングの授業でサーブレットのサンプルプログラムが必要になった。

十数年前に作成したサンプルプログラムのソースファイルが在ったので実行してみたところ、「405 Method Not Allowed(許可されていないメソッド)」が発生し、実行できない。

上記がそのサンプルプログラムのソースファイルである。

十数年前に作成したときには確実に動いていたことを明確に記憶しているのでコードに間違いはないと予測した。

そうなると依存関係が怪しいと思ったのでweb.xmlとserver.xmlを見直してみたが特に間違いはない。

これはもしかするとサーブレットを実行するためのサーブレットコンテナが正しく起動していないのかもしれないと考え、サーブレットコンテナのホームページを呼び出してみたが問題なく表示される。

もし、発生しているエラーが「404 Not Found(未検出)」なら「そんなページは無い」というエラーなので原因は単純だっただろう。

しかし、今回発生しているのは「405 Method Not Allowed(許可されていないメソッド)」である。

これは「頼み方が気に食わないのでページは渡せない」というエラーであり、なかなか解り難いエラーだ。

Googleで検索してみたところ、上記のソース中18行目にある「super.doGet(req, resp);」を消せと書いてあるページを見つけた。

十数年前に作成したときには確実に動いていたコードなので「そんなことくらいで動くわけないだろ」と思いながらも件の行を消して実行してみたところ、あっさりと動いてしまった。

見つけたページには「消せ」と書いてあるのみで根本的な原因については言及していない。

この十数年の間にサーブレットの実行環境に何らかの変更があったのだろうか?

確かに十数年前と今回では実行環境に違いがある。

十数年前は、WebサーバにApache HTTP Server、サーブレットコンテナにApache Tomcatを使用し、両者の間をモジュール(mod_jk2)で連携させた環境でサーブレットを実行していた。

今回は、Eclipse(Pleiades All in One)に含まれているApache Tomcatのみを使用しており、Apache HTTP Serverは使用していない。

しかし、こんなことが今回の「405 Method Not Allowed(許可されていないメソッド)」を発生させた原因になり得るだろうか?

結局、根本的な原因は今も解っていない。

この先、半年くらいはサーバサイドプログラミングの授業でサーブレットを教えていくことになる。

根本的な原因が解らないままでは気持ちが悪いので、この件に関してはこれからも原因の究明を続けたい。