2007. 5. 23. 18:52
A&J프로젝트
Rss.java = 엘리먼트와 애트리뷰트들 정의, 리스트 정의
Item.java = item리스트에서 쓰일 엘리먼트 정의
RssTest.java = 실제 파싱
rss.jsp = 파싱하여 페이지에 보여준다.
컨솔창이 아닌 페이지에서도 보이는 연습을 했다.
jsp파일을 뺀 자바파일로 돌리는 결과부터 보면,,,
jupid.xml은 나의 블로그에서 rss2.0으로 뽑은 것을 xml로 저장시켜둔 것이다.
큰 엘리먼트들은 Rss.java에서 정의하고 리스트로 뽑아올 것들은 Item.java로 정의하였다.
RssTest.java
에서는 RssTest 객체를 만들고
digester를 만들엇다.
dig.setRules(new ExtendedBaseRules()); 왜 있는지 모르겠다 빼도 상관없다.
rss/channel 경로로 클래스를 만들고 빈들을 만들어 저장한다.
마찬가지로 rss/channel/item 경로로 클래스 생성후 빈 저장
단, item은 반복되기때문에 dig.addSetNext("rss/channel/item","addItem"); 한줄 추가
1-1에서 적었듯이 for문 같다..반복할때 쓰인다.
1-1은 파일을 읽었다. 1-2는 rss url을 받아서 해당사이트를 읽어온다.
Rss rss = null;
try{
URL url = new URL(rssUrl);
rss = (Rss) dig.parse(url);
}catch(Exception e){
e.printStackTrace();
}
return rss;
이부분으로 인해 url을 파싱한다. 1-1은 (url)부분이 (file)이었다.
jsp에서는 rss객체와 itme객체를 뽑아서 테이블에 등록한다.
rss.jsp
<%
Rss rss = RssTest.getRss("http://jupid.tistory.com/rss");
List itemList = rss.getItems();
%>
<html>
<title><%=rss.getTitle()%></title> //제목을 찍는다.제목은 rss객체에 있는 타이틀이다.
<body>
<table border=1>
<tr>
<td>순위</td> //여기의 제목은 item의 title이다.
<td>제목</td>
<td>작성자</td>
<td>작성시간</td>
</tr>
<% int i = 1;
if(itemList != null){ //itemList가 널이 아니라면 itemList의 뿌려진 수만큼 반복해서 목록을 가져온다.
for(Iterator iter = itemList.iterator();iter.hasNext();i++){
Item item = (Item)iter.next();
%>
<tr>
<td align=center><%=i%></td>
<td><a href = '<%=item.getLink()%>'><%=item.getTitle() %></a></td>
<td><%=item.getAuthor() %></td>
<td><%=item.getPubDate() %></td>
</tr>
<% }
}
%>
</table>