REST non-REST混在環境の作り方

通常のaction(executeメソッド呼び出し)とrestfulなactionを呼び分けたい場合があります。そんなときはPrefixBasedActionMapperを使おう、とうい話。

RESTを有効にするためstruts.xmlに以下の記述を行うと通常のactionもRESTとして動作するようになります。

呼ぶactionによって通常のActionMapper(DefaultActionMapper)とRestful2ActionMapperを呼び分けたいのですが、このような場合はPrefixBasedActionMapperを使用することでURLの内容から使用するActionMapperを切り替えることがでる。

上記の例はREST plugin使用時においてDefaultActionMapperとRestful2ActionMapperを切り替える場合。他にもたくさん切り替えたい場合は3つ4つと設定すればいい。

REST/non-RESTを混在させるためにはこの他に以下の設定も必要。

下3つは実装する環境に合わせて変更すればいい。suffixはControllerでなくてもよいし、interceptionを追加したい場合はpackageを作るだろうし。

特定のpackage(クラスパス)以下のみを対象にしたい場合はstruts.convention.package.locators.basePackageを設定する方法もある。packageに関する設定項目は以下4つ。いずれもconventionの持ち物。

  • struts.convention.action.packages
  • struts.convention.package.locators
  • struts.convention.package.locators.basePackage
  • struts.convention.exclude.packages

それと、今回参考にしたサイト。

Stackoverflowのここも参考になるので載せておきます。

Struts2を触り始めて1週間?2週間ぐらいですが、感じたことを少しばかり。

かれこれ長いことstrtus1を使い続けていたのですんなりstruts2も使いこなせるだろうと高を括っていました。struts1とは異なる点が多々あり足踏みをすることが多かったように思います。1)もしかするとstruts1にどっぷりだったからこそかもしれませんね。大まかな流れさえわかってしまえば学習曲線も上がるのですんなり身に入りそうな気がしています。

ではでは。

References   [ + ]

1. もしかするとstruts1にどっぷりだったからこそかもしれませんね。

Struts2は必ずexecuteメソッドを呼ぶわけではない

Struts2のサンプルを作り始めたときに呼ばれるメソッドで詰まった話。標準では必ずexecuteメソッドが呼ばれると思っていたのだけれどそうでもないらしい。

struts2-blank.warからサンプルを作り始めたときは特に問題にはならなかったのだけれど、struts2-rest-showcase.warから作り始めたたらexecuteメソッドが呼ばれない。かわりにindexメソッドを呼ぼうとする。

色々調べてみるとこのサイトにヒントがありました。

The problem is resolved, I had to remove the struts2-rest plugin. 

試しにstruts2-rest-plugin-2.3.16.3.jarを削除してみると確かにexecuteが呼ばれる。restサービスを作りやすくするぐらいの認識しかなったのだけれどどのように動くか全然抑えてなかったです。

公式サイトを見てみるとURLがどのようなルールでActionに結びつくのかが書いてある。『idパラメータがなければindexメソッド呼ぶよ』とかとか。

他にstruts2-rest-showcase.war内のstruts.xml見るとdefault.parent.packageが”rest-default”だったりと色々と考慮しなさ過ぎていたみたいです。