M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

Struts2におけるHTTPメソッドの位置

Struts2のActionにおいて、あるいはそれ以前に駆動する他の仕組みでどのようにHTTPのメソッドを区別して制御を行うかという点について調べてみると、意外にもWeb上にはまったくといっていいほど情報がない…。日本語情報としてはほぼ皆無のようです。

How to make Struts2 action take only POST request
http://struts.1045723.n5.nabble.com/How-to-make-Struts2-action-take-only-POST-request-td3489663.html

How to make Struts2 action take only POST request. Is there any way like spring controller , acceptable HTTP method. We only want submit to happen by post and no GET request should be allowed

(Struts2のActionに、POSTリクエストのみとるようにさせるにはどうするのでしょう? Springコントローラーのような何らかの仕組みはあるのでしょうか。データを送信して何かするのにPOSTリクエストのみ認めて、GETリクエストを認めないというようにしたいだけなのですが。)

As you can see Attributes for action from:
http://struts.apache.org/dtds/struts-2.0.dtd
There is no configuration that would let you do that. However you can do this programatically by using ServletActionContext.getRequest().getMethod()

(Actionタグの属性情報を見てわかるとおり…それを実現するための設定記述方法は存在しません。それでもプログラム的にServletActionContext.getRequest().getMethod()を使用すれば、実現できます。)

あきれてしまうのが、こうしたチェックが、ActionSupportやDefaultActionSupportでも提供されていないことです。

それはそれとして、Webアプリケーションのフレームワークで、HTTPメソッドを区別した処理についての言及がないというのはどういうことなのでしょうか?

Webアプリケーションの開発者たちにとって、このトピックはそんなに「言わずもがな」「聞かずもがな」のことなのでしょうか?

もちろんGETとPOSTのちがいは非常に重要なもので、この点は強調するにあまりありますが、その重要な制御をこうしたフレームワーク内でどのように実現するか、という情報はもっと転がっていていいはずです。Struts2やSpringといったフレームワークについては、日本語のテキストの質・量も満足な状態でないなかで、Web上の情報も見つからなかったことは、ちょっと驚きました。

[2011/07/29追記]

Google+のほうでコメントしたとおり、この一件はとりあえずStruts2のインターセプターで、特定の(つまりコンフィギュレーションXMLファイルで指定した)Actionについて、POSTリクエストチェックを実施する、という実装で解決しました。

このような実装でなければ、ActionSupportを継承・実装したクラスでプログラム的なチェックを行うという、より依存性の高いコードになってしまいます。それよりはスマートなかたちにはなりました。

もとよりURLとActionとをマッピングして処理を制御する設定ファイルが存在する以上、プログラム的に解決すべきたぐいの問題ではありません。それにしても開発者はこの程度の処理に独自のインターセプターを書かなくてはいけないのか…と。