以下の内容は個人的な理解ですが、不適切を指摘したいと思います
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つの一般的なタイプがあります。
- ISO-8859-1エンコーディング:メモリサイズは1バイト[0,2 ^ 8-1]です。漢字を表すことはできません。プロンプト:ASCLLコードテーブルで理解できます。
- GB2312エンコーディング:漢字を表す2バイト。ISO-8859-1エンコーディングと互換性があります。
- GBKエンコーディング:2バイトで表現された漢字。GB2312エンコーディングと互換性があります。
- Unicodeエンコーディング:漢字を表すために2バイトまたは4バイトが使用されます。どのエンコーディングとも互換性がありません。
- utf-8エンコーディング:英語の場合は1バイト、中国語の場合は3バイト。gb2312エンコーディングとは互換性がありません。utf-8は国際的なユニバーサル文字エンコーディングであり、utf-8エンコーディングタイプとして統合されることが多く、最も使用されているエンコーディングタイプでもあります。 ;;
3.文字化けしたコードを解決するための5つのエンコード方法。
コーディングを解決するために一般的に使用される5つのコーディング方法:
- request.setCharacterEncoding( "Encoding Type");を使用します。
- pageEncoding = "エンコーディングタイプ"を使用します
- contentType = "encodingtype"を使用します
- response.setCharacterEncoding( "Encoding Type");を使用します。
- server.xmlのURIEncodingエンコーディングメソッドを変更します。
4. 5つのコーディング方法は、jsp実行原理の範囲に対応しています。
5.JSP実行原理に対応する範囲内の5つのコーディング方法の優先度。
-
jspからサーブレットへ:pageEncoding> contentType;
-
サーバー応答コンテンツエンコーディングを指定する場合:response.setCharacterEncoding> contentType> pageEncodingは、タイトル4のサーバーボックスの一番下のボックスです。
(1)contentType> pageEncoding
出力結果:
(2)response.setCharacterEncoding> contentType> pageEncoding
出力結果:
server.xmlのrequest.setCharacterEncodingとURIEncodingについては、getとpostの原則を理解した後で、これら2つのエンコード方法について説明します。
6.フォームのget / postの違い。
- Getは、サーバーからデータを取得することであり(検索エンジンは、getを使用してクライアントから渡されたデータであり、ユーザーに一致するページを見つけてクライアントに戻ります。したがって、サーバーからデータを取得することです)。サーバーを変更するため、検索やクエリによく使用されます。postはサーバーにデータを送信するために使用され、サーバーを変更する必要があります。したがって、登録、変更、アップロードによく使用されます。ただし、次の点に注意してください。それらはすべてデータベースにデータを送信しています。送信方法だけです。違いは以下のポイント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/投稿の違いとエンコードの原則の設定は問題ありません。
上記はすべて個人的な理解です。何か問題がある場合はお知らせください。