Jspの文字化けの問題、フォーム送信の取得/投稿とエンコードの原則設定の違い

以下の内容は個人的な理解ですが、不適切を指摘したいと思います

1.jsp実行の原則。

完全に第1の符号化の問題を解決するには、JSPの実行の原理を知っている必要がありますJSP実行の原則が1回の翻訳+ 2回のコンパイルであり、詳細については、次の図を参照してください。
ここに画像の説明を挿入
とき:ここで説明する必要がある
           JSPは.javaファイルに変換されます、Tomcatサーバーのjspエンジンによって変換されます。アイデアをクリックして実行すると、.javaソースファイルがプロジェクトディレクトリに生成されます。
ここに画像の説明を挿入
すべてのコンピュータパスが異なるため、通常は自分で見つける必要があります。 Tomcatのインストール場所、次にこの変換プロセスこれはTomcatのjspエンジンによって実行されます。.javaソースファイルを開くと、_jspService()関数で.jspのコンテンツが実際にout.writeに変換されていることがわかります。

      out.write("\n");
      out.write("\n");
      out.write("<html>\n");
      out.write("  <head>\n");
      out.write("  </head>\n");
      out.write("<body>\n");
      out.write("    ");

//         response.setCharacterEncoding("ISO-8859-1");
         out.println("我是中文");
    
      out.write("\n");
      out.write("</body>\n");
      out.write("</html>");

2.jspエンコーディングのタイプ。

jspエンコーディングには5つの一般的なタイプがあります。

  1. ISO-8859-1エンコーディング:メモリサイズは1バイト[0,2 ^ 8-1]です。漢字を表すことはできません。プロンプト:ASCLLコードテーブルで理解できます。
  2. GB2312エンコーディング:漢字を表す2バイト。ISO-8859-1エンコーディングと互換性があります。
  3. GBKエンコーディング:2バイトで表現された漢字。GB2312エンコーディングと互換性があります。
  4. Unicodeエンコーディング:漢字を表すために2バイトまたは4バイトが使用されます。どのエンコーディングとも互換性がありません。
  5. utf-8エンコーディング:英語の場合は1バイト、中国語の場合は3バイト。gb2312エンコーディングとは互換性がありません。utf-8は国際的なユニバーサル文字エンコーディングであり、utf-8エンコーディングタイプとして統合されることが多く、最も使用されているエンコーディングタイプでもあります。 ;;

3.文字化けしたコードを解決するための5つのエンコード方法。

コーディングを解決するために一般的に使用される5つのコーディング方法:

  1. request.setCharacterEncoding( "Encoding Type");を使用します。
  2. pageEncoding = "エンコーディングタイプ"を使用します
  3. contentType = "encodingtype"を使用します
  4. response.setCharacterEncoding( "Encoding Type");を使用します。
  5. server.xmlのURIEncodingエンコーディングメソッドを変更します。

4. 5つのコーディング方法は、jsp実行原理の範囲に対応しています。

ここに画像の説明を挿入

5.JSP実行原理に対応する範囲内の5つのコーディング方法の優先度。

  1. jspからサーブレットへ:pageEncoding> contentType;

  2. サーバー応答コンテンツエンコーディングを指定する場合:response.setCharacterEncoding> contentType> pageEncodingは、タイトル4のサーバーボックスの一番下のボックスです。
    (1)contentType> pageEncoding
    ここに画像の説明を挿入
    出力結果:
    ここに画像の説明を挿入
    (2)response.setCharacterEncoding> contentType> pageEncoding
    ここに画像の説明を挿入
    出力結果:
    ここに画像の説明を挿入


    server.xmlのrequest.setCharacterEncodingとURIEncodingについては、getとpostの原則を理解した後で、これら2つのエンコード方法について説明します。

6.フォームのget / postの違い。

  1. Getは、サーバーからデータを取得することであり(検索エンジンは、getを使用してクライアントから渡されたデータであり、ユーザーに一致するページを見つけてクライアントに戻ります。したがって、サーバーからデータを取得することです)。サーバーを変更するため、検索やクエリによく使用されます。postはサーバーにデータを送信するために使用され、サーバーを変更する必要があります。したがって、登録、変更、アップロードによく使用されます。ただし、次の点に注意してください。それらはすべてデータベースにデータを送信しています。送信方法だけです。違いは以下のポイント3で説明されています。
  2. セキュリティを取得<セキュリティ後;
  3. Getは、フォームの各フィールドとそのコンテンツをhttpリクエストメッセージのリクエスト行key = valueペアに配置し、アクションで指定されたURLアドレスにhttpリクエストメッセージを送信すると、その値がブラウザでジャンプします。転送中にユーザーに表示されます。しかし、ポストの原理はにキー=値のペアの形式でフォームのフィールドを置くことであるのボディhttpリクエストメッセージ、およびそれまでに指定されたURLアドレスにメッセージを送信アクションを実行すると、ユーザーは値の転送情報が表示されないページにリダイレクトされます。
    ここに表示されている場合は、上記のhttpメッセージが何であるかを間違いなく不思議に思うでしょう。
    説明は以下のとおりです
    。httpメッセージ:HTTPアプリケーション間で送信されるデータブロックです。これらのデータブロックは、メッセージの内容と意味を説明するテキスト形式のメタ情報で始まり、オプションのデータセクションが続きます。これらのメッセージはすべて、クライアント、サーバー、およびエージェントの間を流れます。
    httpメッセージを見てください:
    (1)次の図は、getsubmissionのhttpメッセージのリクエスト行とURLの後に追加されたリクエスト行をここに画像の説明を挿入
    説明しています; (2)次の図はpostsubmissionフィールド(キー)を説明しています= value Form)httpメッセージの本文に入れてください。
    ここに画像の説明を挿入
    実際、メッセージはhttpプロトコルのデータブロックであると理解しています。クライアントは要求/応答方式でサーバーと通信するため、次のことが必要です。 httpプロトコルを使用するため、httpメッセージを使用する必要があります。

7.対応するエンコーディング設定を取得/投稿します。

ここに画像の説明を挿入
ここで注意すべきいくつかのこと:

1. server.xmlでURIEncodingを変更する方法、最初にconfディレクトリでserver.xmlを見つけて開き
ここに画像の説明を挿入
ここに画像の説明を挿入
ます。find 表示されないため、デフォルトであり、以前のTomcat8がデフォルトのISO-8859です。 -1、ただしTomcat9のデフォルトは
ここに画像の説明を挿入
UTF-8です。次に、次のように入力します。青いボックスはエンコードタイプを記述できます。ここではUTF-8と記述します。記述しない場合は、デフォルトのUTF-8と記述します。わかりやすくする
ために、ここに文字化けの問題があります。formget/投稿の違いとエンコードの原則の設定は問題ありません。



上記はすべて個人的な理解です。何か問題がある場合はお知らせください。

おすすめ

転載: blog.csdn.net/qq_44555205/article/details/105492835