1. GETはサーバーからデータを取得するために使用され、投稿はサーバーにデータを渡すために使用されます。
2。変数=値の形式でアクションによって指されたURLにフォームのデータを追加し、Aを使用しますか? 2つの間の接続、各変数間の接続。投稿は、データをデータ本文にフォームに配置し、変数と値が値に対応する方法でアクションによって指し示されたURLに渡すことです。
3。送信プロセス中にデータが要求されたURLに配置されるため、GETは安全ではありません。現在、多くの既存のサーバー、プロキシサーバー、またはユーザーエージェントは、要求されたURLをログファイルに記録し、それをどこかに配置して、サードパーティがいくつかのプライバシー情報を見ることができるようにします。さらに、ユーザーはブラウザに送信されたデータを直接表示することもでき、一部の内部システムメッセージがユーザーの前に表示されます。ポストのすべての操作は、ユーザーには見えません。
4. GETによって送信されるデータの量は少なく、これは主にURLの長さの制限によるものです。投稿は大量のデータを転送できるため、ファイルをアップロードするときにPOSTのみを使用できます(もちろん、別の理由がありますが、後で言及されます)。
5.取得フォームのデータセットの値をASCII文字に制限します。ポストはISO10646文字セット全体をサポートしています。デフォルトでは、ISO-8859-1エンコーディング
6。GETはフォームのデフォルトの方法です。
次の比較は非常に便利です:
私はしばらくの間Java Web開発に取り組んできましたが、常に私を悩ませる問題があります。基本的に、私はオンラインでソリューションを検索し(本当に多くのオンライン情報があります)、それらはすべてそのような文字化けの問題を解決する方法を紹介しますが、問題の全体を明確に説明している人はほとんどいません。時々、いくつかの記事を読んだ後、私はそれを理解していると思いますが、開発中に、文字化けの問題は幽霊のように出てきて、本当に大したことです!この記事は、文字化けされたコードとの長期的な闘争についてのある程度の理解の蓄積であり、より多くの友人が私にアドバイスやサプリメントを与えることを願っています。
フォームがサーバーにデータを送信する2つの方法があります。それぞれGetと投稿について説明しましょう。
(i)提出を取得します
1.最初に、GETメソッドを使用してデータをエンコードしてサーバーに送信する方法について説明しましょう。
GETメソッドの場合、データは、要求されたURLの後にパラメーターとして連結されます:http:// localhost:8080/servlet?msg = abc
(文字化けコードの非常に一般的な問題が表示されます。http:// localhost:8080/servlet?msg = hangzhouなど、中国語または他の特殊文字がURLに表示される場合、hangzhou、rubledのスプライシングが完了した後、ブラウザーがURLをエンコードし、サーバーに送信します。 URLエンコードのプロセスは、URLの一部を文字としてエンコードし、特定のエンコードメソッド(UTF-8、GBKなどなど)に従ってバイナリバイトコードにエンコードすることであり、各バイトは3文字を含むストリング%XYで表されます。私がここで言ったことは明確ではないかもしれません。詳細については、java.net.urlencoderクラスの紹介はこちらをご覧ください。 URLエンコードのプロセスを理解した後、2つの非常に重要な質問を見ることができます。最初:URLエンコードを必要とする文字は、一般に非ASCII文字(一般的に言えば)です。簡単に言えば、英語の手紙(中国語、日本など)を除き、すべてURLエンコードを実行する必要があります。したがって、私たちにとっては、サーバーがコードを入手したときにURLエンコードが文字化けされません。文字化けのコードは、URLに中国語または特殊文字を含むURLが原因です。 2番目: URLはどのエンコードメソッドで文字をエンコードしますか?これはブラウザのビジネスであり、さまざまなブラウザにはさまざまなプラクティスがあります。ブラウザの中国版は通常、デフォルトでGBKを使用します。 UTF-8は、ブラウザを設定することでも使用できます。ユーザーが異なる場合があります。ブラウザの設定が異なる場合があり、エンコード方法が異なります。したがって、多くのWebサイトは、URLの中国語または特殊文字にJavaScriptを使用して最初にURLエンコードを行い、URLをスプライシングしてデータを送信します。つまり、ブラウザにURLエンコードを作成します。利点は、ウェブサイトがデータを送信するエンコード方法を統合できることです。 URLエンコードを完了すると、現在のURLはASCII範囲内の文字になり、ISO-8859-1のエンコード方法でバイナリに変換し、リクエストヘッダーと一緒に送信されます。ここでもう少し言いたいのですが、GETメソッドにはリクエストエンティティがなく、データを含むデータがすべてリクエストヘッダーにあると言いたいと思います。 URLエンコードを使用する理由は次のとおりです。リクエストヘッダーの場合、リクエストヘッダーの純粋なデータはバイナリ101010にエンコードする必要があります...最終的には、リクエストヘッダーの純粋なデータをインターネット上で送信する必要があります。中国語やその他のキャラクターISO-8859-1などの特殊文字を直接エンコードする場合、情報は失われるため、最初にURLエンコードを行う必要があります。
2。サーバー側(Tomcat)は、デコードのデータをどのように取得しますか。
最初のステップは、ISO-8859-1でデータをデコードすることです。 GETメソッドの場合、TomcatはASCII範囲のデータヘッダー文字を取得し、リクエストURLにはパラメーターデータが含まれています。パラメーターに中国語などの特殊文字がある場合、URLエンコード後も%XY状態です。最初に停止し、開発者によるデータを取得する一般的なプロセスについて話しましょう。通常、誰もがパラメーターデータを取得します。取得したリクエストオブジェクトまたはデータはデコードされていますが、プログラムはデコードプロセス中に指定することはできません。ここでは、多くの初心者がrequest.setcharacterencoding(文字セット)を使用してデコード方法を指定できると言っていると言わざるを得ませんが、実際には不可能です。サーブレットの公式APIを見ると、この方法には説明があります。このリクエストの本文で使用される文字エンコードの名前を上書きします。この方法は、getreader()を使用してリクエストパラメーターを読み取るか、入力を読み取る前に呼び出す必要があります。彼がGETメソッドについて何でもすることは無力であることがわかります。では、データをデコードするために使用されるエンコード方法は何ですか?これはTomcatのビジネスです。デフォルトのデフォルトはISO-8859-1であるため、Get Requestに中国のパラメーターがある理由と、サーバー側で文字化けコードが取得される理由を見つけることができます。その理由は、UTF-8またはGBKが通常、データURLエンコードをエンコードするために使用されるためです。ここで、URLデコーダーは明らかに不可能です。プログラムでは、直接できます
Javaコード
1。new String(request.getParameter(name).getBytes(ISO-8859-1)、URLエンコードエンコードメソッドがクライアントによって指定されたメソッド)
バイトコードに戻って復元し、正しい方法でデータをデコードします。通常、オンライン記事はTomcatで構成を作成します
XMLコード
1。<コネクタポート= 8080プロトコル= http/1.1 maxthreads = 150 connectiontimeout = 20000 redirectport = 8443 uriencoding = gbk/>
これにより、Tomcatは指定された方法を使用してデータを取得できます。 URLデコーダーの導入はこちらです
(i)投稿の投稿
1.データをエンコードし、クライアントのpostメソッド(ブラウザ)を使用してサーバーに送信する方法。
POSTメソッドで送信されるデータもURLエンコードである必要があるため、どのエンコードメソッドを使用しますか?
セグメントがある場合<メタhttp-equiv = content-type content = text/html; charset =文字セット(GBK、UTF-8など)フォームがあるHTMLファイルでは、ここで指定されたエンコードメソッドでポストがエンコードされます。一般的に、誰もがこのコードは、ブラウザにどの文字がWebページを解釈するかを設定するかを知らせることであると考えているため、WebサイトはHTMLコードのフロントエンドに配置し、Carled Codeを表示しないようにします。実際、フォームフォームのPOSTメソッドのURLエンコードエンコードメソッドを指定する別の関数もあり、データを送信します。ここから、GETメソッドをカウントするために、ブラウザのURLエンコードエンコードメソッドがブラウザ設定(統合仕様のためにJSで指定できます)によって決定され、POSTメソッドは開発者が指定できることがわかります。
2。サーバー側(Tomcat)は、デコードのデータをどのように取得しますか。
Tomcatのデフォルト設定を使用し、フィルターなどのエンコード設定がない場合、ISO-8859-1でデコードされますが、Request.setcharacterencoding(文字セット)が役立ちます。
Tomcatが上記で行うことの前提は、リクエストヘッダーに指定されたエンコードメソッドがないことであることがわかりました。リクエストヘッダーで指定されたエンコードメソッドの場合、この方法でエンコードされます。推奨される2つの記事があり、アドレスはそうです
詳細で理解しやすいURLエンコード:http://www.cnblogs.com/yencain/articles/1321386.html;
ゴミコードの問題POSTメソッドを使用してデータを送信する場合:http://wanghuan8086.javaeye.com/blog/173869
投稿を使用することが重要です。フォームが配置されているHTMLファイルにセグメントがある場合。 <メタhttp-equiv = content-type content = text/html; charset =文字セット(gbk、utf-8など)/>
投稿を提出することを強くお勧めします