- ベストアンサー
Windowsで作成したJSPがLinuxサーバーでコンパイルエラー
Windowsのeclipseでjspやservletを作っているのですが、やっとエラーがなくなったので、warファイルを作り、Linuxサーバーにコピーし、展開して動かしてみようとしたところ、jspがコンパイルエラーになってしまいました。 原因を探っていったところ、特殊文字の部分(\"→二重引用符自身の表示)の\が、jspからservletへの自動変換のときに抜けていることがわかりました。(Linuxでは¥はバックスラッシュになっていますが) Windowsで開発して、Linuxで実際に使うというのは、できないものなのでしょうか? (問題の部分) strUrl = "<a href=\"/Diary/DiaryUpdate.jsp?yy=" + strYY + "&mm=" + strMM + "&dd=" + strDay + "\">"; の \" が " になってしまい、 strUrl = "<a href="/Diary/DiaryUpdate.jsp?yy=" + strYY + "&mm=" + strMM + "&dd=" + strDay + "">"; となる(当然、コンパイルエラーになる) (Windows機) Windows2000 j2sdk-1.4.1 tomcat-4.1.31 eclipse-2.1 テキストファイルエンコードは、MS932 tomcat\conf\web.xmlのjavaEncodingは、Windows-31J jspの@pageは、 contentType="text/html;charset=Shift_jis" pageEncoding="Shift_jis" を指定 (Linux機) FedoreCore2(kernel-2.6.9-1) j2sdk-1.4.2 tomcat-4.1.27
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
根本的な原因はわからない(TomcatのJSPをコンパイルする際のエンコードは別で設定しているのかもしれません)ので代替案を二つほど。 HTMLでは属性の文字を囲むためにダブルクォーテーション(")だけでなくシングルクォーテーション(')も使用できます。なので、ご質問の文字列は、 strUrl = "<a href='/Diary/DiaryUpdate.jsp?yy=" + strYY + "&mm=" + strMM + "&dd=" + strDay + "'>"; という感じで書き換えることができます。 もうひとつの解決策は、できるだけスクリプトレットを使わないということです。たぶん、URLを動的に生成して表示したいという要求のように見受けられますがいかがでしょうか。そのときは以下のように記述できます。 <a href="/Diary/DiaryUpdate.jsp?yy=<%= strYY %>&mm=<%= strMM %>&dd=<%= strDD %>">
その他の回答 (1)
- deadlock
- ベストアンサー率67% (59/87)
解決しているようですが、ちょっとアドバイスを。 LinuxでTomcatを起動するシェルで、プロセス内のデフォルトの文字コードをMS932やWindows_31Jに設定してしまえばあまり意識せずに使用できると思います。ログなども指定したコードになりますが… あと、文字コード名はShift_jisではなくShift_JIS(JISが大文字)です。大小を区別するソフトウェアも多いですから、書き分けましょう。ひょっとしたら大小が区別された結果、不正な文字コードとして指定が無効になっているかもしれません。
お礼
deadlockさん、ありがとうございます。 「LinuxでTomcatを起動するシェルで、プロセス内のデフォルトの文字コードを・・・」というのは、自分のサーバーではないので、ちょっと無理のようです。機会があったら、試してみたいと思います。 それから、「Shift_jis」については、別途「EUC-JP」にすべてかえてやってみても、結果が同じだったので、たぶん、これではないと思われます。 javaって、難しいですね。前途多難ですが、がんばってみます。
お礼
hogefugaさん、ありがとうございます。 シングルクォーテーションでやってみたところ、うまくいきました。 jspやservletについては、Windowsでうまくいっても、Linuxでは動かないことがあり、苦労しそうです。 (今も、Linuxだけデータを呼び出せなくて、思案中です) サーバーがWindowsかLinuxかで、開発機も合わせた方がいいみたいですね。 また、行き詰まってしまったら、質問すると思いますので、その時はよろしくお願いします。