[Seasar-user:17603] Re: 【SAStruts】 urlPatternに使えない文字について

Kento SAWADA [E-MAIL ADDRESS DELETED]
2009年 6月 3日 (水) 14:16:33 JST


kentoです。

> 本題とずれますが、tomcatの挙動は仕様通りです。
> HttpServletRequest#getPathInfo()/getServletPath() は CGI の
> PATH_INFO/SCRIPT_NAME と等価でRFC3875に従っています。

なんと!
すみません、不勉強でした・・・

ということは、SAStrutsで云々というより
アプリ側でエンコードを工夫する方が正しい実装というわけですね。

> .はできてもいい気がします。もともと、URLとして使えるので。

エンコードを工夫するついでに「.」もうまくアプリ側で扱ってやれば
それでいいような気もしてきました。
現にそれでうまくいってるので・・・。

やるとしたら、RoutingFilterでの判定を緩める感じになると思うのですが
たとえば、if(path.indexOf(".") < 0){ ... }としてる条件付きブロックを
常に実行される形にしてしまうと、問題があるとすればどんなことでしょうか?


Tomoyuki Kano さんは書きました:
> 加納です
>
> Kento SAWADA さんは書きました:
>   
>> 2) nameに「 」(スペース)が含まれている場合
>>
>> URLエンコード時にスペースは「+」に置換されますが、
>> request.getServletPath()では「+」をスペースに置換しないため
>> (Apache Tomcat 5.5.26にて。バグ?)
>> 本来はスペースであるはずの部分が「+」になってしまう。
>> 「%2B」が「+」にデコードされてしまうため、スペースなのか「+」なのか
>> 区別できない。
>>     
>
> 本題とずれますが、tomcatの挙動は仕様通りです。
> HttpServletRequest#getPathInfo()/getServletPath() は CGI の
> PATH_INFO/SCRIPT_NAME と等価でRFC3875に従っています。
>
> フォームのエンコードで使用するHTMLの規定するx-www-form-urlencodedが
> ' ' -> '+' と変換するのとは異なり、
> HTTPのリクエストURLのエンコードでは RFC2396/RFC3875 の規定から
> 考えると ' ' -> '%20'とするべきです。
>
> これは、 http://...../?a+b
> といったquery形式のために '+' は予約されているからです。
>
> この誤解は、(PHPの uelencode()/urldecode() が広めたためか)よく見かけます。
>
> Yasuo Higa さんは書きました:
>   
>> 個人的には、/や?エンコードしてURLとして使えるようにするのは、
>> あまり賛成できません。
>> 何かとトラブリそう。
>>     
>
> サーバーの構成によってや、servlet API的にデコード前の生のURLを
> 取得するのはそもそも難しいのではないかと。
>
> --
> tomo.
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>   



Seasar-user メーリングリストの案内