[해야할 목록]
(0)pom.xml에 apache.poi 라이브러리 설치.
(1)InternalResourceViewResolver Bean 등록(servlet-context.xml)
(2)ViewResolver Bean 등록(servlet-context.xml)
(3)사용하고자 하는 빈 객체(Model) 생성 - PageRank.java
(4)Controller 생성
(5)Custom View 생성
(6)Custom View의 Bean 등록(servlet-context.xml)
(0)pom.xml에 apache.poi 라이브러리 설치.
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
(1)InternalResourceViewResolver Bean 등록(servlet-context.xml)
(2)ViewResolver Bean 등록(servlet-context.xml)
이때 충돌이 나면 오류가 발생하기 때문에 p:order로 우선순위를 정해준다.
p:order를 사용하기 위해서는 Namespaces에서 p를 체크해야 함을 잊지말자.
1
2
3
4
5
6
7
8
9
|
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="2">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!-- CustomView: BeannameViewResolver는 파일을 등록해놓으면 id로 찾아간다는 것. -->
<beans:bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver"
p:order="1" />
|
(3)사용하고자 하는 빈 객체(Model) 생성 - PageRank.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
package com.bitcampi.mvc0802;
public class PageRank {
private int rank;
private String page;
public PageRank() {
}
public PageRank(int rank, String page) {
super();
this.rank = rank;
this.page = page;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
@Override
public String toString() {
return "PageRank [rank=" + rank + ", page=" + page + "]";
}
}
|
(4)Controller 생성 [PageRankXlsController.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package com.bitcampi.mvc0802;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class PageRankXlsController {
@RequestMapping("/pageRanks/xls")
public ModelAndView getXlsPage() {
List<PageRank> pageRanks = new ArrayList<PageRank>();
//데이터는 여기서 넣어서 전송함
pageRanks.add(new PageRank(1, "www.naver.com"));
pageRanks.add(new PageRank(2, "www.daum.com"));
pageRanks.add(new PageRank(3, "www.nate.com"));
return new ModelAndView("pageRanks", "pageRanks", pageRanks);
}
}
|
(5)Custom View 생성
CustomView는 AbstractExcelView/AbstractXlsView를 상속해야한다는 것을 명심하자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package com.bitcampi.mvc0802;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
@SuppressWarnings("deprecation")
public class PageRanksXlsView extends AbstractExcelView {
@Override
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
//1. Sheet를 생성.
HSSFSheet sheet = createFirstSheet(workbook);
//2. 시트의 첫번째 행의 라벨 작성
createColumnLabel(sheet);
List<PageRank> pageRanks = (List<PageRank>)model.get("pageRanks");
//3. 데이터들을 넣을 행과 셀 생성
int rowNum = 1;
/*int rowNum += 1;*/
for(PageRank rank : pageRanks) {
createPageRankRow(sheet, rank, rowNum++);
}
}
// 데이터들을 넣을 행과 셀을 생성한 뒤, 데이터 넣기.
private void createPageRankRow(HSSFSheet sheet, PageRank rank, int rowNum) {
// rowNum 번째 줄 생성
HSSFRow row = sheet.createRow(rowNum);
// rowNum번째 줄의 첫번째 칸에 데이터 넣기
HSSFCell cell = row.createCell(0);
cell.setCellValue(rank.getRank());
//rowNum번째 줄의 두번째 칸에 데이터 넣기
cell = row.createCell(1);
cell.setCellValue(rank.getPage());
}
// 컬럼 라벨 생성(제목 지정)
private void createColumnLabel(HSSFSheet sheet) {
//첫번째 줄 생성
HSSFRow firstRow = sheet.createRow(0);
//첫번째 줄의 첫번째 칸 생성 및 이름지정
HSSFCell cell = firstRow.createCell(0);
cell.setCellValue("순위");
//첫번째 줄의 두번째 칸 생성 및 이름 지정
cell = firstRow.createCell(1);
cell.setCellValue("페이지 주소");
}
//Sheet를 만드는 메서드
private HSSFSheet createFirstSheet(HSSFWorkbook workbook) {
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, "포털 사이트 순위");
sheet.setColumnWidth(1, 256*20);
return sheet;
}
}
|
(6)servlet-context.xml에서 Custom View의 Bean 등록(servlet-context.xml)
1
2
|
<!-- xls 파일 넘기기 -->
<beans:bean id="pageRanks" class="com.bitcampi.mvc0802.PageRanksXlsView"/>
|
이때 bean의 id는 Controller에서 return 했던 ModelAndView의 첫번째 칸의 이름과 같게 해줘야 한다.
결과)
Excel 파일을 열어보면 다음 사진과 같다.
댓글 없음:
댓글 쓰기