java/jsp/tomcat/mysql を使用して単純な Web アプリケーションを開発していますが、デフォルトの 8851 ではなく UTF-8 エンコーディングを処理する必要があるため、最も問題は文字エンコーディングにあります。
まず、私のプログラム構造について説明したいと思います。すべてのリクエストを処理するために Controller.java というサーブレットを使用しています。したがって、web.xml には、*.do からすべての要求を取得するコントローラー サーブレットがあります。
次に、このコントローラーは、要求された URL に基づいて要求をディスパッチします。たとえば、クライアントが register.do を要求した場合、コントローラーは要求を Register.java にディスパッチします。
また、Register.java には、リクエストをパラメーターとして受け取るメソッドがあります。つまり、次のとおりです。
public String perform(HttpServletRequest request) {
do something with the request...
}
したがって、問題は、このメソッド内で UTF-8 で何かを出力したい場合、ランダムな文字が表示されることです。たとえば、いくつかの定数を格納する列挙型があります。列挙型が持つプロパティの 1 つは繁体字中国語での名前です。で印刷したら
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
これは中国語で正しく印刷されています。ただし、HttpServletRequest を処理するメソッド内に正確なコードを入れると、次のようになります。
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
それらはランダムな文字として出力されますが、変数が正しい漢字を保持していることをデバッグ ウィンドウ (Eclipse) から確認できます。
したがって、request.getParameter() からの値を保存する場合も同じ状況が発生します。デバッグ ウィンドウで、変数が正しい文字を保持していることを確認できますが、出力したり、データベースに保存しようとすると、ランダムな文字になります。
動作がこのように動作する理由がわかりません。これにより、送信されたフォームの値を読み取ってデータベースに保存することが妨げられています。誰かがこれについていくつかのヒントを与えることができますか?
まことにありがとうございます。