HttpURLConnection は Java で WEB リソースをリクエストするために使用できます。
1. URL リクエストのカテゴリ
は、GET リクエストと POST リクエストの 2 つのカテゴリに分かれています。 2 つの違いは次のとおりです:
a:) get リクエストは静的ページを取得することも、URL 文字列の後にパラメータを置いてサーブレットに渡すこともできます
b:) post と get の違いは、投稿のパラメータは URL 文字列には配置されず、http リクエストの本文に配置されます。
2. URLConnection オブジェクトの問題
Java コード
URL = new URL("http://localhost:8080/TestHttpURLConnectionPro.do");
URLConnection = url.openConnection (); / ここでの UrlConnection オブジェクトは、実際には URL の
// リクエスト プロトコル (ここでは http) に基づいています。
' s 's 's 's ‐ ‐ ‐ ‐ HttpURLConnection を使用する
3. HttpURLConnection オブジェクトのパラメータの問題
Java コード
// これはポストリクエストであるため、パラメータを http ボディに配置する必要があるため、設定する必要があります。デフォルトは false です。
httpUrlConnection.setDoInput(true);
//リクエストはキャッシュを使用できません
httpUrlConnection.setUseCaches(false);
// Set 送信されるコンテンツ タイプはシリアル化可能な Java オブジェクトであると判断されます
// (これが設定されていない場合、シリアル化されたオブジェクトを送信するとき、デフォルトの WEB サービスがこのタイプではない場合、java.io.EOFException がスローされる可能性があります)
httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");
//リクエストメソッドを「POST」に設定します。デフォルトは GET
httpUrlConnection.setRequestMethod("POST ");
//Connection、上記の項目 2 の url.openConnection() からこの時点までの設定を完了する必要があります。接続する前に、
Java コード // ここで getOutputStream は暗黙的に接続します (つまり、上記の connect() メソッドを呼び出すのと同じように、 // したがって、開発中に上記の connect() を呼び出さなくても大丈夫です) 。 OutputStream outStrm = httpUrlConnection.getOutputStream(); 5. HttpURLConnection のデータ書き込みとデータ送信の問題 Java コード // 次に、出力ストリーム オブジェクトを介してオブジェクト出力ストリーム オブジェクトを構築し、シリアル化可能な出力オブジェクトを実現します。 ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm); //データをオブジェクト出力ストリームに書き込み、データはメモリ バッファに保存されます objOutputStrm.writeObject(new String("I am test data" ) ;現時点では、これ以上データをオブジェクト出力ストリームに書き込むことはできません。以前に書き込まれたデータはメモリ バッファーに存在します。// 準備された http リクエストは、以下の getInputStream() 関数が呼び出されたときにのみ正式にサーバーに送信されます。 . objOutputStm.close(); // HttpURLConnection 接続オブジェクトの getInputStream() 関数を呼び出します。 // メモリ バッファーにカプセル化された完全な HTTP リクエスト メッセージをサーバーに送信します。 InputStream inStrm = httpConn.getInputStream(); // // 上記の httpConn.getInputStream() メソッドが呼び出されています。 request 終了しました。 オブジェクト出力ストリームへの次の出力は無意味です // オブジェクト出力ストリームが close() メソッドを呼び出していない場合でも、次の操作はオブジェクト出力ストリームにデータを書き込みません。
// したがって、データを再送信する場合は、接続を再作成し、パラメータを再設定し、ストリームオブジェクトを再作成し、データを再書き込みし、
// データを再送信する必要があります(これらの操作は再調査する必要はありません。さらに調査する必要があります)
objOutputStm(new String(""));
Javaコード
OutputStream os = httpConn.getOutputStream();
param = new String (); = = + 電話番号 +
" "&msg=" + java.net.URLEncoder.encode(msg,"GBK ") ; ;
os.write(param.getBytes());
7. ネットワーク異常時にプログラムがフリーズして実行を継続しないようにするためのタイムアウト設定
System.setProperty(" sun.net.client.defaultConnectTimeout", "30000");
System.setProperty("sun.net.client.defaultReadTimeout", "30000");
ここで: sun.net. client.defaultConnectTimeout: タイムアウトホストへの接続のタイムアウト (単位: ミリ秒)
sun.net.client.defaultReadTimeout: ホストからのデータ読み取りのタイムアウト (単位: ミリ秒)
JDK 1.5 より前のバージョンのみを渡すことができます これら 2 つのシステム プロパティを次のように設定しますネットワークタイムアウトを制御します。 1.5では、HttpURLConnectionの親クラスURLConnectionの次の2つのメソッドも使用できます:
setConnectTimeout: 接続ホストのタイムアウトを設定します(単位: ミリ秒)
setReadTimeout: ホストからのデータ読み取りのタイムアウトを設定します(単位: ミリ秒) )
例:
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
urlCon.setReadTimeout(30000);
概要:
a : HttpURLConnection の connect() 関数は、実際にはサーバーとの TCP 接続を確立するだけであり、実際には http リクエストを送信しません。
post であっても get であっても、http リクエストは実際には HttpURLConnection の getInputStream() 関数まで正式に送信されません。b: POST を使用して URL リクエストを送信する場合、URL リクエストパラメータの設定順序が最優先されます。
接続オブジェクト (設定された関数) のすべての設定は、connect() 関数の前に実行する必要があります。 OutputStream での書き込み操作は、inputStream での読み取り操作よりも前に行う必要があります。これらの順序は、実際には http リクエストの形式によって決まります。
inputStream 読み取り操作が outputStream 書き込み操作よりも前にある場合、例外がスローされます:java.net.ProtocolException: 入力の読み取り後に出力を書き込むことはできません....
c: http リクエストは実際には 2 つの部分で構成されます。は http ヘッダーです。この http リクエストに関するすべての設定は http ヘッダーで定義されます。
もう 1 つはコンテンツです。connect() 関数は、HttpURLConnection オブジェクトの設定値に基づいて http ヘッダー情報を生成するため、connect 関数を呼び出す前に、
すべての設定を準備する必要があります。d: http ヘッダーの直後に http リクエストの本文が続きます。本文の内容は、outputStream ストリームを通じて書き込まれます。実際、outputStream は単なる文字列ストリームです。書き込まれた内容はすぐにネットワークに送信されませんが、outputStream が閉じられると、入力内容に基づいて http ボディが生成されます。
この時点で、http によって要求されたすべての準備が整いました。 getInputStream() 関数が呼び出されると、準備された http リクエストが正式にサーバーに送信され、この http リクエストに対するサーバーの戻り情報を読み取るための入力ストリームが返されます。 httpリクエストはgetInputStream(httpヘッダーとボディを含む)中に送信されているため、getInputStream()関数
の後に接続オブジェクトを設定する(httpヘッダー情報を変更する)か、outputStreamに書き込む(ボディを変更する) は無意味です。これらの操作を実行すると例外が発生します。

javaispopularforsoss-platformdesktopapplicationsduetoits "writeonce、runaynay" philosophy.1)itusesbytecodatiTatrunnanyjvm-adipplatform.2)ライブラリリケンディンガンドジャヴァフククレアティック - ルルクリス

Javaでプラットフォーム固有のコードを作成する理由には、特定のオペレーティングシステム機能へのアクセス、特定のハードウェアとの対話、パフォーマンスの最適化が含まれます。 1)JNAまたはJNIを使用して、Windowsレジストリにアクセスします。 2)JNIを介してLinux固有のハードウェアドライバーと対話します。 3)金属を使用して、JNIを介してMacOSのゲームパフォーマンスを最適化します。それにもかかわらず、プラットフォーム固有のコードを書くことは、コードの移植性に影響を与え、複雑さを高め、パフォーマンスのオーバーヘッドとセキュリティのリスクをもたらす可能性があります。

Javaは、クラウドネイティブアプリケーション、マルチプラットフォームの展開、および言語間の相互運用性を通じて、プラットフォームの独立性をさらに強化します。 1)クラウドネイティブアプリケーションは、GraalvmとQuarkusを使用してスタートアップ速度を向上させます。 2)Javaは、埋め込みデバイス、モバイルデバイス、量子コンピューターに拡張されます。 3)Graalvmを通じて、JavaはPythonやJavaScriptなどの言語とシームレスに統合して、言語間の相互運用性を高めます。

Javaの強力なタイプ化されたシステムは、タイプの安全性、統一タイプの変換、多型を通じてプラットフォームの独立性を保証します。 1)タイプの安全性は、コンパイル時間でタイプチェックを実行して、ランタイムエラーを回避します。 2)統一された型変換ルールは、すべてのプラットフォームで一貫しています。 3)多型とインターフェイスメカニズムにより、コードはさまざまなプラットフォームで一貫して動作します。

JNIはJavaのプラットフォームの独立を破壊します。 1)JNIは特定のプラットフォームにローカルライブラリを必要とします。2)ローカルコードをターゲットプラットフォームにコンパイルおよびリンクする必要があります。3)異なるバージョンのオペレーティングシステムまたはJVMは、異なるローカルライブラリバージョンを必要とする場合があります。

新しいテクノロジーは、両方の脅威をもたらし、Javaのプラットフォームの独立性を高めます。 1)Dockerなどのクラウドコンピューティングとコンテナ化テクノロジーは、Javaのプラットフォームの独立性を強化しますが、さまざまなクラウド環境に適応するために最適化する必要があります。 2)WebAssemblyは、Graalvmを介してJavaコードをコンパイルし、プラットフォームの独立性を拡張しますが、パフォーマンスのために他の言語と競合する必要があります。

JVMの実装が異なると、プラットフォームの独立性が得られますが、パフォーマンスはわずかに異なります。 1。OracleHotspotとOpenJDKJVMは、プラットフォームの独立性で同様に機能しますが、OpenJDKは追加の構成が必要になる場合があります。 2。IBMJ9JVMは、特定のオペレーティングシステムで最適化を実行します。 3. Graalvmは複数の言語をサポートし、追加の構成が必要です。 4。AzulzingJVMには、特定のプラットフォーム調整が必要です。

プラットフォームの独立性により、開発コストが削減され、複数のオペレーティングシステムで同じコードセットを実行することで開発時間を短縮します。具体的には、次のように表示されます。1。開発時間を短縮すると、1セットのコードのみが必要です。 2。メンテナンスコストを削減し、テストプロセスを統合します。 3.展開プロセスを簡素化するための迅速な反復とチームコラボレーション。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版
便利なJavaScript開発ツール

ホットトピック









