상세 컨텐츠

본문 제목

54일차. Servlet 16 - ★CRUD (1)

수업 일지/Servlet

by NayC 2021. 5. 6. 09:34

본문

728x90

C - Create

R - 값을 얻어오는 것 

U - Update

D -Delete 

 

"CRUD만 무조건 숙달시키면 됩니다."

 

코드를 좀 더 쉽게, 유지/관리할 수 있는 방법이 없을까를 고민하게 될 것

여기저기 코드에서 개선될 부분이 많다. 

 

// id 받아서 본문?에 꽂아주는 과정이 R이었던 것

 

무조건 list.jsp에서 실행! 


하나 링크를 추가해보자

 

흐름 

1. 사용자는 먼저 목록 페이지를 본다 (list.jsp)

2. 이 목록에서 특정한 애 클릭하면 -> 커지는거로 (detail.jsp)

- 일반적으로 여기에는 목록, 수정, 삭제 버튼이 있다. 

 

수정

- 수정할 수 없는 거 : 작성자, 조회수

- 수정할 수 있는 거 : 제목, 내용, 첨부파일 

수정 페이지 주세요 - 가 아니라, 

데이터 쿼리스트링 같이 전달해야함

notice가 가지고 있는 id를 줄 것

 

notice.jsp 만들기 (detail.jsp 복붙)

대신 바뀌어지는게 - 2가지 바꾼다고 했으니 

그럼 '수정'을 누르면 이렇게 된다. 

지금 제목, 내용이 - 내용없는 글, null이 떴는데

제목은 input 태그 추가해줬다고 해도... 근데 이거 value에도 입력해주게 해줘야 하지 않나....  

아래 본문은 20, 80 크기 추가해준 것 외에 입력 폼같은게 없는데 ㅠ 

-> 위에 제목하고 내용이 저래서 (하필 내용없는글, null이 제목과 본문이라니ㅋㅋㅋ) 헷갈렸던듯. 

    리스트에서 다른걸 클릭해서 보면 아래 그림! 그리고 수정도 가능하지~~ (input 태그하고 뭐 area 넣어줘가지구:))

 

* 그리고 notice.get~ 해서 가지고 오는 이유는 : 수정할 때 이전에 쓴 내용도 보통 같이 있기 때문에!! *  

    

 

detail.jsp 만들 때와 edit.jsp가 거의 동일

근데 제목, 내용 수정 상태로밖에 만든 것 밖에 없음

-> 수정된 내용을 저장할 수 있도록 바꿔야 함

 

144번째 줄 '취소' 로 바꿔주기 (한글을) 

 

detail에서는 목록, 수정 a 태그가 있겠지 
edit에서는 저장, 취소 a 태그가 있겠지 :)
이거로 해도 됨!! 

 

cf) 위에 id로만 적어줄 수 있었던건 맨 위에 id 정의를 해줬어서임

 

- 수정했으면, '저장'을 해야함 

-> form태그 필요 

form으로 감싸고 있어야 함

table - form - tr 절대 불가 

감싸야 함! 

 

ㅡㅡㅡ

 

'취소' 누르면 detail.jsp 가게 할건데

 

'저장' 누르면 어디로 가게 할 것인가 

- 이건 페이지를 달라고 하는게 아님. 이것도 detail.jsp 

- 근데 중간에 어디 들렸다 감 

   DB에다가 업데이트 처리 -> 끝나고! detail.jsp로

   

Q. redirect

- 계산기 예제에서, 계산 끝나고 화면 그대로 전달해준

- 서블릿이 다른 서블릿을 요청할 수 있는 

 

-> DB update 처리하는걸 어떻게 만들어줄 것인가

- 담고 있는거 (title =?&content=?)

 

Q. jsp를 만들 것인가 or Servlet으로 만들 것인가

- 출력 기능은 detail.jsp에 있어서, 만드려는 DB 업데이트에는 JSP 굳이~~  

(굳이 재스퍼를 요청할 필요 없는 것 + 그리고 jsp는 자바코드 베이스가 아니라, html 베이스라 코드 블럭 사용해서 자바 코드 넣는데 부담있다. 그냥 서블릿은 바로바로 자바 코드 넣어서 편하지~ 지금같이 로직만 필요한 경우는!)

-> Servlet으로! 

 

// 

 

자 url을 뭐로 할 것인가

 

edit로 고치고 

post 전용 함수 doPost 오버라이드 하자

 

패키지명 - 컨트롤러.렉처

클래스 네임 - EDITController

-> 서블릿 클래스로 만들어줘야

(사실 서블릿 선택해서 만들 수 있는데... 이거로도 해보자>.<

-> 클래스명 적어주고 + url 맵핑 이름 /lecture/edit + doPost 

 

근데 군더더기가 너무 많다

 

anyway 만들어주기 

extends HttpServlet

doPost 컨트롤 스페이스

@webServlet(주소)

+ 그리고 각종 임포트들

 

ㅡㅡㅡㅡㅡ

 

post 날리면 edit에 감 -> notice/edit 에 (제목, 분몬 가지고) 

-> edictCOnd 여기서 받아야 함 !  

   String title =?

   String Content =? 

 

// 근데 전송이 안된다.

name 없어서

그럼 L에서 이제 받아야지

 

String title = request.getParameter ("title")

자 이거 2개 업데이트 필요

그래서 NoticeService가 필요한거야

 

1) 그리고 지금은 없지만 update() 메소드 만들어서, title, content 전달할거야 

/

2) 근데 notice를 담을 수도 

1번 방법으로 하면 문제 있음

-> 지금 우리가 하고 있는건 애가 detail.jsp로 가야함 (redirect) 

어디로 갈거냐 (detail.jsp로 갈거다 ?id="

 

근데, 모든걸 다 수정할건 아닌데? 

update하려면 특정! 레코드를 바꿔야하는 것

그 id는 어떻게 산정을 할 것인가

 

id는 어떻게 보내지?

그건 사용자가 입력하는게 아닌데? 

타이틀, 본문은 "name"으로 줬는데... id는 어떻게 전달하지?

 

-> hidden 기능 사용!! 

사용자가 입력하지 않은 데이터는 이렇게 hidden 시켜서 보낼 수 있다! 

 

/ 자 그럼 L에서 id도 받아봐야지~~ 

근데 id가 정수형이라서 변환해주고

 

-> 이제 애를 업데이트 할 생각이다. 

 

주석 처리된 게 문제인 이유를 먼저 알아보자.

update 주석 풀어서 create method 받고 

-> NoticeService에서 추가로 update 작성

 

R 162행

-> 업데이트가 엄청 많아질 것 (함수도 많아질 것) 

이렇게 하는게 맞나... 싶은 생각이 든다. 

 

그래서 일반적으로는 26-28행을 많이 쓴다.

근데 이것도 문제

(notice) 객체 담아서 전달해도 문제

 

162행. 업데이트 할 수 있는건 다 넣어서, 159행에서 받은걸 다 채운다는 것

근데 L에서 저 4개만 채워서 보내면 -> R에서 다른 것들은 null이 채워지는데... 내가 업데이트 하는거 뻬고는 null이 됨

 

그래서! R에다가는 

그래서 L에서 이렇게 사용해야한다.

27번째줄. 

- 기존의 id를 하나 가지고 오고 / 예외처리 해주고 / 아래서 try 안으로 들어오게 해주고

 

id 하나를 가지고 noitce 만들어줌 

-> 그리고! title, content를 다른 값으로 대체하고 

-> notice를 업데이트 

 

L에 넘겨주면

-> 기존의 값을 유지하면서! 업데이트 된 값을 이용할 수 있게 되는 것 

 

R에서 update할 수 있는걸 다 sql에서 써주는게 ! 

 

// 바꿀 내용에 대해서는 ?를 찍는거로 바꾸자 

 

 

 

그리고 업데이트 하기 위한 내용으로 바꾸는건 내일! 

 

728x90
반응형

'수업 일지 > Servlet' 카테고리의 다른 글

인증 서블릿 필터  (0) 2021.05.29
55일차. Servlet 17 - ★CRUD (2)  (0) 2021.05.07
Servlet 페이지들 관계 정리  (0) 2021.05.05
38일차. Servlet 6  (0) 2021.04.13
서버 ↔ 브라우저 요청 정리  (0) 2021.04.12

관련글 더보기