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번째 줄 '취소' 로 바꿔주기 (한글을)
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에서 써주는게 !
// 바꿀 내용에 대해서는 ?를 찍는거로 바꾸자
그리고 업데이트 하기 위한 내용으로 바꾸는건 내일!
인증 서블릿 필터 (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 |