JSP/서블릿 공부 2021-03-03
뉴렉처 유튜브 JSP/서블릿강의 94강시작
pub 컬럼 추가에 대한 변경사항 처리
과거에작성한 Filter를 이용해서 입력될때의 한글인코딩을 설정했기때문에
입력시에 한글이 깨진것이 아니라 출력시에 한글이 깨진걸로 보인다.
출력시에 인코딩 문제를 해결하기위해 인코딩을 해주도록 한다.

open (t/f) 을 사용하기위해 데이터베이스의 pub라는 컬럼에 대입을 할것이다.
작성된내용의 notice를 NoticeService의 insertNotice() 함수를 이용해 값을 넣어주는것

그러기 위해서 Notice 객체를만들어주고 getter/setter의 setter를 사용하여 값을 넣어준다.
notice의 setPub() 가지금은 없지만 boolean타입을 인자값으로 받는 setter를 Dao에서 만들어줄것이다.
isOpen같은경우는 체크박스가 값이 없는경우 null값을 반환하게 되므로 if문을 사용해 기본값을 false로 주고
값이 넘어올경우 true를 반환하도록 해서 setPub를 만들었을시 인자값으로 사용할수있게끔 조치해준다.
공지사항 등록 아이디는 임시로 "newlec"문자열을 저장하도록한다 추후 인증과 권한 로그인처리 구현시 수정할것
Notice(담는그릇 DAO,Entity)에는 pub라는 필드가 없기때문에 수정이 필요하다.
boolean타입의 pub를 만들어준다. 생성자또한 pub를 포함 할수 있게 수정해준다.

Getter/Setter 또한 만들어준다. 이때 불리언타입경우 get대신 is로 이클립스가 자동으로 바꿔주기 때문에
헷갈리지 않도록 get으로 직접 수정해준다. toString() 또한 pub를 속하게 수정해주도록 한다.

데이터베이스의 View또한 pub를 속하고있지 않기때문에 데이터베이스에서 수정해주도록한다.
편집을 눌러서 검색과 Group by절에도 추가해준다.

View를 수정 했으면 NoticeView로가서 생성자에도 pub를 채울수있도록 수정한다.

NoticeView의 생성자를 수정했으면 이제 Service부분의 데이터를 담는부분을 수정해주어야한다.
마지막으로 수정후에 NoticeService부분의 쿼리를 가져오는부분과 담는 부분또한 pub를 순서에 맞게 추가해주어야한다.


반환값이 Notice와 NoticeView인 메소드들은 pub를 추가해 수정해준다.
*컬럼을 하나 추가했을시 (pub) 수정해야할 부분에 대해서 알아본다.
- 담는 그릇 (DAO)에 속성 추가 (boolean의 경우 이클립스는 get대신 is로 바꿔주기때문에 수정이 필요함)
- 데이터 베이스에 만들었던 View(뷰) 도 수정이 필요하다
- 클라이언트에서도 NoticeView 도 생성자에 pub를 채울수 있도록 수정 한다.
- NoticeService 부분의 데이터를 담는부분 또한 수정해주어야한다.
- 데이터베이스를 가져오는 쿼리부분도 에러가 발생 수정 해주어야한다.
공지사항 등록하기
공지사항을 등록하기위해 Service의 insertNotice() 메소드를 만들어준다.

NoticeService의 insertNotice(Notice notice) 메소드

컨트롤러에서 입력처리후 sendRedirect로 list 페이지로 이동시켜준다.
이때 경로를 지정안해주면 매핑주소의 마지막을 제외한 경로에 sendRedirect( ) 괄호안에 있는경로를 추가하여 이동

공지사항 글이 등록되는것을 볼수있다.

공지사항 자세한 페이지 추가
관리자 페이지에서 공지사항을 자세하게 볼수있는 페이지 추가
만들어져있는 html 파일을 복사해 jsp 파일을 만들어준다.

admin.notice 패키지에 DetailController또한 만들어주도록한다.
기본 DeatilController와 비슷하다 (매핑이름과 경로만다르다)

관리자의 detail.jsp를 Attribute 받은 n으로 EL문을 사용해 전달받을 내용을 수정해준다.
파일 업로드를 위한 인코딩 방식 multipart/form-data
데이터를 Post할때 그것을 어떻게 인코딩하는지 그리고 그중에서 multipart인코딩방식은 무엇인지를 이해하기
글쓰기등록에서 파일을 첨부하고 글쓰기등록을 한뒤 NetWork(관리자도구)를 살펴보면
첫번째로 reg 그다음 sendRedirect로 list 요청이되는것을 볼수있다.
reg요청을 클릭해 밑으로 내려보면 요청했던 내용을 볼수있다.

view source를 눌러보면 데이터포장 인코딩방법으로 볼수있다. 키=값 & 키=값인 문자열 형식이다.
이렇게 인코딩하게되면 문자열만 보낼수있다고 보면된다 절대로 file은 보낼수없다.

파일을 전송할 첨부파일이 있는 form태그로 가서 enctype을 치면 기본 url인코딩 타입이 나온다.

하지만 이런식으로는 파일명만 전송되기때문에 enctype에 multipart/form-data를 입력해준다.

이렇게 인코딩 타입을 바꾸어주고 다시 파일첨부후 글쓰기등록을 하고 NetWork에서 확인해보면
요청하고있는 내용에 Content-type이 다른방식으로 보내진것을 확인할수있고
밑에는 아까와 같은 인코딩방식을 볼수없다.

url인코딩은 문자열로만 가고 multipart인코딩방식을 사용하면 다양한데이터를 보낼수있는 인코딩방식으로 바뀐다.
인코딩 방식이 바뀌고나서는 글이 등록되지않는것을 볼수있다.
title값이 넘어오는지 확인하기위해 regController에 콘솔에 확인할수있는 코드를 입력하고 실행해본다.

콘솔을 확인해보니 title값이 null이 넘어온것을 볼수있다. 인코딩방식을 바꾸었더니
기존에 방식으로 읽어올수없는 문제가 발생한다.

유튜브 뉴렉처 JSP/서블릭 97강 완