jdom을 이용한 xml 문서의 데이터 추출


1. dynamic web project 를 생성하고 web-inf -> lib 에 jdom.jar 라이브러리를 추가한다.

    jdom-1.1.zip (build folder)

2. WebContent에서 rss.jsp 파일을 생성한다.

3. DB에 책 정보를 저장하기 위한 테이블을 생성한다.

    create table feed(
         title varchar2(100),
         url varchar2(256),
         descript varchar2(2000)
    )

4. rss.jsp 에서 url 요청을 위한 폼을 만든다.

    <form method="post" action="search.jsp">
     <table align="center" width="500">
      <tr>
       <td width="500">
        RSS 주소 : <input type="text" name="url" size="45">
        <input type="submit" value="추가">    
       </td>
      </tr>  
     </table>
    </form> 

5. search.jsp 파일을 생성하고 jdom 을 이용하여 
    요청된 url에 대한 문서를 읽어온다.


    <%
         String url = request.getParameter("url");
         System.out.println("::::: url "+url);
 
         SAXBuilder builder = new SAXBuilder();
 
         Document doc = builder.build(new URL(url));
 
         Element rss = doc.getRootElement();
         Element channel = rss.getChild("channel");
         String title = channel.getChildText("title");
         String descript = channel.getChildText("description");
         System.out.println(":::::title " + title);
         System.out.println(":::::descript " + descript);
    %>

    (샘플 url http://www.yes24.com/_par_/Rss/KNU001001001.xml)

6. xml 파일로부터 읽어온 데이터를 jdbc를 이용하여 DB에 저장한다.
    (여기서는 시간상 jsp파일에 jdbc를 이용하여 바로 코딩을 했다.)

     Class.forName("oracle.jdbc.OracleDriver");
     Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
 
     String sql = "insert into feed values(?,?,?) ";
 
     PreparedStatement pstmt = con.prepareStatement(sql);
     pstmt.setString(1,title);
     pstmt.setString(2,url);
     pstmt.setString(3,descript);
 
     pstmt.executeUpdate();
 
     pstmt.close();
     con.close();

    *****url 추가후 바로 리스트 페이지로 이동하기 위해선 다음과 같이 코드를 추가한다.
    response.sendRedirect("rss.jsp");

7. rss.jsp를 실행해서    
    http://www.hani.co.kr/rss/ 의 주소를 추가하고 DB를 확인해 본다.

8. rss.jsp 아랫부분에 DB에 등록된 rss 채널 목록을 확인하여 표시해도록 코드를 작성한다.

 <table width="500" align="center" border="1">
  <tr>
   <th width="70">번호</th>
   <th width="430">&nbsp;&nbsp;제목</th>
  </tr>
  <%
   Class.forName("oracle.jdbc.OracleDriver");
   Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
   
   String sql = "select title, url, descript from feed ";
   
   PreparedStatement pstmt = con.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   
   int i = 0;
   while(rs.next()){
    String title = rs.getString("title");
    String url = rs.getString("url");
    String desc = rs.getString("descript");
  %>
   <tr>
    <td align="center"><%=i++ %></td>
    <td>
     &nbsp;&nbsp;
     <a href="view.jsp?url=<%=url %>" title="<%=desc %>"><%=title %></a>
    </td>
   </tr>   
  <%  
   }
   rs.close();
   pstmt.close();
   con.close();
  %>
 </table>

9. view.jsp를 만들어서 채널 선택시 실제 xml 파일에 들어있는 정보를 표시하도록 한다.
    
    요청된 url로 부터 데이터를 얻어와 리스트에 저장한다.
    <%
         String url = request.getParameter("url");

         SAXBuilder builder = new SAXBuilder();
         Document doc = builder.build(new URL(url));
         Element rss = doc.getRootElement();
         Element channel = rss.getChild("channel");
 
         List<Element> items = channel.getChildren("item");
     %>

    리스트에 저장된 데이터를 화면에 그려준다.
    <%
         for(Element item : items){
          String title = item.getChildText("title");
          String link = item.getChildText("link");
     %>
         <li><a href="<%=link %>"><%=title %></a></li>
     <% 
         }
      %>

rss.jspsearch.jspview.jsp


**********rss 예제 샘플
rss.ziprsss.txt
압축 해제후
폴더를 workspace 에 옮긴후 프로젝트를 임포트 하고
텍스트 파일에 있는 형식으로 디비와 시퀀스를 생성한다.
이 샘플은 ibatis 와 struts를 이용해서 제작되었다.

by 자연 | 2009/05/01 17:17 | JAVA | 트랙백 | 덧글(0)
strutsModule 실습
1. 다이나믹 웹 프로젝트를 만들고 사용되는 라이브러리들을 추가한다.

2. 각각의 모듈에 맞게 XXX-config.xml 파일을 추가한다..

    blog-config.xml
    cafe-config.xml
    news-config.xml
    struts-config.xml

4. web.xml 에서 서블릿 매핑을 추가한다.

5. WebContent에 각각의 폴더를 추가하고 index.jsp를 작성하낟.

        blog, cafe, news, ..

6. 각각의 XXX-config.xml 파일에 액션 매핑을 추가한다.

     <action-mappings>
          <action path="/index" forward="/index.jsp"/>
     </action-mappings>

7. src 에서 모듈을 위한 패키지와 클래스를 만들어 준다.

    kr.co.hanhot.blog.action    -> ListAction class
    kr.co.hanhot.cafe.action    -> InfoAction class

8. WebConponent 의 폴더에 액션과 연결시킬 jsp 파일을 만들어준다.

    cafe    -> info.jsp
    blog    -> list.jsp








by 자연 | 2009/04/23 19:13 | 트랙백 | 덧글(0)
게시판 답글 기능 추가
**현재 글에 대한 답글 작성 기능을 만들고 등록된 답글은 현재글 아래에 표시되도록 한다.

1. view.jsp에 답글 버튼에 글쓰기 액션의 링크를 추가시킨다.
   몇번 글에대한 답글인지 확인하기 위해 파라미터로 글번호를 넘겨준다.

    <a href="write.do?no=${board.no }&page=${param.page }">

2. write.jsp에서 pno 와 page 파라미터의 유무를 확인하고 새글인지 답글인지를 확인한후
    form 의 액션에서 파라미터를 지정한다.

<c:choose>
 <c:when test="${empty param.pno}">
  <form name="fff" method="post" action="add.do" enctype="multipart/form-data"> 
 </c:when>
 <c:otherwise>
  <form name="fff" method="post" action="add.do?pno=${param.no }&page=${param.page }" enctype="multipart/form-data"> 
 </c:otherwise>
</c:choose>

3. addAction 클래스에서 리퀘스트로 파라미터가 넘어왔는지 확인하고
    파라미터가 있으면 답글 없으면 새글로 처리한다.
  
  //시퀀스 얻기
  int seq = dao.getSeq();
  
  String tempPno = request.getParameter("pno");
  
  if(tempPno == null){
   //새글
   vo.setNo(seq);
   vo.setGroupNo(seq);
   
  }else{
   //답글
   vo.setNo(seq);
   vo.setGroupNo(Integer.parseInt(tempPno));
  }

4. list.jsp 에서 글번호와 그룹번호가 다르다면 답글이므로 앞에 답글을 의미하는 이미지를 추가한다.

        <c:if test="${board.no ne board.groupNo}">
          <img src="img/board_re.gif" border="0" >
        </c:if>




by 자연 | 2009/04/23 17:56 | JAVA | 트랙백 | 덧글(1)


<< 이전 페이지 다음 페이지 >>