note

AbstractExcelView 클래스를 이용한 엑셀 다운로드 구현 본문

JSP/Spring

AbstractExcelView 클래스를 이용한 엑셀 다운로드 구현

투한 2012. 4. 3. 23:22















주소 입력


파일 저장 및 열기


나오는 내용













dispatcherNonHtml-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<!-- 파일 다운로드 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" />
	<bean id="downloadController" class="madvirus.spring.chap07.controller.DownloadController" />
	<bean id="download" class="madvirus.spring.chap07.view.DownloadView" />
	
	
	<!-- 엑셀 다운로드 -->
	<bean id="pageRanksController" class="madvirus.spring.chap07.controller.PageRanksController" />
	<bean id="pageRanks" class="madvirus.spring.chap07.view.PageRanksView" />
	
</beans>




PageRanksView
package madvirus.spring.chap07.view;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import madvirus.spring.chap07.controller.PageRank;

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;

public class PageRanksView extends AbstractExcelView {

	@SuppressWarnings("unchecked")
	@Override
	protected void buildExcelDocument(Map<String, Object> model,
			HSSFWorkbook workbook, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		HSSFSheet sheet = createFirstSheet(workbook);
		createColumnLabel(sheet);

		List<PageRank> pageRanks = (List<PageRank>) model.get("pageRanks");
		int rowNum = 1;
		for (PageRank rank : pageRanks) {
			createPageRankRow(sheet, rank, rowNum++);
		}
	}

	private HSSFSheet createFirstSheet(HSSFWorkbook workbook) {
		HSSFSheet sheet = workbook.createSheet();
		workbook.setSheetName(0, "페이지 순위");
		sheet.setColumnWidth(1, 256 * 20);
		return sheet;
	}

	private void createColumnLabel(HSSFSheet sheet) {
		HSSFRow firstRow = sheet.createRow(0);
		HSSFCell cell = firstRow.createCell(0);
		cell.setCellValue("순위");

		cell = firstRow.createCell(1);
		cell.setCellValue("페이지");
	}

	private void createPageRankRow(HSSFSheet sheet, PageRank rank, int rowNum) {
		HSSFRow row = sheet.createRow(rowNum);
		HSSFCell cell = row.createCell(0);
		cell.setCellValue(rank.getRank());

		cell = row.createCell(1);
		cell.setCellValue(rank.getPage());

	}

}



@SuppressWarnings
완벽한 문법임에도 노란색 줄이 간다(@SuppressWarnings("unchecked")를 안넣었을 경우)
코드에 영향은 없다

@Override가 있고 없고의 차이와 비슷
 

데이터를 받고 creaColumnLabel-> 엑셀을 만드는 역할
그래서 순위와 페이지가 만들어지고

List<PageRank> pageRanks = (List<PageRank>) model.get("pageRanks");

pageRanks에서 데이터를 읽어와

createPageRankRow가 데이터를 처리 





PageRank
package madvirus.spring.chap07.controller;

public class PageRank {

	private int rank;
	private String page;
	
	public PageRank() {
	}
	
	public PageRank(int rank, String page) {
		this.rank = rank;
		this.page = page;
	}
	
	public int getRank() {
		return rank;
	}
	public String getPage() {
		return page;
	}
	
}




PageRanksController
package madvirus.spring.chap07.controller;

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 PageRanksController {

	@RequestMapping("/pageRanks")
	public ModelAndView handleRequestInternal(){

		List<PageRank> pageRanks = new ArrayList<PageRank>();
		pageRanks.add(new PageRank(1,"/bbs/mir2/list"));
		pageRanks.add(new PageRank(2,"/bbs/mir3/list"));
		pageRanks.add(new PageRank(3,"/bbs/changchun2/list"));

		return new ModelAndView("pageRanks","pageRanks",pageRanks);
		
	}
}


데이터를 ArrayList에 만들어 낸다

ModelAndView 로 만들어 지고

BeanNameViewResolver가 낚아 챈다(xml)













'JSP > Spring' 카테고리의 다른 글

Spring 어노테이션(Annotation) 정리  (0) 2012.03.27
Spring DB 연동 회원가입 Mybatis  (5) 2012.03.26
스프링에 대한 글  (0) 2012.03.25
Spring DB 연동 회원가입 JdbcTemplate  (0) 2012.03.08
Spring Tiles 레이아웃  (0) 2012.03.07