Info

Archive for

Webページを作成時、ヘッダー、フッター、メニューなどの共通化はもう常識なってると思いますが、何年前に開発したサイトはそうでもないです。今回あるサイトのリニューアルでヘッダー、フッターの共通化がを行おうとしてたところでぶつかった問題と解決策を簡単に書いて見ます。

言語はjavaでフロントはjspを使います。特殊なことはやらず、普通にヘッダーjspとフッターjspを書いて各ページでincludeするだけです。各ページのタイトルはヘッダー部分で変数を用いて制御したいと思ってましたが、英数以外(日本語)の場合化けてしまいました。

解決1:

<% request.setCharacterEncoding(“shift-jis”); %>
<jsp:include page=”/common/header.jsp” flush=”true”>
<jsp:param name=”page_title” value=”日本語ページ”/>
</jsp:include>

一応ローカル環境では上の「解決1」で無事に開発完了しました。次にテストサーバーに上げて確認しようとしたところで、日本語のタイトルが全部化けてしまいました。テストサーバーに環境合わせて、「<% request.setCharacterEncoding(“euc-jp”); %>」に変更したらうまく行きました。あら!全部修正しないといけないな~と思った瞬間、本番サーバーはどうなの?早速テストコードで確認したところでやっぱり化けてしまいました。可笑しいなことは文字コードを変えてもだめでした。「iso-8859-1」, 「utf-8」, 「euc-jp」, 「shift-jis」, 「MS932」までやってもだめでした。頑張ってGoogleでぐぐってみたけど、答えは出ませんでした。根本的問題から考えてみればURLエンコーティングするときに化けてしまったので、そこから着手。

解決2

page.jsp
<jsp:include page=”/common/header.jsp” flush=”true”>
<jsp:param name=”page_title” value=”<%=new String(java.net.URLEncoder.encode(“日本語ページ”,”utf-8″))%>”/>
</jsp:include>

header.jsp
<title><%=new String( java.net.URLDecoder.decode( request.getParameter(“page_title” ),”utf-8″) )%></title>

Advertisements

Mac OS X Leopardには一通りの開発環境が揃てます。昨日RailsをApacheで動かしてみたが、やっぱりCGIは遅くて使い物にならない。今日fcgiを使おうと設定しよと思って/etc/apache2/httpd.confをのぞいてみたが、あれ?mod_fastcgiが既に入ってるじゃ、コメントになってるだけ。コメントを外して dispatch.cgi を dispatch.fcgi に変更して再起動。Railsに接続してみると、rubyコードがそのまま画面に表示されてしまいました。そもそもfcgiとは認識されてないようです。再びhttpd.confを修正。

AddHandler fastcgi-script .fcgi

追加してサーバー再起動、今度は正しく表示されて動作も早くなりました。

またまたエラー。
Mac OS で Rails を動かしてるが、script/server を毎回毎回打つのが面倒。Apacheで動かそうしてたところタイトルのエラーが発生した、はじめはsqlite3の問題かと思ってたが、WEBrickで動かした時は正常に動いたのでsqliteの問題とは考えにくい。
development.sqlite3 の権限を777に設定して再実行してもかわらない。上位のディレクトリでdbの権限も777に設定してみたら動いた。

sqlite3error.jpg