강의용 교재로 적당할 것 같다. 고급 수준은 아니지만 어느 정도 수준은 되기 때문에 학원 강의용으로는 적당할 것 같다.



Posted by 세상을 살아가는 사람
,

JSP/서브릿부터 스프링 MVC, 그 이상을 다루고 있어 수준이 있는 교재 같다. 비전공자에게는 다소 어려울 것 같아 걱정이 된다.



Posted by 세상을 살아가는 사람
,

이클립스에서 Spring MVC 프로젝트를 만들어서 ojdbc6.jar 를 적용하는 방법을 기술한다.

보통 pom.xml에 maven dependency를 다음과 같이 적용해준다.

<!-- Oracle Driver -->

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc6</artifactId>

<version>12.1.0.1</version>

</dependency>

그러면 maven repository에 ojdbc6.12.1.0.1.jar 파일이 생기기는 하지만, Eclipse에서 artifactId가 적용되지 않았다고 하면서 에러가 발생한다.

그러면 다음과 같이 처리를 해주어야 한다.

1. oracle 사이트에 가서 ojdbc6.jar 파일을 다운로드 받는다.

  - 아니면 오라클을 설치한 폴더에서 가져온다. 나는 아래와 같은 폴더에 설치

    (D:\database\app\User\product\11.2.0\dbhome_1\jdbc\lib)

  - 나는 C:\raspberry\driver 디렉토리에 저장하였다.

2. windows OS에서 수행되는 mvn을 다운로드 한다.

  - maven.apache.org/download.cgi 사이트에서 binary zip archive를 다운로드

    (apache-maven-3.3.9-bin.zip)

  - 적당한 디렉토리에 옮겨놓고 압축을 해제한다.

  - 환경설정에서 MAVEN_HOME을 등록한다.

    + File Explorer에서 시스템 우클릭>속성을 선택한다.

    + 고급 시스템 설정을 클릭한 후 환경변수 버튼을 클릭

    + 시스템 변수로 MAVEN_HOME을 mvn을 설치하여 압축을 푼 디렉토리 명을 써준다.

      변수 이름(N): MAVEN_HOME

      변수 값(V) : C:\raspberry\apache-maven-3.3.9

    + 시스템 변수 path에 %MAVEN_HOME\bin을 추가한 후 확인을 눌러 빠져 나온다.

3. command 창을 띄우고 다음을 수행한다.

  C:.> mvn install:install-file -Dfile=C:\raspberry\driver\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=12.1.0.1 -Dpacking=jar

  - 빌드 success되고, 그러면 ojdbc6.jar 파일이 자신의 PC에 있는 maven repository에 적용이 된다.

4. 이클립스에서 Meven Clean을 하면 error가 사람짐을 알수 있다.

참고 : https://www.mkyong.com/maven/how-to-add-oracle-jdbc-driver-in-your-maven-local-repository/

Posted by 세상을 살아가는 사람
,

학원에서 스프링 MVC를 적용하여 프로젝트를 학생들이 하고 있는데 Ajax와 첨부파일을 적용하는 것이 어렵다고 하여 정리해 본다.

나의 작업환경은 다음과 같다.

1. 멀티 게시판 : 하나의 Article 데이터베이스 테이블에 여러 개의 게시판의 게시물을 한꺼번에 저장

  - 게시판 테이블 운영

  - ref, step, depth 체계를 가진 게시판

  - 네이버에서 공개한 스마트에디터 사용

  - 본문에 사진 추가 기능 사용

  - 첨부 파일은 5개 까지 적용 가능

  - 오라클 11g DBMS 사용 : Board, Article, PdsItem 테이블 및 각각의 sequence 운영

2. 스마트에디터에 대한 스프링 MVC 적용

  - 소스코드 위치 : src/main/webapp/resources/smarteditor

  - photo_uploader/popup/attach_photo.js 수정

    + html5Upload() function

      * 본문에 삽입되는 사진을 서버에 저장하기 위한 URL : /contextPath/board/file_uploader_html5 (내부적으로 Ajax 처리)

    + callFileUploader() function

      * sUrl : 'contextPath/board/file_uploader'

      * sCallback : 'resources/smarteditor/photo_uploader/popup/callback.html'

  - writeForm.js 수정 : 게시판 쓰기를 위한 jsp 파일의 javascript 파일

    + nhn.husky.EZCreator.createInIframe 수정

      nhn.husky.EZCreator.createInIFrame({

        oAppRef: editor_object,

        elPlaceHolder: "smarteditor",

        sSkinURI: ctx + "/resources/smarteditor/SmartEditor2Skin.html", 

        htParams : {

            // 툴바 사용 여부 (true:사용/ false:사용하지 않음)

            bUseToolbar : true,             

            // 입력창 크기 조절바 사용 여부 (true:사용/ false:사용하지 않음)

            bUseVerticalResizer : true,     

            // 모드 탭(Editor | HTML | TEXT) 사용 여부 (true:사용/ false:사용하지 않음)

            bUseModeChanger : true,

            fOnBeforeUnload : function(){

            }

         }

       });

    + 전송 버튼을 눌렀을 때 처리 : 가비지 컬렉션 처리를 위해 먼저 사진 파일에 대한 관리를 먼저하고, 이후 첨부파일에 대한 저장을 처리

      $("#addBtn").click(function(){

        //id가 smarteditor인 textarea에 에디터에서 대입

        editor_object.getById["smarteditor"].exec("UPDATE_CONTENTS_FIELD", []);

        // 이부분에 에디터 validation 검증

        var el = document.createElement('html');

        el.innerHTML = editor_object.getById["smarteditor"].elPlaceHolder.value;

        var imageF = el.getElementsByTagName('img');

        var url = ctx + "/board/file_uploader_real";

        var params = "";

        for(var i = 0;i < imageF.length;i++) {

          if(i == 0)

            params += ("src=" + imageF[i].src + "&title=" + imageF[i].title);

          else

            params += ("&src=" + imageF[i].src + "&title=" + imageF[i].title);

        }

        sendRequest(url, params, callbackFunction, "POST");

        callTimerProcessing();

      })

    

      function callTimerProcessing() {    // 사진에 대한 처리를 보장하기 위해 loop를 돌다, 응답이 오면 처리

    if(loop) {

      setTimeout(function() {

           callTimerProcessing();

          }, 100);

    }

    else {

          //폼 submit

          $("#frm").submit();

    }

      }


서버에서 처리는 다음에 ...

Posted by 세상을 살아가는 사람
,