Project9은 Spring 4 + MyBatis 3 + MariaDB (Maven) 기반으로 제작한 웹 프로젝트 템플릿이다.

소스는 Github에서 받을 수 있다.

데모는 여기에서 확인할 수 있다.

데모는 AWS 무료를 사용하는 관계로  1년(2017-09-17) 이후에는 접속이 안될 수 있고

작성한 데이터는 통보없이 삭제될 수 있다.

웹 개발시 많이 사용되는 다양한 기능들 미리 구현해 두고

복사해서 사용하기 위해 제작하였다.

많이 사용되는 회원관리(로그인, 로그아웃 포함), 부서관리 (조직도), 게시판 (설정), 무한 댓글 등의 기능을 미리 구현해 두었고,

프로젝트에 따라 필수적인 기능을 샘플로 구현해서

같이 작업하는 개발자들이 일관되고 빠르게 작업할 수 있게 하였다.

그리고, 유사 기능은 복사/붙여넣기를 하여 쉬운 개발을 하려고 준비하였다.

(만들고 보니 전자정부프레임과 비슷한 느낌이…)


주요 구현 기능은 다음과 같다.

  • 멀티 게시판 (무한 댓글, 좋아요 등)
  • 회원 기능: 모든 페이지는 회원만 접속 가능. 로그인/로그 아웃 기능. 회원관리 등
  • 보안 기능: 일반사용자(U)와 관리자(A)로 구분하여 일반 사용자는 관리자 페이지에 접근 불가.
  • 다국어 처리
  • 디자인: 부트스트랩기반 반응형 웹 적용 (SB-Admin)
  • 공통 에러 페이지 처리(404, 500)
  • 로그 처리(logback, log4jdbc)


준비된 샘플

  • 사용자 선택: 부서, 사용자 선택 기능 (팝업)
  • 날짜(DatePicker) 선택 및 챠트(morris) 사용법 샘플
  • 엑셀 다운로드(jXLS) 샘플


사용된 라이브러리와 구성은 다음 그림과 같다.


디렉토리 구조는 다음과 같다.

java 패키지는 gu 하위에 있으며

동일한 디렉토리 구조로 JSP 파일이 WEB-INF 하위의 jsp에 있다.

admin 디렉토리는 관리자 기능으로

게시판 생성과 부서(조직도), 사용자 관리 등을 가지고 있다.

board 디렉토리는 게시판 기능을 가지고 있다.

main 디렉토리는 메인 화면(index)과 샘플을 가지고 있다.

member 디렉토리는 로그인/아웃, 개인정보 수정등을 가지고 있다.

common 디렉토리는 공통 기능을 가진 디렉토리로

파일 업로드/다운로드(엑셀), 권한 관리등을 기능만 가지고 있다.

jsp의 common 디렉토리는 페이징 화면, 오류 페이지등

공통으로 사용되는 화면을 가지고 있다.

마지막으로 etc 디렉토리는 공통으로 사용되는 화면과 기능을 가진 디렉토리로

부서나 사용자 선택등을 가지고 있다.


resources의 message는 다국어 처리 파일을 가지고 있고

sql 디렉토리는 프로그램에서 사용되는 모든 Mybatis SQL문을 가지고 있다.


마지막으로 테이블 구성(ERD)는 다음과 같다.

AmaterasERD로 작성되었고

파일명이 project9.erd로 github에서 같이 배포되고 있다.

Logical mode

Physical mode

'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9 설치  (5) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

먼저 Eclipse를 이용하여 github에서 소스를 다운로드 받는다.

Eclipse를 이용하여 github에서 소스를 다운 받는 방법은 여기를 참고하면 된다.

github 소스 주소만 바꾸어서 사용하면 된다.


MariaDB에 데이터 베이스(project9)를 생성하고

소스와 같이 제공되는 tables.sql(테이블 정보), tableData.sql (샘플 데이터)를 실행하여 테이블과 데이터를 생성한다.

MariaDB 데이터 베이스 생성법


applicationContext.xml에 적절한 접속 정보를 입력한다.

톰캣이나 이클립스에서 project9를 실행

http://localhost:8080/project9/로 접속



관리자(admin/admin)로 로그인 하거나

일반 사용자로(user1/user1, user2/user2 ...) 로그인 하면 된다.


PC에서 보는 일반적인 화면


PC에서 보는 작은 화면 or 모바일에서 보는 화면




'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9  (8) 2016.09.18
데이터를 Excel 파일로 다운로드  (2) 2016.09.18

Java에서 데이터를 엑셀로 다운로드 하는 방법은 몇 가지 방법이 있다.

http://greatkim91.tistory.com/72

개인적으로 jXLS를 방법을 선호하는데

jXLS은 템플릿 방식으로 Java의 MVC를 그대로 활용할 수 있기 때문이다.

다만, 엑셀 2003(XLS) 파일만 지원되다 엑셀 2007(XLSX) 파일 지원은 뒤늦게 지원되어

관련 문서가 많지 않아 (못 찾은 것일 수도),

여기에 문서로 정리한다.

http://jxls.sourceforge.net/getting_started.html

https://github.com/svn2github/jxls-105/blob/master/jxls-examples/src/main/java/net/sf/jxls/sample/StressXlsxTest.java

http://senni.tistory.com/27

http://blog.naver.com/PostView.nhn?blogId=likerkawk&logNo=220260084312

이상의 문서를 참조해서 다음의 예제를 만들었다.

기본 개념들은 위 자료를 참고하길 바란다.


개인적으로 오랫동안 jXLS를 사용해 왔고 선호하는 이유는

Java의 MVC 개념을 적용하여 사용할 수 있기 때문이다.

Java의 MVC에서 V (view)는 JSP를 의미하는데

처리된 데이터를 적절하게 디자인하여 화면에 출력하게 된다.

jXLS를 사용하면 기존 코드(M과 C)를 그대로 활용하고

JSP 대신 엑셀 파일을 사용하여 처리한다.

JSP로 보여주나 Excel로 보여주나(다운로드)

같은 개념으로 보고 그림과 같이 View만 바꿔서 사용하는 것이다. 

예를 들어, 게시판 리스트를 작성한다고 하면

다음과 같이 컨트롤을 작성한다. (게시판 예제 참조)

@RequestMapping(value = "/boardList")
public String boardList(HttpServletRequest request, BoardSearchVO searchVO, ModelMap modelMap) {

        searchVO.pageCalculate( boardSvc.selectBoardCount(searchVO) );
        List<?> listview  = boardSvc.selectBoardList(searchVO);
       
        modelMap.addAttribute("searchVO", searchVO);
        modelMap.addAttribute("listview", listview);

        return "board/BoardList";
}


jXLS를 사용하여 다음과 같이 사용할 수 있다.

@RequestMapping(value = "/boardListExcel")
public void boardListExcel(HttpServletRequest request, HttpServletResponse response, BoardSearchVO searchVO) {

        List<?> listview  = boardSvc.selectBoardList(searchVO);
        Map<String , Object> beans = new HashMap<String , Object>();
        beans.put("listview" , listview );

        MakeExcel me = new MakeExcel();
        me.download(request, response, beans, me.get_Filename("project9"), "board.xlsx");
}

ModelMap으로 값을 JSP로 전달하는 대신

Map을 사용하고

board/BoardList(.jsp)파일을 반환하는 대신

board.xlsx라는 엑셀 템플릿을 지정한다.

이외에 엑셀은 모든 데이터를 받기 때문에

페이징 처리를 위한 개수(selectBoardCount) 계산을 하지 않는 차이가 있다.

JSP와 엑셀 모두 같은 서비스와 SQL을 사용하기 때문에

복잡한 별도 처리 없이 코드 재사용성을 높일 수 있다.

MakeExcel 클래스의 주요 코드는 다음과 같고

jXLS를 메소드 호출(download)만으로 사용하기 위해

미리 jXLS 사용 코드를 함수화 한 코드일 뿐이다.

download 메소드를 호출해서 사용하는 것만 알면 되므로

클래스에 대한 자세한 설명을 하지 않는다.

public void download(HttpServletRequest request, HttpServletResponse response, Map<String , Object> beans, String filename, String templateFile) {
        String tempPath = request.getSession().getServletContext().getRealPath("/WEB-INF/templete") ;
       
        try {
            InputStream is = new BufferedInputStream(new FileInputStream(tempPath + "\\" + templateFile));
            XLSTransformer transformer = new XLSTransformer();
            Workbook resultWorkbook = transformer.transformXLS(is, beans);
            response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + ".xlsx\"");
            OutputStream os = response.getOutputStream();
            resultWorkbook.write(os);
           
        } catch (ParsePropertyException | InvalidFormatException | IOException ex) {
            LOGGER.error("MakeExcel"); // System.out.println(ex);
        }
}

MakeExcel.java


마지막으로 view에서 처리가 있다.

JSP에서 다양한 디자인과 함께 데이터를 출력하게 된다.

엑셀에서는 그림과 같이 적절한 디자인을 하고

${} 안에 Map으로 넘긴 변수명을 넣어 사용하면 된다.

Map으로 넘긴 변수명이 listview이니 ${listview} 이고

listview는 글제목(brdtitle), 작성자(brdwriter), 작성일자(brddate) 등을 가지는

VO 클래스들을 가지고 있기 때문에 그림과 같이

${listview.brdtitle}, ${listview.brdwriter} 등으로 사용하게 된다.

listview는 LIST 형으로 JSP에서는 반복문을 사용해야 하지만

jXLS에서는 알아서 처리해주기 때문에

그림과 같이 작성만 하면 된다.

board.xlsx


자세한 코드는 project9에 샘플로 작성되어 있다.

https://github.com/gujc71/project9


jXLS을 사용하면

엑셀의 챠트 등 엑셀에서 제공하는 대부분의 기능을 사용할 수 있는 장점도 있다.



추가해야 할 라이브러리는 다음과 같다.

        <dependency>
            <groupId>net.sf.jxls</groupId>
            <artifactId>jxls-core</artifactId>
            <version>1.0.6</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls</artifactId>
            <version>2.3.0</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-poi</artifactId>
            <version>1.0.9</version>
        </dependency>
      
        <dependency>
            <groupId>org.jxls</groupId>
            <artifactId>jxls-jexcel</artifactId>
            <version>1.0.6</version>
        </dependency>
              
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.14</version>
        </dependency>
      
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.14</version>
        </dependency>




'Java > 기타' 카테고리의 다른 글

그룹웨어 (Java) - 설치  (27) 2018.04.15
과제 관리 시스템 (PMS9)  (8) 2016.12.01
Project9  (8) 2016.09.18
Project9 설치  (5) 2016.09.18

+ Recent posts