티스토리 뷰

반응형

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");
    }
    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; }
  }
%>

 

출처 - http://jsp-making.tistory.com/250

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함