LoginSignup
0
0

More than 5 years have passed since last update.

JBOSSとSeasarとTeeda その4

Posted at

だいぶ時間が空いてしまいましたが、JBOSS移行シリーズ最終回。

もはや少し忘れかけてます。。。

サーブレットコンテナによる細かい仕様の違いなんだけど、

まずはFilterです。

WebLogicではサーブレットフィルターの中で

フォワード(RequestDispatcher#Forward)をすると

フォワード先にかかっているフィルターも呼ばれます。

しかしJBOSSではフォワード先のFilterは呼ばれない。

Tomcat7もJBOSSと同様でした。JBOSSもCatalinaのAPI使ってるしね。

Servlet2.4からWeb.xmlのfilter-mappingに

dispatcher属性が追加されて

フィルターの適用をリクエスト・フォワード・インクルード・エラーの

それぞれのイベントで選択できるようになったけど

WebLogicのバージョンが古いから全部適用になってたっぽい。

2.4移行はデフォルトでリクエストのみの様子。

これのせいでJBOSS環境ではフォワード後に

SeasarのHotdeployFilterが適用されなくて

RequestオブジェクトがDIできずハマった。。。

お次はInputStreamの2度読み。

WebLogicではInputStreamをBufferedInputStreamで

包んであげればmarkメソッドとresetメソッドで

一度お尻まで読み込み終わっても

ストリームの位置を元に戻せるけどJBOSSではできない。

resetが動作しないのでBufferedReader#readLineがnullになる。

その影響だと思うけど、

フォームなどのPOSTリクエストに対して、

SeasarのRequestDumpFilterで

ログを出力した後にInputStreamを使うと読み込めない。。

これはRequestDumpFilterの中で利用している

Request#getParameterNamesのせい。

これをコメントアウトすれば大丈夫!

POSTの場合はパラメータ情報を取得する時に

InputStreamを使ってるんだと思う。

getParameterNamesやgetParameterValue自体は

内部でキャッシュするからか、何度も呼べるけど

InputStreamはダメ。どうしてもやりたい場合は

HttpServletRequestWrapperを使って、

InputStreamをキャッシュしましょう。

あとはWindowsからLinuxへの移行ということで、

SJIS⇒UTF8になり、Byte長が変わって入力チェックや

各種制御を総見直しになったり、

MSゴシックのフォントが使えなくなったり。

まぁ、それはそれは大変でした。

AS7.2~はまだ情報も少ないのがキツかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0