난이도 : 초급 |
Author, O'Reilly and Associates
2003년 6월 17일
2003년 8월 18일 수정
표면상으로는, JSTL의 c:import 태그는 JSP의 include 메커니즘을 모방한 것처럼 보인다. 하지만 c:import (또는 모든 JSTL 태그)를 좀더 자세히 들여다보면 추가적인 기능들이 보일 것이다.
jsp:include
와 마찬가지로 c:import
는 매개변수들을 사용하여 주변 웹 사이트에서 콘텐트를 지능적으로 옮긴다. 하지만 include 지시문과는 달리, c:import
는 로컬 파일로의 접근에 대한 제한이 없다.
뭔가 빠진 것 같습니까?
JSP best practices 시리즈를 처음부터 읽지 않았다면 이 글의 내용을 따라가기 쉽지 않을 것이다. 대부분의 best practices 기술자료는 연결되어 있으며 대부분의 예제들도 처음부터 지금까지 계속 진화해왔다. JSP best practices 시리즈 리스트에 시간을 내어 참조하기 바란다. |
JSTL 변환
JSTL로 JSP 페이지 업데이트" 말미에 jsp:include
가 아닌 c:import
를 사용하기 위하여 웹 사이트 메인페이지를 변환했다. 요청 데이터를 전달하는 매개변수를 포함하고 있었기 때문에 헤더 파일 inclusion 코드 변경은 피했어야 했다. (Listing 1):
|
매개변수 태그 변환하기
jsp:include
가 아닌 c:import
를 사용하기 위해 전체 인덱스를 변환할 때 우리가 해야 할 마지막 일은 남아있는 매개변수를 전달하는 jsp:include
엘리먼트를 가져와서 이것의 작동을 c:import
태그로 에뮬레이팅 하는 것이다. Listing 2 처럼, 우리가 해야 할 일은 jsp:param
과 c:param
을 바꾸는 것이다. 왜냐하면 c:param
은 JSP의 그것과 같은 기능을 하기 때문이다.
Listing 2는 JSTL에서 완전히 변환된 Listing 1의 인덱스 파일이다:
Listing 2. JSTL의 완전한 변환
|
JSP 페이지에서 매개변수를 전달하는 것에 대해 좀더 알고 싶다면 "Combine JavaBeans components and JSP technology"를 참조하기 바란다. c:param
과 jsp:param
은 거의 동일하게 작동한다는 것을 기억하면 된다. 이제 c:import
의 창조적인 활용법을 알아보자.
외부 콘텐트 가져오기
c:import
를 사용할 때의 이점 중 하나는 외부 웹 사이트나 웹 애플리케이션에서 콘텐트를 가져올 수 있다는 것이다. jsp:include
에 대해 배울 때를 회상해보면 file
애트리뷰트를 사용하여 포함시킬 정적 콘텐트를 지정했다는 것을 알 수 있을 것이다. file
애트리뷰트는 이름이 포함하고 있는 것을 수행한다: 로컬 파일의 콘텐트를 가져올 수 있다. c:import
에 대한 상응 애트리뷰트는 url
이고 이것 역시 이름이 내포하는 대로 수행한다: 모든 URL을 가져올 수 있다. 로컬 파일에서 콘텐트와 함께 사이트 페이지를 파퓰레이팅 하는 대신, c:import
는 모든 URL에서 콘텐트를 가져올 수 있다.
간단한 예제를 들어보겠다. 마다가스카르 로즈우드 기타 그림을 내 웹 사이트로 가져오고 싶다고 하자. 이미지 파일과 관련 링크로 이루어진 페이지를 구현할 수 있지만 다른 사이트에서 콘텐트를 가져오는 방법이 더 쉽다. 그런다음 자신의 사이트 룩앤필에 맞추는 것이다. (Listing 3) :
Listing 3. 외부 콘텐트 가져오기
|
이 코드는 훌륭해 보이지만 곧바로 문제가 발견된다. 어떤 이미지도 나타나지 않으며 관련 링크도 실패한다. 물론 원인도 분명하다. 외부 리소스가 인터프리팅되기 때문에 인터프리팅이 아웃풋 스트림에 직접 삽입되었다는 결과를 얻는다. /images/guitar-01-24.jpg
같은 외부 이미지 링크는 없어진 것으로 나온다. 이 문제를 해결 할 유일한 방법은 이미지를 사이트에 복사하는 것이다. 이것은 간단한 임포트와는 전적으로 다르다.
따라서 외부 콘텐트를 가져오는 것은 콘텐트가 순수하게 텍스트 기반이여야만 이치에 맞는다. 예를들어 관리자를 위한 사이트가 있다고 해보자. 헤더, 풋터, 룩앤필을 갖추었을 것이다. 사이트의 한 페이지는 초기 README
파일을 설정하는 방법이 설명되어 있어 사용자들에게 이 사이트가 어떻게 사용되어야 하는지를 알려준다. 다음과 같이 FTP 사이트의 인스트럭션을 인용할 수 있다:
|
FTP 서버 콘텐트를 임포팅하는 것은 HTTP 콘텐트를 가져오는 것 처럼 쉽다. HTTPS에 대해 같은 명령어를 사용할 수 있고 본인 사이트와 목표 사이트가 이해하고 말할 수 있는 프로토콜을 사용할 수 있다.
JSTL Part 1, "The expression language" (2003년 2월) |
JSTL을 사용하는 이유
JSP 태그 보다 JSTL을 사용하면 여러가지 큰 이득을 볼 수 있다. 우선 JSTL은 JSP 태그와는 분리된 스팩으로 정의되었다. 이는 JSP 스팩이 변하더라도 JSTL 태그가 일관될 수 있다는 것을 보장하는 것이다. JSP 컨테이너 변경에 영향을 받을 수 없는 애플리케이션은 JSTL 스팩에서 효과를 볼 수 있다. 둘째, JSTL 태그는 핵심 JSP 태그의 기능보다 훨씬 나은 기능을 제공한다. c:import
는 다른 사이트에서 URL을 임포팅 할 수 있을 뿐만아니라 jsp:include
태그에서는 가능하지 않은 복잡한 콘텐트도 임포트 할 수 있다. 마지막으로 JSTL은 고유의 expression language(EL)을 제공한다. JSTL EL은 JSP 코드를 작성하는 데 있어 놀라운 유연성을 제공한다.