Ajax 다른 서버 이용 (RSS 서비스, proxy :다른 서버에 작성된 웹프로그램 요청)

woom·2023년 1월 13일

AJAX

목록 보기
5/5
post-thumbnail

📙 RSS 서비스

  • RSS 서비스를 제공하는 웹프로그램을 AJAX 기능으로 요청하여 처리결과를 응답받아 클라이언트에게 전달하는 JSP 문서

  • RSS(Really Simple Syndication 또는 RDF Site Summary) : 실시간으로 변경되는 정보를 빠르게 제공하기 위한 웹프로그램

  • 다른 서버에 작성된 웹프로그램을 요청할 경우
    • 문제점) 현재 실행중인 웹프로그램과 동일 서버에 작성된 웹프로그램을 AJAX 기능을 사용하여 요청과 응답 처리 가능하지만 다른 서버에 작성된 웹프로그램을 AJAX 기능을 사용하여 요청할 경우 에러(에러코드 : 0) 발생
    • 해결법) 다른 서버에 작성된 웹프로그램은 프록시 프로그램을 사용하여 AJAX 기능으로 요청하여 실행결과를 응답받아 처리 가능


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>AJAX</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
	<h1>RSS Reader</h1>
	<hr>
	<div id="display"></div>
	
	<script type="text/javascript">
	$.ajax({
		type: "get",
		//문제점)현재 실행중인 웹프로그램과 동일 서버에 작성된 웹프로그램을 AJAX 기능을 사용하여 
		//요청과 응답 처리 가능하지만 다른 서버에 작성된 웹프로그램을 AJAX 기능을 사용하여
		//요청할 경우 에러(에러코드 : 0) 발생
		//url: "https://www.khan.co.kr/rss/rssdata/kh_entertainment.xml",
		
		//해결법)다른 서버에 작성된 웹프로그램은 프록시 프로그램을 사용하여 AJAX 기능으로
		//요청하여 실행결과를 응답받아 처리 가능 
		url: "rss_proxy.jsp",
		dateType: "xml",
		success: function(xmlDoc) {
			var channelTitle=$(xmlDoc).find("channel").children("title").text();
			
			var html="<h2>"+channelTitle+"</h2>";
			html+="<ul>";
			$(xmlDoc).find("item").each(function() {
				var title=$(this).find("title").text();
				var link=$(this).find("link").text();
				var date;
				if($(this).find("pubDate").length!=0) {
					date=$(this).find("pubDate").text();
				} else {
					date=$(this).find("dc\\:date").text();
				}
				html+="<li><a href='"+link+"'>"+title+"["+date+"]</a></li>";				
			});
			html+="</ul>";
			
			$("#display").html(html);
		},
		error: function(xhr) {
			alert("에러코드 = "+xhr.status);
		}
	});
	</script>
</body>
</html>





📒 proxy (다른 서버에 작성된 웹프로그램 요청)

  • 가상의 클라이언트(브라우저)를 이용하여 다른 서버에 작성된 웹프로그램을 요청하고 실행결과를 응답받아 그대로 클라이언트에게 전달하는 JSP 문서

  • HttpClient 객체 사용하여 프록시(Proxy) 기능을 제공하는 웹프로그램 작성

    • https://apache.org 사이트에서 필요한 라이브러리 파일을 다운로드 받아 프로젝트에 빌드 처리
    • commons-httpclient-3.1.jar, commons-codec-1.15.jar, commons-logging-1.2.jar


<%@page import="org.apache.commons.httpclient.methods.GetMethod"%>
<%@page import="org.apache.commons.httpclient.HttpClient"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//요청 웹프로그램의 URL 주소 저장
	String url="https://www.khan.co.kr/rss/rssdata/kh_entertainment.xml";
	//HttpClient 객체 생성 - 가상의 브라우저 기능을 제공하기 위한 객체
	HttpClient client=new HttpClient();
	
	//GetMethod 객체 생성 - 가상의 브라우저를 이용하여 GET 방식으로 웹프로그램을 요청하기 위한 객체
	// => PostMethod 객체 : 가상의 브라우저를 이용하여 POST 방식으로 웹프로그램을 요청하기 위한 객체
	GetMethod method=new GetMethod(url);
	
	try {
		//HttpClient.executeMethod(Method method) : 가상의 브라우저를 이용하여 웹프로그램을 요청하는 메소드
		// => 요청에 대한 실행결과의 상태코드(Status Code - 응답상태 : int) 반환
		int statusCode=client.executeMethod(method);
		
		//프록시 프로그램의 리스폰즈 메세지를 저장하기 위한 객체 초기화
		response.reset();
		
		//프록시 프로그램의 출력스트림 초기화
		out.clearBuffer();
		
		//프록시 프로그램을 요청한 웹프로그램(클라이언트)에게 반환받은 상태코드를 전달
		response.setStatus(statusCode);
		
		if(statusCode==HttpServletResponse.SC_OK) {//정상적인 실행결과를 응답받은 경우 - 상태코드 : 200
			//Method.getResponseBodyAsString() : 요청에 실행결과를 문자열로 반환하는 메소드
			// => 실행결과를 반환받아 원하는 문자형태(캐릭터셋)으로 변환하여 저장
			String result=new String(method.getResponseBodyAsString().getBytes("8859_1"),"utf-8");
			
			//프록시 프로그램을 요청한 웹프로그램(클라이언트)에게 실행결과에 대한 문서형태를 전달
			response.setContentType("text/xml; charset=utf-8");
			
			//프록시 프로그램을 요청한 웹프로그램(클라이언트)에게 실행결과를 전달
			out.println(result);
		} 
	} finally {
		//가상의 브라우저를 이용하여 접속된 서버의 연결 해제
		//Method.releaseConnection() : 접속 서버의 연결을 해제하는 메소드
		if(method!=null) method.releaseConnection();
	}
%>





📌 Proxy

  • 프록시 기능을 제공하는 웹프로그램 (HttpClient) 객체 사용

  • https://apache.org 사이트에서 라이브러리 파일을 다운로드 받아 프로젝트에 빌드 처리

    • 라이브러리 파일 다운로드 방법
  1. apache 사이트 상단 Downloads → Distribution

  2. 다운받을 폴더 click → binary 폴더 click → zip 폴더 다운로드 → 압축 푼 후 jar 파일을 eclipse lib 폴더에 빌드 처리(붙여넣기)

  • export시 org.apache 로 선택!

  • proxy server : 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버

profile
Study Log 📂

0개의 댓글