URLConnection의 getOut/InputStream() 관련 질문입니다.
접시
안녕하세요.
URLConnection의 getOut/InputStream() 관련 해서 질문을 올립니다.
타 시스템과 데이타 동기화를 위해 필요한 로직으로 데이타 건당 xml을 보내고 결과를 받아 정보를 갱신해야 하는 것으로
보낼 양이 많아서 보낼 때마다 연결하고 종료하려니 타 시스템에 부하가 걸려 시작할 때 한번 연결하고 request, response를 하려고 합니다.
URL url = new URL(uacsUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
이렇게 해서 conn 생성하고 for문에서
writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()));
.....
conn.getInputStream() 로 InputStream으로 XML를 파싱해서 처리하는데
처음에는 정상적으로 request, response를 하는데
두번째에는 아래와 같은exception이 발생합니다.
writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream())); 이곳에서 아래의 exception 발생
java.net.ProtocolException: Cannot write output after reading input.
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:832)
----------------------------------------------------
이것저것 찾아봤는데 해결책을 못찾아 글을 남깁니다.
질문이 두서없지만 간략히 정리하면
ㅇ 로직이 시작하기전 한번 connection을 맺는다.
ㅇfor문이 돌면서 connection.getOutputStream() 후 getInputStream()으로 request, response 한다.
감사합니다.
-
초코향
Http는 한번 연결하고나면 끊어지기 때문에 만들어둔 Connection을 재활용할 수 없습니다.
( 왜 그러냐고 물으신다면, Http가 원래 그렇다고 답해 드리겠습니다. ㅎㅎ )
connection을 매번 새로 만들어서 써야 합니다.