Spring 파일 다운로드 (DownloadView- AbstractView), log-로그 설정(Logger), 스프링 JSON응답 jackson-databind (게시판 댓글달기, 댓글단 사용자 정보확인(Modal) - 모두 JSON으로 응답받는다.)

2019. 7. 8. 23:24Spring

=====================파일 다운로드 =========================
        

파일 다운로드 하기

 

1. Notice Vo만들기

 

 

 

2. notice.xml 파일 만들기 (공지사항 등록, 공지사항 모두보이기, 하나만 보이기)

 

 

3. IBATIS-config에 등록하기

 

 

3. NoticeDao 만들기

     1) noticeDao

     2) noticeDaoImpl

 

 

 

4. NoticeService 만들기

     1) noticeSerice

     2) noticeServiceImpl

 

 

 

5. noticeController

     1) 로그를 남기기위한 Logger객체 획득 및 파일 저장위치 및 다운로드 뷰 등록

 

     2) 공지사항 등록폼 및 추가 생성 (multipartForm)

     3) 리스트 및 파일 다운로드 폼(다운로드 뷰)

 

 

 

6. spring 폴더에 config.properties에 파일 저장위치 등록

 

 

7. NoticeForm 생성

 

 

8. form.jsp 생성

 

 

 

9. list.jsp 생성

 

 

 

10. 뷰 패키지에 FileDownloadView 생성

 

  응답컨텐츠의 타입을 설정한다.
   application/octet-stream은 구체적인 파일의 타입을 알 수 없는 바이너리파일(사진, 동영상, 워드, 한글, ...)
   응답으로 내려보낼 때 설정하는 기본값이다.
   첨부파일을 응답으로 내려볼때 주로 사용된다.

예시 ) response.setContentType("application/octet-stream");

 

 

응답헤더값을 설정한다.
   Content-Disposition 응답헤더는 응답으로 전달되는 
   파일명을 지정할 때 사용한다.
   "Content-Disposition", "attachment; filename=a.pdf"와 같은 형식으로 적으면
   파일다운로드시 무조건 "파일다운로드" 대화상자가 나타내도록 하거나,
   크롬같은 경우에는 파일이 즉시 다운로드되게 한다.
 예시 ) response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(filename, "utf-8"));

 

 

첨부파일을 브라우저로 내려보낸다.
   1. 지정된 디렉토리에서 해당 파일을 읽어오는 스트림을 생성한다.
   2. 응답객체에서 브라우저로 내보내는 스트림을 획득한다.
   3. 복사한다.

예시 ) 
          InputStream in = new FileInputStream(new File(directory, filename));
          OutputStream out = response.getOutputStream();
          FileCopyUtils.copy(in, out);

 

 

 

 

 

 

 

 

 

====================로깅 (로그 나오는것)======================
로깅(Logging)
        - 로깅은 개발 및 운영과정에서 실행중인 프로그램의 정보를 확인하기위해서 사용한다.
        - 로깅에 포함되는 정보
                - 실행시간, 실행중인 클래스명, 실행중인 메소드명,
                  실행시 전달받은 매개변수값, 실행과정에서 생상되는 값,
                  실행완료 후 반환되는 값, 총 실행 소요시간,
                  예외발생시 예외클래스, 에러메세지, 에러 디버깅 정보 등...
                  * 로깅에 포함되는정보를 콘솔(모니터)이나 파일, 데이터베이스에 저장하는 작업은
                    개발자가 직접 코딩하는 것은 귀찮은 작업이다.


        - 자바 로깅 프레임웍크
                - Log4J, slf4J이 대표적인 로깅 프레임워크다.
                  * 스프링프레임워크는 slf4j를 기본 로깅 프레임워크로 사용한다.

        - 로그레벨
                fatal(가장 심각한 수준)
                        시스템이 더 이상 유시될수 없을 때 남기는 로그
                error(에러)
                        시스템이 분명한 문제가 발생했을 때 남기는 로그
                warning(경고)
                        시스템에 문제를 일으키지는 않지만, 그래도 잘못된 경우
                info(정보)
                        시스템의 정상적인 실행을 확인할 수 있는 정보를 남기는 로그
                debug(자세한 정보)
                        시스템의 실행상황을 상세하게 확인할 수 있는 정보를 남기는 로그
                trace()
                        ???

        - 로그 패턴 문자
                %p        로그 레벨
                %m        로그 메세지
                %d        로그 발생시간 %d{yyyy-MM-dd HH:mm:ss}
                %n        줄바꿈
                %C        클래스명
                %L        로그를 출력한 소스의 라인번호
                %M        메소드명

 

====================Portal에 Logger 설정===========================

 

 

1. log4j.xml 에서 로그 레벨을 정해준다 (debug로 설정함)

 

 

 

2. Controller에 Logger 객체 생성 및 설정하기 (logger.info, debug )

이렇게 할경우 콘솔창에 로그가 나타난다.

==============================================================

 

 

 

 

 

 

 

 

 

 

 

 

================스프링 JSON응답 jackson-databind==========


스프링에서 JSON 응답제공
        - pom.xml에 jackson-databind 라이브러리 의존성을 추가한다.

<!-- 맵핑 잭슨 JAVA객체 -> JSON형식으로, JSON형식을 -> JAVA객체로 변환해주는 라이브러리-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.9</version>
</dependency>


               


                
                 * jackson-databind는 자바객체를 json형식의 텍스트로 변환변환하거나
                                            json형식의 텍스트를 자바객체로 변환한다.
                - 응답으로 json 형식의 텍스트를 제공하기
                        @RequestMapping("/detail.do")
                        @ResponseBody
                        public Board getDetail(int no){
                                Board board = boardService.getBoard(no);
                                return board;
                        }

                        @RequestMapping("/detail.do")
                        public @ResponseBody Board getDetail(int no){
                                Board board = boardService.getBoard(no);
                                return board;
                        }
                        * @RequestBody를 메소드에 추가한다.
                        * 제공할 정보를 담고 있는 객체를 반환하는 요청핸들러 메소드를 만든다.

위의 두가지 방법 모두 보여준다.

                * @ResponseBody는 요청핸들러 메소드가 반환하는 객체를 응답으로 제송한다.
                  단, jackson-databind 라이브러리가 프로젝트에 사용중인 경우
                      자바객체를 JSON 형식의 텍스트로 변환해서 응답으로 제공한다.

=====================================================

자유게시판 (댓글 작성)

 

1. pom.xml에 라이브러리 추가

 

<!-- 맵핑 잭슨 JAVA객체 -> JSON형식으로, JSON형식을 -> JAVA객체로 변환해주는 라이브러리-->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.9</version>
</dependency>		

 

2. src/views/free에 detail.jsp, form.jsp, list.jsp 를 작성합니다.

     1) detail.jsp

     

 

     2) list.jsp

 

3. FreeBoard.xml 작성한다. (xml등록은 필수)

 

 

 

4. FreeBoardDao 작성한다

     1) FreeBoardDao

     2) FreeBoardDaoImpl

 

 

 

5. FreeBoardService를 작성한다.

     1) FreeBoardService 

     2) FreeBoardServiceImpl

 

 


6. FreeBoardControll에 addComment.do작성

 

 

※. Controller의 @ResponseBody를 통해 아래처럼 Json으로 받고 detail.jsp의 스크립트로 실행이 가능하다.

 

 

 

 

 

 

===========================Modal로 댓글 작성자 정보 보기

 

1. detail.jsp에 모달 태그를 추가해줍니다.
※. https://www.w3schools.com/bootstrap/bootstrap_modal.asp   이쪽 태그 사용함

 

 

2. user.xml에 getUserByName를 추가합니다.

 

 

3. userDao에 추가 합니다.
    1) userDao


    2) userDaoImpl




4. userService에 추가 합니다.
    1) userService


    2) userServiceImpl





5. userController를 작성합니다.




6. detail.jsp에 쿼리문을 작성합니다.