전자정부 표준프레임워크 - CKEditor 적용하기

전자정부 표준크레임워크의 Portal Site 템플릿 프로젝트에 HTML 위지윅 에디터인 CKEditor 를 적용해 보겠습니다. Portal Site 템플릿을 설치하고 보니 에디터가 적용이 되어 있지 않았습니다. 공통컴포넌트 다운로드에서 에디터로 검색해서 다운 받은 것은 htmlarea 였습니다. 그래서 all in one 템플릿 프로젝트의 게시판에 적용되어 있던 CKEditor를 Portal Site 템플릿으로 옮겨보았습니다.

 

이 글에서는 Portal Site 템플릿의 자유게시판 글쓰기에 CKEditor를 적용합니다.

 

 

1. 사전에 필요한 것들

 

- Portal Site : "전자정부 표준프레임워크 - Portal Site(Oracle) 템플릿 프로젝트 설치" 를 참고하여 설치합니다.

- All in one : "전자정부 표준프레임워크 및 all in one 샘플 프로젝트 설치" 를 참고합니다. 

 

 

2. pom.xml 파일에 필요한 의존성을 추가 합니다.

 

- ckeditor-java-core는 CKEditor의 서버측 라이브러리 입니다.

- jodconverter는 CKEdit용 필터에서 사용되는 라이브러리 입니다.

- ajaxtags-resources는 실제 apache commons-lang 이 필요한데 All in one 프로젝트에서 여기에 들어 있어서 그대로 옮겼습니다.

- 위 두 개의 라이브러리에서는 필요한것만 추출해서 사용할 수도 있겠습니다.

 

<dependency>
    <groupId>com.ckeditor</groupId>
    <artifactId>ckeditor-java-core</artifactId>
    <version>3.5.3</version>
</dependency>

<!-- PDF변환용 라이브러리 -->
<dependency>
    <groupId>com.artofsolving</groupId>
    <artifactId>jodconverter</artifactId>
    <version>2.2.1</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>commons-io</artifactId>
            <groupId>commons-io</groupId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Ajax -->
<dependency>
    <groupId>net.sourceforge.ajaxtags</groupId>
    <artifactId>ajaxtags-resources</artifactId>
    <version>1.5.7</version>
</dependency>

 

3. All in one 프로젝터에서 필요한 자바 파일들은 옮깁니다.

 

패키지 전체를 옮길때는 이클립스에서 패키지를 복사해서 붙여넣기 하면 쉽게 옮길 수 있습니다.

 

- egovframework.com.utl.wed.filter 패키지

- egovframework.com.utl.wed.web 패키지

- egovframework.com.utl.fcc.service 패키지

- egovframework.com.cmm.util 패키지

- egovframework.com.cmm.exception 패키지

- egovframework.com.cmm.EgovWebUtil.java 자바 파일

- egovframework.com.utl.wdd.web.EgovWebEditorImageController.java 파일에서 egovframework.com.cmm.service.EgovProperties.java 파일을 사용하고 있는데, 이 파일내의 getProperty(String keyName) 메소드가 주석처리 되어 있습니다. Portal Site로 경량화 과정에서 그렇게 한 것으로 보입니다. 이 부분 주석을 해제 합니다.

- 위 주석 해제로 인한 java.util.Properties, java.io.FileNotFountException, java.io.IOException 클래스를 import 합니다.(클래스명에 커서를 두고 Ctrl + Space키를 눌러 선택하면 편리합니다.)

 

 

4. CKEditor파일과 설정파일을 옮깁니다.

 

- CKEditor 본체가 src/main/webapp/html/egovframework/com/cmm/utl/ckeditor폴더 입니다.

- Portal Site로 src/main/webapp/html/com/cmm/utl/ckeditor 폴더 구조로 옮깁니다. Portal Site에서는 webapp 아래 정적 파일들에 대해서 egovframework 폴더가 없는 구조라 맞추기 위해서 뺐습니다. html 폴더를 생성하고 com 폴더를 복사해서 붙여넣기 하면 됩니다.

- src/main/resources/egovframework/egovProps/ck.properties 파일을 같은 위치로 옮깁니다. CKFilter 가 사용하는 설정 파일 입니다.

 

 

5. 설정파일들 및 자바 파일을 수정합니다.

 

- web.xml 파일에 CKFilter를 추가합니다. 이 필터가 CKEditor에서 이미지 업로드를 처리합니다. /ckupload URL로 요청이 들어올 때 필터가 동작합니다. encodingFilter 아래에 넣으면 되겠습니다.

 

<filter>
    <filter-name>CKEditor</filter-name>
    <filter-class>egovframework.com.utl.wed.filter.CkFilter</filter-class>
    <init-param>
        <param-name>properties</param-name>
        <param-value>egovframework/egovProps/ck.properties</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CKEditor</filter-name>
    <url-pattern>/ckupload</url-pattern>
</filter-mapping>

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

- src/main/webapp/html/com/cmm/utl/ckeditor/config.js 파일을 수정합니다. 이미지 업로드 URL을 지정합니다. /pst_webapp 가 Portal Site의 기본 컨텍스트 URL 입니다. 자신에 맞게 변경하면 됩니다.

 

config.filebrowserUploadUrl = '/pst_webapp/ckupload';

 

- src/main/resources/egovframework/spring/com/context-properties.xml 파일을 수정합니다. 아래 내용을 추가합니다. 이 설정은 이미지 보기용 프로그램이 업로드된 이미지 파일을 찾기 위해 사용됩니다.

 

<entry key="Globals.imageStorePath" value="/user/file/upload"/>

 

※ 참고

All in one 프로젝트에서는 게시판에서 파일 업로드 경로를 globals.properties 파일에서 Globals.fileStorePath 로 지정하고 있으나, Portal Site 에서는 context-properties.xml 파일에서 지정하고 있습니다.

 

<entry key="Globals.fileStorePath" value="/user/file/sht/"/>

 

"/user/file/sht" 폴더가 게시판에서 첨부파일이 업로드 되는 폴더 입니다. UNIX 스타일로 되어 있는데, 그대로 사용한다고 가정할 때 Windows 에서는 Tomcat 이 D 드라이브에서 실행되면 D:/user/file/sht 폴더에 파일이 저장됩니다. Windows 스타일의 Path 로 변경해도 되겠습니다.

 

 

보안, 이중화 등의 목적으로 첨부 파일을 웹루트 밖에 저장하므로 파일을 다운로드하기 위해서는 다운로드용 프로그램이 필요합니다.

 

 

- src/main/resources/egovframework/egovProps/ck.properties 파일을 수정합니다. CKFilter가 사용하는 설정파일로 이미지 업로드 폴더(/user/file/upload)와 이미지 보기 URL(/pst_webapp/utl/web/imageSrc.do?path=) 을 지정합니다.

 

ck.image.dir=/user/file/upload
ck.image.url=/pst_webapp/utl/web/imageSrc.do?path=

 

- src/main/java/egovframework/com/utl/wed/EgovWebEditorImageController.java 파일을 수정합니다. 이 컨트롤러에 "/utl/web/imageSrc.do" 로 맵핑되어 있는 download() 메소드가 CKEditor 에서 업로드한 이미지를 보기 위한 기능을 합니다. 원래는 globals.properties 파일에서 Globals.fileStorePath 정보로 업로드 위치를 찾지만 Portal Site에서는 이 정보가 context-properties.xml 파일에 있으므로 값을 가져오는 부분을 수정합니다.

 

import egovframework.rte.fdl.property.EgovPropertyService;

...

    /** 첨부파일 위치 지정 */
    //private final String uploadDir = EgovProperties.getProperty("Globals.fileStorePath");

    @Resource(name = "propertiesService")
    protected EgovPropertyService propertyService;

...

    @RequestMapping(value="/utl/web/imageSrc.do",method=RequestMethod.GET)
    public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
	    String subPath = request.getParameter("path");
	    String physical = request.getParameter("physical");
        String mimeType = request.getParameter("contentType");

        String uploadDir = propertyService.getString("Globals.imageStorePath");
        EgovFormBasedFileUtil.viewFile(response, uploadDir, subPath, physical, mimeType);
    }

 

- src/main/java/egovframework/com/utl/fcc/service/EgovFormBasedFileUtil.java 파일을 수정합니다. 이 파일의 viewFile 메소드가 파일을 읽어서 보내주는데, 이번 수정에서는 String where과 String serverSubPath 인자만 사용됩니다. serverSubPath에 파일명까지 붙어서 들어 옵니다. 이 부분을 수정합니다.

 

//String downFileName = where + SEPERATOR + serverSubPath + SEPERATOR + physicalName;
String downFileName = where + serverSubPath;

 

6. 게시판 쓰기 페이지에 CKEditor를 적용합니다.

 

- src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeRegist.jsp 파일을 수정합니다.

  + ckeditor 태그 라이브러리를 추가합니다.

  + submit시 내용이 입력되었는지 체크를 위한 코드를 추가합니다.

  + textarea 를 CKeditor로 치환하는 태그를 추가합니다.

 

 

... <%@ taglib prefix="ckeditor" uri="http://ckeditor.com" %> ... function fn_egov_regist_notice() { //document.board.onsubmit(); CKEDITOR.instances.nttCn.updateElement(); ... <textarea id="nttCn" name="nttCn" class="textarea" cols="95" rows="28"></textarea> <ckeditor:replace replace="nttCn" basepath="${pageContext.request.contextPath}/html/com/cmm/utl/ckeditor"/> ...

 

7. 실행결과 입니다.

 

 

 

 

이상으로 전자정부 표준프레임워크 Portal Site 템플릿에 CKEditor를 적용해 보았습니다. 실제 사용시에는 EgovWebEditorImageController.java 파일의 이미지 보기 기능 처리를 제대로 처리해야 할 것입니다. 현재는 기능이 되는것만을 위해서 코드가 제대로 정리되어 있지 않습니다.



출처: http://pentode.tistory.com/131 [쉬고 싶은 개발자]

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
» 전자정부 표준프레임워크 - CKEditor 적용하기 file 졸리운_곰 2018.01.11 568
45 IntelliJ에서 SpringBoot 웹 프로젝트 생성하기 file 졸리운_곰 2017.11.14 222
44 파라미터 전송 - GET, POST 방식 file 졸리운_곰 2017.09.26 123
43 Velocity Template Engine 시작하기 file 졸리운_곰 2017.09.26 91
42 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.09.26 68
41 [톰캣] server.xml 설정 file 졸리운_곰 2017.09.24 352
40 톰캣의 컨텍스트 외부로 경로 매핑하는 방법 졸리운_곰 2017.09.24 171
39 프레임 나뉜 페이지에서 새로고침시 페이지 유지하기 졸리운_곰 2017.09.17 77
38 [Spring] 한국거래소의 주가 정보 가져오기 졸리운_곰 2017.08.10 416
37 [Ibatis] 부등호 <, > 의 표시 졸리운_곰 2017.07.06 193
36 동적 SQL mybatis 가을의곰 2017.06.10 116
35 [mybatis] foreach를 이용한 다중 insert 가을의곰 2017.06.10 413
34 mybatis (foreach문, in절) 가을의곰 2017.06.10 407
33 SW 릴리스를 간편하게 - Maven plugin + Jenkins file 졸리운_곰 2017.03.20 103
32 Migrating Spring Web MVC from JSP to AngularJS file 졸리운_곰 2017.02.07 207
31 Migrating a Spring Web MVC application from JSP to AngularJS file 졸리운_곰 2017.02.07 1513
30 Spring and Angular JS: A Secure Single Page Application 졸리운_곰 2017.02.06 426
29 스프링부트 소개 졸리운_곰 2017.02.06 190
28 Spring boot 시작하기 졸리운_곰 2017.02.06 247
27 [Java]Spring Boot를 사용한 web어플리케이션 만들기 file 졸리운_곰 2017.02.06 171
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED