ajax 와 jsonp 를 사용하면, 다른 머신에서 서비스 되는 데이타를 가져올 수 있다고 하긴 하는데..
오늘 설명하고자 하는 것은, URLConnection 과 ajax 를 사용하여 다른 머신에서 서비스 되는 웹페이지를 가져오는 방법.
ajax 로는 사실 다른 머신에서 서비스 되는 웹페이지 내용을 가져올 수 없잖아요..
jsonp 로 데이타는 가져올 수 있어도 해당 웹페이지 자체를 가져올 수는 없으니까..
물론, 웹페이지 뿐만 아니라 json 이나 xml 등의 데이타도 가져올 수 있습니다.
외부 머신의 URL 스트림을 받아서 일단 내부 머신의 .jsp 에 담았으면,
이를 jsp:include 해도 되고.. ajax 에 상요해도 되고..
<%--
* 프로그램 명칭 :
* 프로그램 설명 :
* 작업일/작업자 :
--%><%@ page language="java" contentType="text/html; charset=EUC-KR"
%><%@ page import="java.util.*"
%><%@ page import="java.io.*"
%><%@ page import="java.net.URL"
%><%@ page import="java.net.URLConnection"
%><%@ page import="java.net.UnknownHostException"
%><%
URLConnection con = null;
InputStreamReader isr = null;
BufferedReader br = null; // File I/O 가 아니라서 필요없을 수도 있긴 한데..
StringBuffer sb = null;
ServletOutputStream sos = null;
BufferedOutputStream bos = null; // 꼭 필요한 것을 아닐텐데..
try{
URL u = new URL("http://URL");
con = u.openConnection(); // DB 에서 Connection 을 생성하는 것처럼..
con.connect();
isr = new InputStreamReader(con.getInputStream(),"EUC-KR"); // 문자셋은 상황에 맞게..
br = new BufferedReader(isr);
sb = new StringBuffer();
String line = null;
while((line = br.readLine()) != null){
sb.append(line+"\n");
}
// trim() 함수는 IE 의 경우 8.0 에서 지원되지 않음. http://blog.naver.com/chsmanager/140208464748
String cont = sb.toString().trim(); // The processing instruction target matching "[xX][mM][lL]" is not allowed 오류 제거 위해 trim()
sos = response.getOutputStream();
bos = new BufferedOutputStream(sos);
byte[] bs = cont.getBytes();
bos.write(bs, 0, bs.length);
bos.flush(); // flush() 는 반드시 해야 해요.. 아니면, Buffer 에 남은 짜투리가 제대로 전달되지 않을수도.
}catch(UnknownHostException uhe){
StringBuffer sbLog = new StringBuffer(); // FileAccess 를 줄이기 위해서 한번에 Write 하는 방식
sbLog.append("\n+++."+request.getRequestURL()+ "..\n");
sbLog.append("+++.Exception:" +uhe.toString()+ "..\n");
System.out.println(sbLog); // println 이기 때문에 맨 뒤에는 sbLog.append("\n"); 불필요.
sbLog.delete(0,sbLog.length());
}catch(Exception e){
StringBuffer sbLog = new StringBuffer(); // FileAccess 를 줄이기 위해서 한번에 Write 하는 방식
sbLog.append("\n+++."+request.getRequestURL()+ "..\n");
sbLog.append("+++.Exception:" +e.toString()+ "..\n");
System.out.println(sbLog); // println 이기 때문에 맨 뒤에는 sbLog.append("\n"); 불필요.
sbLog.delete(0,sbLog.length());
}finally{
if(sb !=null) try{ sb.delete(0, sb.length()); }catch(Exception e){}finally{ sb =null; }
if(br !=null) try{ br.close(); }catch(Exception e){}finally{ br =null; }
if(isr !=null) try{ isr.close(); }catch(Exception e){}finally{ isr =null; }
if(sos !=null) try{ sos.close(); }catch(Exception e){}finally{ sos =null; }
if(bos !=null) try{ bos.close(); }catch(Exception e){}finally{ bos =null; }
}
%>
'Server Oriented > Java & JSP' 카테고리의 다른 글
multipart/form-data 관련 소고 (0) | 2015.02.09 |
---|---|
웹페이지(HTML, JSP)를 PDF 파일로 저장 (0) | 2014.12.18 |
jstl (0) | 2014.03.19 |
모바일에서 Base64 로 encode 하고 이를 String 으로 전달받은후 DB 처리 (0) | 2014.03.14 |
접근제어자(public, protected, default, private), 제어자(static, abstract, final, transient, synchronized) (0) | 2013.08.22 |