)PersonVo 생성
)PersonListAction 생성 (person.xml의 데이터를 파싱할 액션) - 전부 jdom 패키지의 클래스를 사용해야 함.
package action;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import xml.vo.PersonVo;
/**
* Servlet implementation class PersonListAction
*/
@WebServlet("/person/list.do")
public class PersonListAction extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<PersonVo> p_list = new ArrayList<PersonVo>();
// XML Parser : SAXBulider
SAXBuilder builder = new SAXBuilder();
// web경로 -> 절대경로
String absPath = request.getServletContext().getRealPath("/");
File f = new File(absPath, "person.xml");
try {
// XML의 문서정보 읽어오기
Document doc = builder.build(f);
// XML내의 RootElement얻어오기
Element root = doc.getRootElement();
// root element밑의 자식 Element(person)
List<Element> person_list = root.getChildren("person");
// 데이터를 파싱하기 위한 개선루프
for(Element person : person_list) {
// person.xml에서 person element 하위에 name을 갖는 텍스트를 얻어오라는 뜻
String name = person.getChildText("name");
// 속성명에 대한 정보를 얻어올 때는 하위 태그에서 속성값을 불러오는 메서드를 활용해야 함
String nickname = person.getChild("name").getAttributeValue("nickname");
// 정수값은 변환(값이 안들어오더라도 넘어가기 위해 미리 0으로 초기화 해두기)
int age = 0;
try {
age = Integer.parseInt(person.getChildText("age"));
} catch (Exception e) {
e.printStackTrace();
}
String tel = person.getChildText("tel");
String homeTel = person.getChild("tel").getAttributeValue("hometel");
// 파싱된 데이터를 vo로 포장해서 list에 넣기
PersonVo vo = new PersonVo(name, nickname, age, tel, homeTel);
p_list.add(vo);
} // end:for
} catch (Exception e) {
e.printStackTrace();
}
// request binding
request.setAttribute("p_list", p_list);
// Dispatcher형식으로 호출
String forward_page = "person_list.jsp";
RequestDispatcher disp = request.getRequestDispatcher(forward_page);
disp.forward(request, response);
}
}
)person_list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<style type="text/css">
#box{
width: 800px;
margin: auto;
margin-top: 50px;
}
</style>
</head>
<body>
<div id="box">
<table class="table">
<tr class="success">
<th>순번</th>
<th>이름</th>
<th>별명</th>
<th>나이</th>
<th>휴대전화</th>
<th>집전화</th>
</tr>
<!-- for(PersonVo vo : p_list -->
<c:forEach var="vo" items="${ p_list }" varStatus="i">
<tr>
<td>${ i.count }</td>
<td>${ vo.name }</td>
<td>${ vo.nickName }</td>
<td>${ vo.age }</td>
<td>${ vo.tel }</td>
<td>${ vo.homeTel }</td>
</tr>
</c:forEach>
</table>
</div>
</body>
</html>
완성
'xml' 카테고리의 다른 글
xml - 예제(지역) (0) | 2024.07.09 |
---|---|
xml - 네이버API활용 예제(책) (0) | 2024.07.08 |
xml -네이버API활용 예제(쇼핑) (0) | 2024.07.08 |
네이버 API 어플리케이션 등록/postman download (0) | 2024.07.08 |
xmlTest/jdom 설치 환경 (0) | 2024.07.08 |