경험, 느낀 점

- 도입배경

: 업체에서 256개의 열의 엑셀을 떨어뜨려 달라고 함. (하드코딩으로는 도저히 관리가 안 될듯 함)


- 도입과정

1) https://github.com/millij/poi-object-mapper 주소를 참고

2) 스프링이 아닌 회사 자체 프레임워크를 기반으로 개발하고 있기 때문에 maven이 아닌 jar파일 다운로드

    (https://jar-download.com/artifact-search/poi-object-mapper)

3) 해당 jar파일 commit

4) 이슈사항 발생

4-1) 기존 poi 버전(3.10)과 poi-object-mapper의 poi버전(3.17) 충돌 발생

4-2) 기존 jar파일의 확장자를 jar_ 처리 후 3.17로 기존 엑셀다운로드 확인

-> But... 기존의 엑셀다운로드 기능이 3.17 버전에서는 오류 발생

-> 기존 거를 수정하기에는 공통단을 건드려야 하는 부분이라 공수가 상당히 큼

-> 여기서 라이브러리 사용은 포기....

5) 이왕 jar파일 다운 받아본 거 돌려보기라도 하자.!

6) 3.10 jar 확장자를 jar_ 처리

7) 3.17로 테스트 해보기.

8) Unsupported major.minor version 51.0 익셉션 발생 

9) 현재 모듈은 openJDK 1.6 으로 WAS 실행하고 있음. openJDK 1.8로 WAS설정 후 재기동 테스트

10) java.lang.ClassNotFoundException: org.dom4j.Namespace 익셉션 발생

11) dom4j.jar파일 commit

12) 정상동작 확인


- 출력소스


    		List people = new ArrayList<Person>();
    		people.add(new Person(20,"김똥개"));
    		people.add(new Person(25,"홍길동"));
    		people.add(new Person(29,"김철수"));
    		
    		String CHARSET = "UTF-8";
            
    		response.setContentType("application/vnd.ms-excel;charset="+CHARSET);
            
    		String userAgent = request.getHeader("User-Agent");

    		if (userAgent.indexOf("MSIE 5.5") > -1) 
    		{ // MS IE 5.5 이하
    			response.setHeader("Content-Disposition", "filename=" + URLEncoder.encode(fileName, "UTF-8") + ";");
    		}
    		else if (userAgent.indexOf("MSIE") > -1) 
    		{ // MS IE (보통은 6.x 이상 가정)
	    		response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8") + ";");
    		} 
    		else if (userAgent.indexOf("Trident") > -1) 
     		{ // MS IE 11
	    		fileName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20");
	    		response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
    		} 
    		else
    		{ // 모질라나 오페라
	    		response.setHeader("Content-Disposition", "attachment; filename=" + new String(fileName.getBytes(CHARSET), "latin1") + ";");
    		}

    		SpreadsheetWriter writer = new SpreadsheetWriter(response.getOutputStream());
    		
    		writer.addSheet(Person.class,people);
    		
    		out.clear();
    		out = pageContext.pushBody();
            
    		writer.write();

- 엑셀 출력 결과




- 결론

나중에 이 라이브러리를 사용하게 된다면, 스타일 세팅하는 부분 재확힌 해보기.

이제 WAS jdk 설정 / jar 설정 / 소스 수정한 거 모두 원상복구 해놓자...........................................ㅎㅎ;;

'경험, 느낀 점' 카테고리의 다른 글

개발/운영 설정파일 개념.  (0) 2019.01.31

개발/운영 설정파일은 따로 관리해서 원소스로 가는게 좋다.



1. was기동시 개발/운영서버에 D옵션을 각각 설정해준다.

2. 개발 : DSERVER.ID=DEV / 운영 : DSERVER.ID=REAL

3. .prop 파일에서는 D옵션으로 개발, 운영 구분하여서 각각의 설정파일을 다른 걸 바라보게 한다.

4. 개발소스에서는 .prop의 설정key를 물고 와서 개발/운영이 원소스로 돌아가도록 개발한다.!

+ Recent posts