[Jetspeed-japan-dev] Re: [jetspeed] 日本語入力について

Back to archive index

Shinsuke SUGAYA shins****@yahoo*****
2002年 12月 19日 (木) 17:57:02 JST


こんにちは、

私もさらに Turbine へ踏み込んでみました。

> 確かにrecycle()でUS-ASCIIにセットしていますが、そもそもrecycle()メソッ
> ドを呼び出すのはPoolServiceで行われているようです。

recycle() は、普通に呼び出して使うものではないですね。
それと、目的とは違っていたような気がしています。

> Turbineのフレームワークを利用した場合、リクエストの受付は全てMVCで言う
> ところのコントローラであるTurbineサーブレットが行っており、このTurbine
> サーブレットでは、リクエストが来る度にRunDataFactoryを使ってRunDataを
> 取得しています。これはTurbineサーブレットがRunDataを作り出すのではなく、
> ほとんどの場合RunDataServiceを通してPoolServiceからプールされている
> RunDataを取り出しています。この時にRunDataServiceを通してPoolServiceか
> らRunDataを取ってこれなかった場合のみに、
> 
>     data.setParameterParser(new DefaultParameterParser());
> 
> としてDefaultParameterParserをnewしているようです。普通に
> RunDataServiceを通じてRunDataを取得する場合にはTR.pに記述されている
> ParameterParserをセットしています。

たしかにプールからとってくるのがメインで、new DefaultParameterParser() の
行は、たぶん、呼ばれないかもしれませんね。

> では、プールから取り出されて活性化したRunDataのParameterParserにある
> characterEncodingという変数に値をセットするのは何時かというと、
> HelloAction.java等の中で、現在問題になっているコードである
> 
>     rundata.getParameters()
> 
> という部分で、RunDataが保持しているRequest情報をParameterParserに渡す
> ために、ParameterParserのsetRequest(HttpServletRequest req)メソッドを
> 呼んでおり、このメソッドの中で渡されたRequest情報からCharacterEncoding
> を取得してそれをセットしています。
> 
> ところが先のメールにも書いたように、このsetRequestメソッドでエンコーディ
> ングを取得しようとしても、HTMLフォームの場合にはRequestヘッダの
> Content-Typeフィールドにはapplication/x-www-form-urlencodedがあって、
> charsetの指定が含まれていないため、エンコーディングは常にUS-ASCIIになっ
> てしまいます。

この辺のことをまとめると、たとえば、DefaultJetspeedParameterParser という
のを作り、TR.p に登録すれば、解決されるのではないでしょうか。
このときのエンコーディング情報を取得する場所は、request からでなく、
media.xreg から取得するようにすると良いと思います。
かならずしも、UTF-8 ではないので、このファイルから使用しているメディアタイプの
エンコーディングをとるのが安全だと思います。
でも、プールにないときの new DefaultParameterParser() をどのようなときに
実行されるのかが少し気になるところではありますが。

shinsuke


__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/




Jetspeed-japan-dev メーリングリストの案内
Back to archive index