Heim > Java > javaLernprogramm > Hauptteil

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

巴扎黑
Freigeben: 2016-12-20 13:46:22
Original
1663 Leute haben es durchsucht

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.



Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!