HttpURLConnection은 Java에서 WEB 리소스를 요청하는 데 사용할 수 있습니다.
1. URL 요청
은 GET 요청과 POST 요청의 두 가지 범주로 나뉩니다. 둘 사이의 차이점은 다음과 같습니다.
a:) get 요청은 정적 페이지를 얻을 수도 있고, URL 문자열 뒤에 매개변수를 넣고 서블릿에 전달할 수도 있습니다.
b:) post와 get의 차이점은 다음과 같습니다. get은 해당 게시물입니다. 매개변수는 URL 문자열이 아닌 http 요청 본문에 배치됩니다.
2. URLConnection 객체 문제
Java 코드
URL url = new URL("http://localhost:8080/TestHttpURLConnectionPro.do " );
URLConnection rulConnection = url.openConnection(); // 여기의 urlConnection 객체는 실제로 URL을 기반으로 합니다.
// 요청 프로토콜(여기서는 URLConnection 클래스
// http에 의해 생성된 HttpURLConnection 하위 클래스이므로
// HttpURLConnection 유형의 객체로 변환하는 것이 가장 좋습니다. > // HttpURLConnection에 대한 추가 API는 다음과 같습니다. HttpURLConnection httpUrlConnection = (HttpURLConnection) rulConnection; 3. 🎜 >Java 코드
// httpUrlConnection으로 출력할지 여부를 설정합니다. 게시 요청이므로 매개변수는
// http 본문에 있어야 하므로 기본적으로 true로 설정됩니다.
httpUrlConnection.setDoOutput(true);
// httpUrlConnection에서 읽을지 여부를 설정합니다. 기본값은 true입니다. ;
httpUrlConnection.setDoInput(true);
// 게시 요청은 캐시를 사용할 수 없습니다.
httpUrlConnection.setUseCaches(false); 🎜>
// 전송되는 콘텐츠 유형을 직렬화 가능한 Java 객체로 설정
// (이렇게 설정하지 않으면 직렬화된 객체 전송 시 기본 WEB 서비스가 이 유형이 아닙니다.
httpUrlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object")
// Set 지정된 요청 방법은 "POST"이며 기본값은 GET
httpUrlConnection.setRequestMethod("POST")
// 연결 , 위 항목 2의 url에서 .openConnection() 연결하기 전에 이 지점까지의 구성을 완료해야 합니다. httpUrlConnection.connect()
4.HttpURLConnection 연결 문제
Java 코드
// 여기서 getOutputStream은 암시적으로 연결됩니다(즉, 위의 connect() 메서드를 호출하는 것과 같습니다.
// 따라서 위의 connect를 호출할 필요가 없습니다. () 개발 중).
OutputStream outStrm = httpUrlConnection.getOutputStream();
5. HttpURLConnection 데이터 쓰기 및 전송 문제
Java 코드
/ / 이제 출력 스트림 객체를 통해 객체 출력 스트림 객체를 빌드하여 직렬화 가능한 객체를 출력합니다.
ObjectOutputStream objOutputStrm = new ObjectOutputStream(outStrm);
// 객체 출력 스트림에 데이터를 쓰고, 해당 데이터는 메모리 버퍼에 저장됩니다.
objOutputStrm.writeObject(new String("I am test data"));
// 객체 출력 스트림을 새로 고치고 모든 바이트를 잠재적 스트림(일부 ObjectOutputStream)에 씁니다.
objOutputStm.flush();
// 스트림 객체를 닫습니다. 이때는 더 이상 객체 출력 스트림에 쓸 수 없습니다. 이전에 쓴 데이터가 메모리 버퍼에 존재합니다.
// 준비된 http 요청은 아래 getInputStream() 함수가 호출될 때만 이루어집니다. . 공식적으로 서버에 전송됩니다.
objOutputStm.close();
// HttpURLConnection 연결 객체의 getInputStream() 함수를 호출합니다.
// 메모리 저장 버퍼에 캡슐화된 완전한 HTTP 요청 메시지가 서버로 전송됩니다.
InputStream inStrm = httpConn.getInputStream(); //
// 위의 httpConn .getInputStream() 메소드가 호출되어 이 HTTP 요청이 종료되었으며 객체 출력 스트림에 대한 다음 출력은 의미가 없습니다.
// 객체 출력 스트림이 close() 메소드를 호출하지 않더라도. , 다음 작업은 개체 출력 스트림에 데이터가 기록되지 않습니다
// 따라서 데이터를 다시 보내려면 연결을 다시 만들고, 매개변수를 재설정하고, 스트림 개체를 다시 만들고, 데이터를 다시 써야 합니다.
/ / 데이터를 다시 보냅니다(이러한 작업을 반복해야 하는지 여부) 조사)
objOutputStm.writeObject(new String(""))
httpConn.getInputStream(); 🎜>
6. Post 매개변수 메서드 Java 코드 OutputStream os = httpConn.getOutputStream() String param = new String () param = "CorpID =" + CorpID + "&LoginName=" + LoginName+ "&send_no=" + 전화번호 + " &msg=" + java.net.URLEncoder.encode(msg,"GBK "); ; os.write(param.getBytes()); 7 . 프로그램이 정지될 수 있는 네트워크 이상을 방지하기 위한 시간 초과 설정 Java 코드 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 이전 버전에서는 네트워크 시간 초과를 제어하기 위해 이 두 가지 시스템 속성만 설정할 수 있습니다. 1.5에서는 HttpURLConnection의 상위 클래스 URLConnection의 다음 두 가지 메소드를 사용할 수도 있습니다. setConnectTimeout: 연결 호스트 시간 제한 설정(단위: 밀리초) setReadTimeout: 읽기 시간 제한 설정 호스트의 데이터(단위: 밀리초) 예: HttpURLConnection urlCon = (HttpURLConnection)url.openConnection() urlCon. setConnectTimeout(30000); urlCon.setReadTimeout(30000); 요약: >a: 연결( ) HttpURLConnection의 기능은 실제로 서버와의 tcp 연결만 설정하고 실제로 http 요청을 보내지 않습니다.post든 get이든 실제로 http 요청은 HttpURLConnection의 getInputStream() 함수가 호출될 때까지 공식적으로 전송되지 않습니다.
b: POST를 사용하여 URL 요청을 보낼 때 URL 요청 매개변수가 설정되는 순서가 최우선입니다.연결 개체의 모든 구성(설정된 기능)
이 완료되기 전에 완료되어야 합니다. connect() 함수가 실행됩니다. OutputStream에 대한 쓰기 작업은 inputStream에 대한 읽기 작업보다 선행해야 합니다.순서는 실제로 http 요청 형식에 따라 결정됩니다.
inputStream 읽기 작업이 outputStream 쓰기 작업보다 먼저 발생하면 예외가 발생합니다.
java.net.ProtocolException: Cannot write output after reading input....
c:http 요청 실제로는 두 부분으로 구성됩니다.
하나는 http 헤더이고, 이 http 요청에 대한 모든 구성은 http 헤더에 정의되며,
하나는 텍스트 콘텐츠입니다.
connect() 함수는 HttpURLConnection 객체의 구성 값을 기반으로 http 헤더 정보를 생성하므로 연결 함수를 호출하기 전에
에서 모든 구성을 준비해야 합니다.
d: http 헤더 바로 뒤에는 http 요청의 본문이 있습니다.
실제로 OutputStream은 네트워크 스트림이 아닙니다. 입력은 즉시 네트워크로 전송되지 않지만
메모리 버퍼에 존재하게 되며, 출력 스트림이 닫히면 입력 내용을 기반으로 http 본문이 생성됩니다.
이제 http에서 요청한 모든 것이 준비되었습니다. getInputStream() 함수가 호출되면 준비된 http 요청
이 공식적으로 서버로 전송되고, 그런 다음 이 http 요청에 대한 서버의 반환 정보를 읽기 위한 입력 스트림이 반환됩니다. getInputStream 중 http
요청이 전송되었으므로(http 헤더 및 본문 포함) 연결 객체를 설정하거나(http 헤더 정보 수정) getInputStream() 함수 이후에 outputStream에 씁니다
(텍스트 수정)
이러한 작업을 수행하면 예외가 발생합니다.

javaispopularforcross-platformdesktopapplicationsduetoits "writeonce, runanywhere"철학

Java에서 플랫폼 별 코드를 작성하는 이유에는 특정 운영 체제 기능에 대한 액세스, 특정 하드웨어와 상호 작용하고 성능 최적화가 포함됩니다. 1) JNA 또는 JNI를 사용하여 Windows 레지스트리에 액세스하십시오. 2) JNI를 통한 Linux 특이 적 하드웨어 드라이버와 상호 작용; 3) 금속을 사용하여 JNI를 통해 MacOS의 게임 성능을 최적화하십시오. 그럼에도 불구하고 플랫폼 별 코드를 작성하면 코드의 이식성에 영향을 미치고 복잡성을 높이며 잠재적으로 성능 오버 헤드 및 보안 위험을 초래할 수 있습니다.

Java는 Cloud-Native Applications, Multi-Platform 배포 및 교차 운용성을 통해 플랫폼 독립성을 더욱 향상시킬 것입니다. 1) Cloud Native Applications는 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. 개발 시간을 줄이면 하나의 코드 세트 만 필요합니다. 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 맥
강력한 PHP 통합 개발 환경

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구
