반응형
처음에 RSS(RDF Site Summary)란, 그 이름대로, 사이트의 samary 정보를 전달하기 위한 데이터 기술 포맷입니다.여러분들도 여러 사이트에서 ′RSS′라고 써졌다고 하는 아이콘을 보시게 될 겁니다.이것은 그 사이트에서 RSS 정보를 전송하고 있다는 것을 나타내는 것입니다.최근 유행하는 블로그에서는 표준으로 RSS에 대응하는 것도 많아졌기 때문에 알게 모르게 RSS를 이용하고 있었다고 하는 분도 많을지도 모릅니다.RSS를 이용함으로써 최종사용자는 자신이 관심을 가진 사이트를 일일이 순회할 필요가 없습니다.RSS리더로 불리는 전용 클라이언트 애플리케이션에 RSS 전달원을 등록해 두기만 하면 됩니다.그러면 RSS 리더가 미리 설정한 간격으로 각각의 사이트에서 RSS 문서(′RSS 피드′라고도 합니다)를 받아오기 때문에 사용자는 그 수집 결과를 한눈에 확인할 수 있습니다.또, RSS에 의해서 혜택을 받는 것은 이러한 최종 사용자 뿐만이 아닙니다.내가 독자적으로 사이트를 개설하고 있는 분이라면, 내 사이트에 관련된 사이트가 제공하는 RSS피드를 Import를 해도 좋을 것 같습니다.예를 들어, 자사이트에서 IT관계의 화제를 취급하고 있다면 @IT나 (자화자찬입니다만) 저자 사이트 「서버사이드 기술의 학습처 WINGS」가 제공하는 RSS 피드를 넣어 두면, 항상 최신의 공개 기사를 자사이트에서 소개할 수 있습니다.본 글에서는 이렇게 웹사이트 상에서 이용 가능한 RSS 리더를 소개합니다.출력 레이아웃은 템플릿에서 지정할 수 있기 때문에 사이트 디자인에 따라 간단하게 외형을 커스터마이즈 할 수 있는 것이 특징입니다.필요한 환경 본고로 소개하는 폴더 시스템은, JSP2.0&서블릿 2.4 환경에서 동작하는 커스텀 태그입니다.이용하는데 있어서는, 이하의 소프트웨어가 최저한 필요하게 됩니다.이것들 소프트웨어의 인스톨 방법에 대해서는, 저자 사이트 「서버 사이드 기술의 학습사」에서 「서버 사이드 환경 구축 설정」을 참조해 주세요.J2SE 5 . 0 _ 02
JSP&서블릿 컨테이너(Tomcat 5.5.7에서 확인 완료)
Rss4J샘플코드는 .war형식으로 제공하고 있습니다.기사 상단 링크에서 다운로드 할 수 있는 ′CZ_RssReader.war′ 를 ′%CATALINA_HOME%/webapps′ 폴더 하에 배치하고 컨테이너를 재시작하여 자동으로 전개됩니다.또 샘플 폴더′/CZ_RssReader′배 밑에는 커스텀 태그를 실제로 시험하기 위한 ′sample.jsp′이 포함되어 있기 때문에, 이하의 URL에서 실행하고, 코드가 정상으로 동작하고 있음을 확인하세요.http://localhost:8080/CZ_RssReader/sample.jspRss4J는 다운로드 파일에 이미 포함되어 있으므로 샘플을 그대로 이용할 경우에는 다시 설치할 필요가 없습니다.파일 구조에서 설명한 것처럼 본 글에서 소개하는 Rss Reader는 JSP2.0 & 서블릿 2.4 환경에서 동작하는 커스텀 태그입니다.먼저 다운로드 파일 내 파일구조를 보여줍니다(적자 파일은 다른 응용 프로그램에서 이용할 때 필요한 파일임을 나타냅니다). 요소의 이용방법 커스텀 태그 요소에서 이용 가능한 속성은 다음과 같습니다.또, 각각의 템플릿(Fragment) 내에서는, 이하의 페이지 속성을 이용 가능합니다.페이지 속성은 ${속성이름} 형태로 참조하실 수 있습니다.이상을 바탕으로 구체적인 JSP페이지의 기술 예를 보도록 하겠습니다.「 sample . jsp 」
< % @ page contentType = ′ text / html ; charset = Windows - 31J ′ % >
< % @ taglib prefix = ′ cz ′
uri = ′ http://www.wings.msn.to/CodeZineTagLibs-1.0 ′ % >
< cz : RssReader url = ′ http://www.wings.msn.to/redirect.php/-/A-12/ ′ >
< jsp : attribute name = ′ header ′ >
< table bordercolor = ′ # 000000 ′ cellspacing = ′ 1 ′
bordercolordark = ′ # ffffff ′ cellpadding = ′ 5 ′
bordercolorlight = ′ # 000000 ′ border = ′ 1 ′ >
< tr >
< td bgcolor = ′ # FFffEE ′ >
< h2 > $ { channel _ title } < / h2 >
< ol >
< / jsp : attribute >
< jsp : attribute name = ′ body ′ >
$ { title } < / a >
< / jsp : attribute >
< jsp : attribute name = ′ footer ′ >
< / td >
< / tr >
< / table >
< / jsp : attribute >
포인트가 되는 것은, 이하의 2점입니다.@taglib 디렉티브에서 태그 라이브러리를 등록하다
커스텀 태그를 이용하는 경우에는, 미리 @taglib 디렉티브로 태그 라이브러리의 등록을 실시할 필요가 있습니다.이 때 uri속성의 값은 고정이지만 prefix속성은 자유롭게 정하실 수 있습니다.다만, prefix 속성은 코드중의 요소 프레픽스(의 부분)와 대응 관계에 있을 필요가 있기 때문에, 주의해 주세요.
fragment는요소로 기술한다
요소에서는 fragment를 이용하여 헤더, 본체, futter라고 하는 3개의 템플릿을 JSP 페이지에서 지정할 수 있도록 하고 있습니다.fragment에 템플릿을 인도하려면 ,요소 하에요소를 기술합니다. 요소의 일반적인 구문은 다음과 같습니다. 템플릿 본체 태그 핸들러 클래스 RssReader Tag의 골격 요소의 사용법을 이해한 마당에 요소의 거동을 정의하는 태그 핸들러 클래스 RssReader Tag의 내용물을 들여다봅시다.우선 태그 핸들러 클래스의 기본 골격을 이해합니다.「 RssReaderTag . java 」 ( 抜粋 )
public class RssReaderTag extends SimpleTagSupport {
private String url ;
private JspFragment header ;
private JspFragment body ;
private JspFragment footer ;
public void doTag ( ) throws JspException , IOException {
...중략...
}
public void setUrl ( String url ) { this . url = url ; }
public void setHeader ( JspFragment header ) { this . header = header ; }
public void setBody ( JspFragment body ) { this . body = body ; }
public void setFooter ( JspFragment footer ) { this . footer = footer ; }
}태그 핸들러 클래스에서 최소한 필요한 포인트는 이하의 3가지입니다.Simple Tag Support 클래스를 상속하다
Simple Tag Support 클래스는 커스텀 태그의 기본 기능을 제공하는 클래스입니다.태그 핸들러 클래스를 정의하려면 Simple Tag Support 클래스를 상속받고 이에 대해 필요한 로직을 추가해야 합니다.덧붙여 정의하는 태그의 종류에 따라서는, Simple Tag Support 클래스 대신에, Tag Support, Body Tag Support 클래스를 이용하는 경우도 있습니다.
태그의 처리를 규정하는 것은 doTag 메서드의 역할
Simple Tag Support 파생클래스에서 태그의 거동을 규정하는 것은 doTag 메서드의 역할입니다.doTag 메서드에 필요한 일련의 처리를 기술합니다.
속성은 악세사리 메서드로 정의한다
JSP 페이지에서 설정 가능한 속성은, 악세사리 메서드로 정의해 둘 필요가 있습니다.여기서는 url, header, body, footer라고 하는 4가지 속성을 공개하고 싶기 때문에 각각 대응하는 setUrl, setHeader, setBody, setFooter 메서드를 정의하고 있습니다.덧붙여 태그 핸들러 클래스를 이용하는 경우에는, 디플로이먼트 디스크 리프터(web.xml), 태그 라이브러리 디스크 리프터(my Tag.tld)에 적절한 설정을 실시해 둘 필요가 있습니다.본고에서는 생략합니다만, 자세한 것은 다운로드 파일에 포함되는 해당의 파일을 참조해 주세요.Rss4J를 통한 RSS 피드 읽기 태그 핸들러 클래스의 골격을 이해한 상태에서 doTag 메서드의 내용, url 속성으로 지정된 RSS 피드를 읽고 지정된 템플릿을 바탕으로 출력하기 위한 로직을 개관 해보도록 하겠습니다.다음은 doTag 메서드의 내용입니다.PageContext 페이지Context=(PageContext)this.getJspContext();
URL rss=새 URL(this.url);
RSS 문서 문서 문서=문서;
{}을(를) 시도하다
doc = RssParser.parseRss(rss.openConnection().getInputStream();
} 캐치(RssParseExceptione) {
e.인쇄 스택 트레이스();
} catch(IOException e) {
e.인쇄 스택 트레이스();
}
열거 objEnm=doc.channel();
when(objEnm에 추가 요소()가 있음){
RssChannel=(RssChannel)objEnm.nextElement();
페이지 컨텍스트를 누릅니다.속성을 설정합니다(′channel_title′,
channel.getChannelTitle();
머리말.호출(호출);
열거 항목 = channel.vmd;
when(항목에 추가 요소()가 있음){
RssChannelItem=(RssChannelItem) 항목.nextElement();
페이지 컨텍스트를 누릅니다.특성(′title′,item.getItem) 설정제목();
페이지 컨텍스트를 누릅니다.특성(′link′,item.getItemLink())을 설정합니다.
페이지 컨텍스트를 누릅니다.특성 설정(′description′),
항목.getItemDescription();
몸매.호출(호출);
}
바닥글.호출(호출);
}rss4jの中核を担うのはrssparserクラスです。rssparser#parserssメソッドに対して、rssフィードを表す入力ストリームを引き渡すことでrssフィードが解析され、解析済みのrss情報がrssdocumentオブジ都度にheaderテンプレートを、チャネル配下のアイテム情報を取り出す度にbodyテンプレートを、そして、アイテム情報を出力し終わった直後にfooterテンプレートを、それぞれ出力しています。まとめ以上、jsp&サーブjを使えばそれらの情報を簡単に取り出すことができるでしょう。참고자료 ChurchillObjects.com ′Rss4J′
JSP&서블릿 컨테이너(Tomcat 5.5.7에서 확인 완료)
Rss4J샘플코드는 .war형식으로 제공하고 있습니다.기사 상단 링크에서 다운로드 할 수 있는 ′CZ_RssReader.war′ 를 ′%CATALINA_HOME%/webapps′ 폴더 하에 배치하고 컨테이너를 재시작하여 자동으로 전개됩니다.또 샘플 폴더′/CZ_RssReader′배 밑에는 커스텀 태그를 실제로 시험하기 위한 ′sample.jsp′이 포함되어 있기 때문에, 이하의 URL에서 실행하고, 코드가 정상으로 동작하고 있음을 확인하세요.http://localhost:8080/CZ_RssReader/sample.jspRss4J는 다운로드 파일에 이미 포함되어 있으므로 샘플을 그대로 이용할 경우에는 다시 설치할 필요가 없습니다.파일 구조에서 설명한 것처럼 본 글에서 소개하는 Rss Reader는 JSP2.0 & 서블릿 2.4 환경에서 동작하는 커스텀 태그입니다.먼저 다운로드 파일 내 파일구조를 보여줍니다(적자 파일은 다른 응용 프로그램에서 이용할 때 필요한 파일임을 나타냅니다).
< % @ page contentType = ′ text / html ; charset = Windows - 31J ′ % >
< % @ taglib prefix = ′ cz ′
uri = ′ http://www.wings.msn.to/CodeZineTagLibs-1.0 ′ % >
< cz : RssReader url = ′ http://www.wings.msn.to/redirect.php/-/A-12/ ′ >
< jsp : attribute name = ′ header ′ >
< table bordercolor = ′ # 000000 ′ cellspacing = ′ 1 ′
bordercolordark = ′ # ffffff ′ cellpadding = ′ 5 ′
bordercolorlight = ′ # 000000 ′ border = ′ 1 ′ >
< tr >
< td bgcolor = ′ # FFffEE ′ >
< h2 > $ { channel _ title } < / h2 >
< ol >
< / jsp : attribute >
< jsp : attribute name = ′ body ′ >
< / jsp : attribute >
< jsp : attribute name = ′ footer ′ >
< / td >
< / tr >
< / table >
< / jsp : attribute >
포인트가 되는 것은, 이하의 2점입니다.@taglib 디렉티브에서 태그 라이브러리를 등록하다
커스텀 태그를 이용하는 경우에는, 미리 @taglib 디렉티브로 태그 라이브러리의 등록을 실시할 필요가 있습니다.이 때 uri속성의 값은 고정이지만 prefix속성은 자유롭게 정하실 수 있습니다.다만, prefix 속성은 코드중의 요소 프레픽스(
fragment는
public class RssReaderTag extends SimpleTagSupport {
private String url ;
private JspFragment header ;
private JspFragment body ;
private JspFragment footer ;
public void doTag ( ) throws JspException , IOException {
...중략...
}
public void setUrl ( String url ) { this . url = url ; }
public void setHeader ( JspFragment header ) { this . header = header ; }
public void setBody ( JspFragment body ) { this . body = body ; }
public void setFooter ( JspFragment footer ) { this . footer = footer ; }
}태그 핸들러 클래스에서 최소한 필요한 포인트는 이하의 3가지입니다.Simple Tag Support 클래스를 상속하다
Simple Tag Support 클래스는 커스텀 태그의 기본 기능을 제공하는 클래스입니다.태그 핸들러 클래스를 정의하려면 Simple Tag Support 클래스를 상속받고 이에 대해 필요한 로직을 추가해야 합니다.덧붙여 정의하는 태그의 종류에 따라서는, Simple Tag Support 클래스 대신에, Tag Support, Body Tag Support 클래스를 이용하는 경우도 있습니다.
태그의 처리를 규정하는 것은 doTag 메서드의 역할
Simple Tag Support 파생클래스에서 태그의 거동을 규정하는 것은 doTag 메서드의 역할입니다.doTag 메서드에 필요한 일련의 처리를 기술합니다.
속성은 악세사리 메서드로 정의한다
JSP 페이지에서 설정 가능한 속성은, 악세사리 메서드로 정의해 둘 필요가 있습니다.여기서는 url, header, body, footer라고 하는 4가지 속성을 공개하고 싶기 때문에 각각 대응하는 setUrl, setHeader, setBody, setFooter 메서드를 정의하고 있습니다.덧붙여 태그 핸들러 클래스를 이용하는 경우에는, 디플로이먼트 디스크 리프터(web.xml), 태그 라이브러리 디스크 리프터(my Tag.tld)에 적절한 설정을 실시해 둘 필요가 있습니다.본고에서는 생략합니다만, 자세한 것은 다운로드 파일에 포함되는 해당의 파일을 참조해 주세요.Rss4J를 통한 RSS 피드 읽기 태그 핸들러 클래스의 골격을 이해한 상태에서 doTag 메서드의 내용, url 속성으로 지정된 RSS 피드를 읽고 지정된 템플릿을 바탕으로 출력하기 위한 로직을 개관 해보도록 하겠습니다.다음은 doTag 메서드의 내용입니다.PageContext 페이지Context=(PageContext)this.getJspContext();
URL rss=새 URL(this.url);
RSS 문서 문서 문서=문서;
{}을(를) 시도하다
doc = RssParser.parseRss(rss.openConnection().getInputStream();
} 캐치(RssParseExceptione) {
e.인쇄 스택 트레이스();
} catch(IOException e) {
e.인쇄 스택 트레이스();
}
열거 objEnm=doc.channel();
when(objEnm에 추가 요소()가 있음){
RssChannel=(RssChannel)objEnm.nextElement();
페이지 컨텍스트를 누릅니다.속성을 설정합니다(′channel_title′,
channel.getChannelTitle();
머리말.호출(호출);
열거 항목 = channel.vmd;
when(항목에 추가 요소()가 있음){
RssChannelItem=(RssChannelItem) 항목.nextElement();
페이지 컨텍스트를 누릅니다.특성(′title′,item.getItem) 설정제목();
페이지 컨텍스트를 누릅니다.특성(′link′,item.getItemLink())을 설정합니다.
페이지 컨텍스트를 누릅니다.특성 설정(′description′),
항목.getItemDescription();
몸매.호출(호출);
}
바닥글.호출(호출);
}rss4jの中核を担うのはrssparserクラスです。rssparser#parserssメソッドに対して、rssフィードを表す入力ストリームを引き渡すことでrssフィードが解析され、解析済みのrss情報がrssdocumentオブジ都度にheaderテンプレートを、チャネル配下のアイテム情報を取り出す度にbodyテンプレートを、そして、アイテム情報を出力し終わった直後にfooterテンプレートを、それぞれ出力しています。まとめ以上、jsp&サーブjを使えばそれらの情報を簡単に取り出すことができるでしょう。참고자료 ChurchillObjects.com ′Rss4J′
반응형