Heim Java javaLernprogramm Zusammenfassung der Verbindungs-, Timeout- und Shutdown-Nutzung von URLConnection

Zusammenfassung der Verbindungs-, Timeout- und Shutdown-Nutzung von URLConnection

Dec 20, 2016 pm 01:46 PM
SUN .net

HttpURLConnection kann in Java verwendet werden, um WEB-Ressourcen anzufordern.

1. Die Kategorien von URL-Anfragen

sind in zwei Kategorien unterteilt: GET- und POST-Anfragen. Der Unterschied zwischen den beiden ist:
a:) Die Get-Anfrage kann eine statische Seite abrufen, oder Sie können die Parameter nach der URL-Zeichenfolge einfügen und an das Servlet übergeben.
b:) Der Unterschied zwischen post und get ist das post Die Parameter werden nicht in der URL-Zeichenfolge platziert, sondern im Hauptteil der http-Anfrage.

2. URLConnection-Objektproblem

Java-Code

URL url = neue URL("http://localhost:8080/TestHttpURLConnectionPro.do " );

URLConnection rulConnection = url.openConnection(); // Das urlConnection-Objekt basiert hier tatsächlich auf der URL

// Anforderungsprotokoll (hier Es ist das Unterklasse HttpURLConnection der URLConnection-Klasse

// generiert von http), daher ist es am besten, sie hier

// in ein Objekt vom Typ HttpURLConnection zu konvertieren, um

// Weitere APIs für HttpURLConnection. Wie folgt:

HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection;

3 🎜 >

Java-Code

// Legen Sie fest, ob die Ausgabe an httpUrlConnection erfolgen soll, da es sich um eine Post-Anfrage handelt, müssen die Parameter im

// HTTP-Körper platziert werden, also muss es so sein standardmäßig auf „true“ gesetzt sein. Folgendes ist „false“;

// Legen Sie fest, ob von httpUrlConnection gelesen werden soll ;

httpUrlConnection.setDoInput(true);

// Post-Anfrage kann Cache nicht verwenden

httpUrlConnection.setUseCaches(false); 🎜>

// Stellen Sie den übertragenen Inhaltstyp auf ein serialisierbares Java-Objekt ein

// (Wenn dies nicht festgelegt ist, kann es bei der Übertragung des serialisierten Objekts zu einer Auslösung kommen, wenn das Standard-WEB Dienst ist nicht von diesem Typ.

httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");

// Set Die angegebene Anforderungsmethode ist „POST“, der Standardwert ist GET

httpUrlConnection.setRequestMethod("POST");

// Connect , von der URL in Punkt 2 oben .openConnection() Die Konfiguration bis zu diesem Punkt muss abgeschlossen sein, bevor eine Verbindung hergestellt wird, httpUrlConnection.connect();

4. HttpURLConnection-Verbindungsproblem

Java-Code

// Hier stellt getOutputStream implizit eine Verbindung her (das heißt, genau wie beim Aufruf der obigen connect()-Methode

// Daher ist es nicht erforderlich, die obige Verbindung aufzurufen () während der Entwicklung.

OutputStream outStrm = httpUrlConnection.getOutputStream();

5. Probleme beim Schreiben und Senden von Daten bei HttpURL

/ / Erstellen Sie nun das Ausgabestream-Objekt des Objekts über das Ausgabestream-Objekt, um serialisierbare Objekte auszugeben.

ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);

// Daten in den Objektausgabestream schreiben und die Daten werden im Speicherpuffer

gespeichert

objOutputStrm.writeObject(new String("I am test data"));

// Aktualisieren Sie den Objektausgabestream und schreiben Sie alle Bytes in den potenziellen Stream (einige ObjectOutputStream)

objOutputStm.flush();

// Schließe das Stream-Objekt. Zu diesem Zeitpunkt können keine Daten mehr in den Objektausgabestream geschrieben werden. Die zuvor geschriebenen Daten sind im Speicherpuffer vorhanden.

// Die vorbereitete http-Anfrage wird nur gestellt, wenn die unten stehende Funktion getInputStream() aufgerufen wird . Offiziell an den Server gesendet

objOutputStm.close();

// Rufen Sie die Funktion getInputStream() des HttpURLConnection-Verbindungsobjekts auf,

// Speichern Sie den Speicher. Die vollständige HTTP-Anforderungsnachricht, die im Puffer gekapselt ist, wird an den Server gesendet.

InputStream inStrm = httpConn.getInputStream(); // <===Hinweis: Das Codesegment, das die Anfrage tatsächlich sendet, befindet sich hier

// httpConn oben Die Methode .getInputStream() wurde aufgerufen, diese HTTP-Anfrage wurde beendet und die folgende Ausgabe an den Objektausgabestream ist bedeutungslos

// Auch wenn der Objektausgabestream die Methode close() nicht aufruft , wird der folgende Vorgang nicht ausgeführt. Es werden keine Daten in den Objektausgabestream geschrieben

// Wenn Sie also Daten erneut senden möchten, müssen Sie die Verbindung neu erstellen, Parameter neu einstellen, das Stream-Objekt neu erstellen, die Daten neu schreiben,

/ / Senden Sie die Daten erneut (ob diese Vorgänge wiederholt werden müssen)

objOutputStm.writeObject(new String("")); 🎜>

6. Post-Parameter-Methode

Java-Code

OutputStream os = httpConn.getOutputStream();

String param = neuer String ();

param = "CorpID =" + CorpID +

"&LoginName=" + LoginName+

"&send_no=" + phoneNumber +

" &msg=" + java.net.URLEncoder.encode(msg,"GBK"); ;

os.write(param.getBytes());

7 . Timeout-Einstellungen, um Netzwerkanomalien zu verhindern, die zum Einfrieren des Programms führen können ");

System.setProperty(" sun.net.client.defaultReadTimeout", "30000");

Wo: sun.net.client.defaultConnectTimeout: Timeout für die Verbindung zum Host (Einheit: Millisekunden)

sun.net.client.defaultReadTimeout: Timeout für das Lesen von Daten vom Host (Einheit: Millisekunden)

Für In Versionen vor JDK 1.5 können Sie diese beiden Systemeigenschaften nur festlegen, um Netzwerk-Timeouts zu steuern. In 1.5 können Sie auch die folgenden zwei Methoden der übergeordneten Klasse URLConnection von HttpURLConnection verwenden:

setConnectTimeout: Legen Sie das Zeitlimit für den Verbindungshost fest (Einheit: Millisekunden)

setReadTimeout: Legen Sie das Zeitlimit für das Lesen fest Daten vom Host (Einheit: Millisekunden)

Zum Beispiel:

HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();

urlCon. setConnectTimeout(30000);

urlCon.setReadTimeout(30000);

Zusammenfassung: >a: Die Verbindung( )-Funktion von HttpURLConnection stellt tatsächlich nur eine TCP-Verbindung mit dem Server her und sendet keine HTTP-Anfrage.

Unabhängig davon, ob es sich um Post oder Get handelt, wird die HTTP-Anfrage tatsächlich erst dann offiziell gesendet, wenn die Funktion getInputStream() von HttpURLConnection ausgeführt wird.

b: Beim Senden einer URL-Anfrage per POST hat die Reihenfolge, in der die URL-Anfrageparameter festgelegt werden, oberste Priorität.

Alle Konfigurationen des Verbindungsobjekts (diese festgelegten Funktionen)

müssen vorher abgeschlossen sein Die Funktion connect() wird ausgeführt. Der Schreibvorgang für OutputStream muss dem Lesevorgang für InputStream vorausgehen.

Die Reihenfolge wird tatsächlich durch das Format der http-Anfrage bestimmt.

Wenn der InputStream-Lesevorgang dem OutputStream-Schreibvorgang vorausgeht, wird eine Ausnahme ausgelöst:

java.net.ProtocolException: Ausgabe kann nach dem Lesen der Eingabe nicht geschrieben werden....

c:http Die Anfrage besteht eigentlich aus zwei Teilen,

einer ist der http-Header, alle Konfigurationen zu dieser http-Anfrage werden im http-Header definiert und

einer ist der Textinhalt. Die Funktion

connect() generiert HTTP-Header-Informationen basierend auf dem Konfigurationswert des HttpURLConnection-Objekts. Daher muss

vor dem Aufruf der Verbindungsfunktion alle Konfigurationen vorbereiten.
d: Unmittelbar nach dem HTTP-Header folgt der Inhalt des Hauptteils über den OutputStream-Stream.
Tatsächlich ist der OutputStream kein Netzwerk-Stream Am besten hineinschreiben. Die Eingabe wird nicht sofort an das Netzwerk gesendet, sondern im Speicherpuffer vorhanden. Wenn der Ausgabestrom geschlossen wird, wird der HTTP-Text basierend auf dem Eingabeinhalt generiert.
Zu diesem Zeitpunkt ist alles, was von http angefordert wird, fertig. Wenn die Funktion getInputStream() aufgerufen wird, wird die vorbereitete http-Anfrage
offiziell an den Server gesendet und dann wird ein Eingabestream zum Lesen der Rückgabeinformationen des Servers für diese http-Anfrage zurückgegeben. Da die http
-Anfrage während getInputStream gesendet wurde (einschließlich http-Header und -Text), legen Sie das Verbindungsobjekt fest (ändern Sie die http-Header-Informationen) oder schreiben Sie nach der getInputStream()-Funktion
(Ändern Sie den Text) sind bedeutungslos. Das Ausführen dieser Vorgänge führt zu Ausnahmen.



Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie sind die Berufsaussichten von C#? Wie sind die Berufsaussichten von C#? Oct 19, 2023 am 11:02 AM

Ganz gleich, ob Sie Anfänger oder erfahrener Profi sind: Die Beherrschung von C# ebnet den Weg für Ihre Karriere.

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Die Entwicklung von Technologien der künstlichen Intelligenz (KI) ist heute in vollem Gange und sie haben in verschiedenen Bereichen großes Potenzial und Einfluss gezeigt. Heute wird Dayao Ihnen 4 .NET Open-Source-KI-Modell-LLM-bezogene Projekt-Frameworks vorstellen und hofft, Ihnen einige Referenzen zu geben. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ist ein Open-Source-Softwareentwicklungskit (SDK), das für die Integration großer Sprachmodelle (LLM) wie OpenAI und Azure entwickelt wurde

Leistungsunterschiede zwischen Java-Framework und .NET-Framework Leistungsunterschiede zwischen Java-Framework und .NET-Framework Jun 03, 2024 am 09:19 AM

In Bezug auf die Verarbeitung von Anforderungen mit hoher Parallelität bietet .NETASP.NETCoreWebAPI eine bessere Leistung als JavaSpringMVC. Zu den Gründen gehören: AOT-Frühkompilierung, die die Startzeit verkürzt, wobei Entwickler für die Zuweisung und Freigabe von Objektspeicher verantwortlich sind.

Whale Address lässt SUN weiterhin fallen, was bei Anlegern Besorgnis erregt Whale Address lässt SUN weiterhin fallen, was bei Anlegern Besorgnis erregt Sep 13, 2024 pm 09:11 PM

Eine große Waladresse, die zuvor erhebliche Mengen an SUN abgeladen hatte, hat innerhalb der letzten zwei Stunden einen weiteren Token im Wert von 1 Million US-Dollar verkauft.

Telegram-Meme-Coins drohen, das Ton-Netzwerk zu zerstören Telegram-Meme-Coins drohen, das Ton-Netzwerk zu zerstören Aug 29, 2024 pm 09:56 PM

Aufgrund der überaus erfolgreichen Mini-Apps-Technologie auf der Messaging-Plattform stehen Telegram-Meme-Coins seit einiger Zeit im Rampenlicht.

.NET-Leistungsoptimierungstechnologie für Entwickler .NET-Leistungsoptimierungstechnologie für Entwickler Sep 12, 2023 am 10:43 AM

Wenn Sie ein .NET-Entwickler sind, müssen Sie sich der Bedeutung der Optimierung von Funktionalität und Leistung bei der Bereitstellung hochwertiger Software bewusst sein. Durch den fachgerechten Einsatz der bereitgestellten Ressourcen und die Verkürzung der Ladezeiten der Website schaffen Sie nicht nur ein angenehmes Erlebnis für Ihre Nutzer, sondern senken auch die Infrastrukturkosten.

Binance Futures fügt POPCAT- und SUN USDⓈ-Margined Perpetual Contracts hinzu Binance Futures fügt POPCAT- und SUN USDⓈ-Margined Perpetual Contracts hinzu Aug 23, 2024 am 12:09 AM

Binance Futures hat die Einführung von zwei neuen unbefristeten USDⓈ-Margin-Kontrakten mit POPCAT- und SUN-Token angekündigt.

Baby Doge und SUN steigen auf, während Meme-Münzen sich dem breiteren Aufschwung des Kryptomarktes anschließen Baby Doge und SUN steigen auf, während Meme-Münzen sich dem breiteren Aufschwung des Kryptomarktes anschließen Sep 19, 2024 pm 09:35 PM

Die meisten Meme-Coins verzeichneten am Donnerstag Zuwächse und verzeichneten gemeinsam mit Bitcoin (BTC) und Ether (ETH) deutliche Zuwächse.

See all articles