Darkbeom's beautiful mind

긍정적인 사고를 갖자!



2008/04/29 14:10

외부 사이트 jsp 페이지 include Java

외부 콘텐트 가져오기

c:import를 사용할 때의 이점 중 하나는 외부 웹 사이트나 웹 애플리케이션에서 콘텐트를 가져올 수 있다는 것이다. jsp:include에 대해 배울 때를 회상해보면 file 애트리뷰트를 사용하여 포함시킬 정적 콘텐트를 지정했다는 것을 알 수 있을 것이다. file 애트리뷰트는 이름이 포함하고 있는 것을 수행한다: 로컬 파일의 콘텐트를 가져올 수 있다. c:import에 대한 상응 애트리뷰트는 url이고 이것 역시 이름이 내포하는 대로 수행한다: 모든 URL을 가져올 수 있다. 로컬 파일에서 콘텐트와 함께 사이트 페이지를 파퓰레이팅 하는 대신, c:import모든 URL에서 콘텐트를 가져올 수 있다.

간단한 예제를 들어보겠다. 마다가스카르 로즈우드 기타 그림을 내 웹 사이트로 가져오고 싶다고 하자. 이미지 파일과 관련 링크로 이루어진 페이지를 구현할 수 있지만 다른 사이트에서 콘텐트를 가져오는 방법이 더 쉽다. 그런다음 자신의 사이트 룩앤필에 맞추는 것이다.

<%@ page language="java" contentType="text/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
    <title>newInstance.com</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <link href="/styles/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <c:import url="header.jsp">
        <c:param name="pageTitle" value="newInstance.com :: True North Guitars"/>
        <c:param name="pageSlogan" value="...building it from scratch" />
    </c:import>
    <%@ include file="/navigation.jsp" %><c:import url="bookshelf.jsp" />
    <c:import url="http://www.truenorthguitars.com/Clients/Richman/index.htm" />
    <%@ include file="/footer.jsp" %>
</body>
</html>

이 코드는 훌륭해 보이지만 곧바로 문제가 발견된다. 어떤 이미지도 나타나지 않으며 관련 링크도 실패한다. 물론 원인도 분명하다. 외부 리소스가 인터프리팅되기 때문에 인터프리팅이 아웃풋 스트림에 직접 삽입되었다는 결과를 얻는다. /images/guitar-01-24.jpg 같은 외부 이미지 링크는 없어진 것으로 나온다. 이 문제를 해결 할 유일한 방법은 이미지를 사이트에 복사하는 것이다. 이것은 간단한 임포트와는 전적으로 다르다.

따라서 외부 콘텐트를 가져오는 것은 콘텐트가 순수하게 텍스트 기반이여야만 이치에 맞는다. 예를들어 관리자를 위한 사이트가 있다고 해보자. 헤더, 풋터, 룩앤필을 갖추었을 것이다. 사이트의 한 페이지는 초기 README 파일을 설정하는 방법이 설명되어 있어 사용자들에게 이 사이트가 어떻게 사용되어야 하는지를 알려준다. 다음과 같이 FTP 사이트의 인스트럭션을 인용할 수 있다:

<c:import url="ftp://ftp.oreilly.com/pub/README.ftp" />

FTP 서버 콘텐트를 임포팅하는 것은 HTTP 콘텐트를 가져오는 것 처럼 쉽다. HTTPS에 대해 같은 명령어를 사용할 수 있고 본인 사이트와 목표 사이트가 이해하고 말할 수 있는 프로토콜을 사용할 수 있다.

 

JSTL을 사용하는 이유
JSP 태그 보다 JSTL을 사용하면 여러가지 큰 이득을 볼 수 있다. 우선 JSTL은 JSP 태그와는 분리된 스팩으로 정의되었다. 이는 JSP 스팩이 변하더라도 JSTL 태그가 일관될 수 있다는 것을 보장하는 것이다. JSP 컨테이너 변경에 영향을 받을 수 없는 애플리케이션은 JSTL 스팩에서 효과를 볼 수 있다. 둘째, JSTL 태그는 핵심 JSP 태그의 기능보다 훨씬 나은 기능을 제공한다. c:import는 다른 사이트에서 URL을 임포팅 할 수 있을 뿐만아니라 jsp:include 태그에서는 가능하지 않은 복잡한 콘텐트도 임포트 할 수 있다. 마지막으로 JSTL은 고유의 expression language(EL)을 제공한다. JSTL EL은 JSP 코드를 작성하는 데 있어 놀라운 유연성을 제공한다.


덧글

댓글 입력 영역


qwer