Tips †
Tomcat7とTomcat8の違いではまったこと †
セミナーではTomcat7を使っているが、最新のTomcat8を入れたら、挙動がだいぶ違う。
ServletRequest.getRealPath()の違い †
- Tomcat7
- getRealPath("reservation.data")で、".../K07/reservation.dat"へのパスが得られた。
- "reservation.dat"が存在しない場合では、そのパスが返る。
- Tomcat8
- 存在しないファイルを指定するとnullが戻るようだ。
- getRealPath("/")とすると、現在のフォルダへのパス".../K07"が帰ってくるので、それにつなげて、getRealPath("/")+"/reservation.dat" とすると、正しいバスを得ることができる。
文字コードの変換 †
- Tomcat7
- tmp=getParameter()でパラメータの値が得られるが、これはブラウザ側の文字コードなので、new String(tmp.getBytes("8859_1"),"JISAutoDetect")で文字コードを適切に変換できる。
- Tomcat8
- Tomcat側で勝手にパラメータの文字コードを変更するもよう。
- したがって、getParaemter()ではすでに何らかの変換された文字列が返される。(おそらくは"Latin-XX"系)
- これがすでに文字化けしているので、new String(...)で変換しようとしてもダメ。
- postメソッドで送る場合、事前に
request.setCharacterEncoding("UTF-8");
- でOKで、この場合、その後の変換処理は不要。
- getメソッドの場合、上記の設定は無視される。ので、コネクタに
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" useBodyEncodingForURI="true" />
</Service>
</Server>
- という設定を加える必要があるようだ。(http://www.mclnet.co.jp/tech/java/tomcat-howto.html#connector_get_japanese)
渕田のセミナー