ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Strutsのモジュール分割

2009-10-16 23:59:09 | PG(Java)

Strutsのモジュール分割についてメモ。

モジュール分割の肝は、ディレクトリー名の付け方と、別モジュールとの連携(他モジュールへの遷移)か。

特に他モジュールへの遷移に関してのstruts-config.xml上の記述方法については、Struts1.1と1.2以降で異なる。
ネットで調べるとcontextRelative属性を使う方法とmodule属性を使う方法が混在しているが、こういう時ってバージョン情報が重要だよなー。
(自分も普段はあまり気にしてないから人の事をどうこう言えない(苦笑)
 Strutsは1系と2系があるが、明示せずに1系のことばかり書いてるし)

ついでに、他のWebアプリへリダイレクトする方法も試してみた。
モジュールとは全く関係ない話なんだけど、まぁブラウザーに表示されるURIでの表記としては似た感じだし^^;
で、他アプリへのリダイレクト用のActionクラスがStruts標準で提供されていないのは何故なんだろう…?

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Eclipse WTPのTomcat環境

2009-10-14 23:50:46 | PG(Java)

EclipseのWTP(Web開発環境)でのTomcatの設定についてメモ。

WTPとかの自動的に設定を行ってくれるプラグインは便利だが、逆に何をしているか分かりにくい。
対応している機能については便利だが、逆に対応していない機能については手も足も出なくなる危険がある。

例えば、JSPファイルがコンパイルされたJavaソースファイルがどこにあるかとか
それをEclipseから表示しようとしたら文字化けするけどエンコーディングを指定できないとか。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Strutsとフィルターのエラー遷移

2009-10-12 22:53:39 | PG(Java)

Strutsのエラーメッセージ処理(つまりはActionErrorsとhtml:errorsタグ)についてあやふやだったので、改めて実験。
あとaction要素内に書くexception要素と、global-exceptionsについても実験。

exception要素にメッセージキーを指定することは出来るけど、これを使うとどんな例外に対しても固定文言になってしまう。発生箇所ごとにメッセージを変えようと思ったら、例外生成時にメッセージキーを入れるのが、誰が考えても無難。
エラーメッセージ(キーと引数)を指定する例外って聞き覚えが無かったけど、ずばりModuleExceptionというのがあった。


それと、サーブレットフィルターについても実験。
フィルターはweb.xmlに記述するものなので、サーブレットと同レベル、つまりStrutsとは直接関係無い。
でもフィルターで何らかの判断を行った結果、Strutsのタグで書かれたエラー画面へ遷移することはよくあるだろう。
フィルターからの遷移先は指定することが出来るので、普通にStrutsで作ったerror.jspへ遷移させられる。

が、JavaEEサーバー(つまりTomcat)起動直後にURL直打ちでフィルターを動かして遷移させたところ、画面表示でエラーになった><
JSPのhtml:errorsの処理であるErrorsTagがModuleConfigとかいうのを取得できなくてNullPointerException。
これはActionServletのinit()で初期化されるようなので、フィルターでいきなりエラー画面に飛ばすと初期化されてないから駄目みたいなんだな。
まぁ、いきなりURL直打ちで必要な情報の入っていないJSPを指定するようなものか。

で、フィルターからActionを経由するようにしたら上手く行ったのだが、その際のデータ受け渡しに、例外クラスを使って、しかも「例外発生時にJavaEEサーバーがその例外をリクエストに保持する為のキー」をそのまま使うのは危険だということが分かった(爆)
そこに例外が入っていると、フィルター処理終了後にエラー発生扱いされてしまうようで…まぁ当然かぁ。
Action内でクリア(リクエストのattributeをremove)してやれば大丈夫かもしれないけど、それでいいのか、自信ないな。

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

logic:iterateの実験

2009-10-10 23:59:46 | PG(Java)

Strutslogic:iterateをあらためて実験。
(バージョンは1.3.10だよ。Struts2なんてまだ仕事で使ったことナイヨ)

もちろんlogic:iterate自体は前から知ってるけど、あまり深く突っ込んで試したことが無かった。
つまり、bean:write以外にhtml:textやリンク・サブミットボタンはどう扱えばいいのかといった辺り。
一行分のデータを保持するBeanを用意するときれいに収まるように出来ているのに感心したが、そうでない方法だとすんなり出来ないようだ。

しかしそもそもStrutsのコーディングを本当に1からやったことが無かった事に気づいた(汗)ので、struts-config.xmlの書き方とActionクラスの書き方もメモだ(苦笑)

それでふと思い出したけど、サーブレットはMTセーフ(スレッドセーフ)にしなければいけないのは前から知ってて、それに伴ってJSPもMTセーフにする必要があることは覚えていたが、StrutsのActionクラスもそうなんだよなー。(でもStruts2ではMTセーフらしい?)
個人的にはそもそもクラス内でも構造化プログラミングをすべきだと思っていて、だからフィールドは極力使わないし(クラス内におけるグローバル変数だから)、ついでにメソッドもけっこう細かく分割する方針で来た。なので、Actionクラスでも特にMTアンセーフなコーディングはしてないから問題ないはずだけど。
JSPも、スクリプトレット類は基本的に使用禁止にしてるしな。

ついでにはまったのが、struts-config.xmlでaction要素にscope="request"を指定しなかった場合のデフォルトがsessionであること! 前に入れた値がFormに残ってるからおかしいと思ったんだよ(汗)
struts-config.xmlなんて既存のコピペしかしないから、1から作ると意外なところが漏れる…。
つーかなんでデフォルトがsessionスコープなんだろう…。Formはリクエストの内容が入るものなんだから、「リクエスト毎に作られる」と考えるのが自然じゃないか?

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Eclipse WTPでStruts

2009-10-09 05:55:28 | PG(Java)

Strutsのカスタムタグでちょっと試したいことがあって、All in One Eclipse3.4にはWeb開発環境(WTP)のプラグインが入っているので、ついでなのでこれを使ってみることにした。
(今まではプラグインを使わずにやってたからなぁ(苦笑))

Webプロジェクトを作るのはすごく簡単だね。
Tomcatは(5.5でちょっと古いけど)既にインストール済みだったので、サーバーとして指定するのも難しくないし。
そしてJSPファイルを指定して起動できるので、ブラウザーでURLをいちいち打たないで済むのは楽だ^^

とは言っても、Struts自体は自分でファイルをコピーしてやらんといかんのな…。まぁ大した手間じゃないけど。
あと、HttpServletとかTagSupportとかのjavaxパッケージのクラスはパスが通ってないので、自分で通す必要がある。


で、試したかったというのは、カスタムタグのセッターメソッドの引数にString以外を指定できるのか、ということ。
Antの自作タスクだと、セッターの引数に色々なクラスを指定できて便利。
しかしJSPのカスタムタグではString以外の例を見た記憶が無いので、実験してみたというわけ。
その結果、プリミティブ型は可能なことが分かった。(さすがにFileクラスは駄目なようだ(笑)) まぁJSPならそれで充分か。

ってこれ普通にカスタムタグの話であって、Strutsとは関係ないじゃん!(爆)

コメント
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする