Servlet 페이지들 관계 정리
* 10 ~ 12일 *
4개 과정 기계적으로 만들어주면 됨
1. 컨트롤 스페이스 - 기본 생성자
2. 우클릭 > 소스 > 필드 > 속성들을 넘겨받는 생성자
3. 게터 세터 generate 다 선택
4. 맨 끝에 가서, 객체를 문자열로 변화
우클릭 > toString
1번 - jdbc 연결
18~27. jdbc 연결해줘서, Oracle에서 만들어준 데이터를 가지고 온다.
27. 결과 집합 형태로 21개의 쿼리가 담겨있는 상태
2번 - 데이터 넣을 '공간' 형성
16.
쿼리를 담아줄 배열을 만들어줌
원래 14번째줄처럼 만들어줬으나, 이건 고정적으로밖에 배열 형성이 안되서 Collection(set, list, map) 중 list로 '가변적 배열'이 되게 해주고, generic(특화된 자료형)으로 Member의 값만 담도록 해준다.
2-1번 - getList() 함수의 의미
13. getList() 함수를 만들어준건데 추후 쓰일 일이 있다.
- 이름 아무거나 지어져도 되나, 저 함수를 쓰는! 입장에서 'getList()'라고 하는게 편해서 함수 이름을 저렇게 지은거라고 추정 ㅎㅎ
3번 - 반복문 돌려서 데이터 set 해주기
29. while (rs.next()) 읽을게 없어서 false 나올때까지, 아래를 반복해줄거야
30~32. Oracle DB에서 "id"라고 적혀있는 데이터를 get 해서 int id에 넣어줄거고 ~ 나머지도 그렇게 넣어줄거야.
35. just 저장 용도라며 만들었던 Member.java 파일의 Member를 이제 사용할거야.
36. (우선 지금 예제에서는 3개 - id, nicName, pwd만 사용할건데) member에다가 / set을 해서 값을 넣어줄거야
// while 문 한 번 돌면 (id, nicName, pwd가 담긴) 한 사람의 정보가 Oracle DB에서 지금 java로 옮겨지는거고
37. 이거를 차곡차곡 '2번'에서 만들어준 공간 list에 넣을거야
43. 그리고 반환은 이 list를 하는 / getList()의 함수가 드디어 이제 만들어진거지
cf) 함수 이름 이해 안갔을 때
(배경 설명)
- 원래 여기에 url, sql... 등 jdbc 연결해주는 정보도 같이 있었는데, 콘솔 출력용 vs 데이터용(MemberService)으로 나눠줘서 지금 여기에는 콘솔 출력용 코드만 있다.
- 코드가 있는 이유는 필요가 있기 때문. 오라클 DB에서 데이터 가지고 오고 > 값을 넣어주고(MemberService에서 set)을 해줘도 눈에 보이는게 없으니, '우리에게' 시각적으로 보여주기 위해 이렇게 콘솔용을 만든 것. (여기서는 get을 해서 굳이 출력해주고 있는 중)
4번 - 출력을 위한 준비
26. 이걸 안쓰면 JDBCProgram.java는 MemberService가 만들어져있는지 아닌지도 모름. 여기서 사용하겠다고 선언해주듯 작성
27. memberService의 getList() 함수를 / <- 21명의 (id, nicName, pwd가 담긴 데이터)
List<Member> 타입, listdiffer 이름으로 담아줄 것
- 맨 처음에 Member [] 라고 해서 오류 났었던 것을 기억하기.
MembrService.java에서 getList() 함수의 반환 '타입'은 List<Member>이기 때문에 당연히! 여기에 맞춰서 준비를 해줘야겠지~
5번 - 반복문 돌려서 데이터 get 해주기 & 출력
29. 처음에 listdiffer.length 했었는데 오류가 났는데 이럴 경우 .size()를 해보면 된다는 꿀팁 有
31. Oracle DB에서 -> 자바에 마련된 공간들에 set 해주었던 과정'만' 하면 우리 눈에 보이지 않아.
그래서 굳이 get을 해서 출력을 해줘본다.
cf) 맨 처음에 오류나게 썼던 코드. listdiffer[i] <- 이건 '일반' 배열일 때고, 컬렉션에서의 List는 .get(i) 형태로 꺼내야함
- 위에 27번째줄에서 21명의 id, nicName, pwd가 담긴 데이터를 listdiffer라고 지금 이 페이지에서 다시 명명해줬잖아?
그걸 하나씩 하나씩 .get(i)해본다. 반복문 통해서 (이 과정이 31~34 for 하나하나씩 출력해보려고!)
21명의 id, nicName, pwd가 담긴 listdiffer 하나하나가 다 Member인 것 (아래 그림에서 35번째줄 봐도 이해 easy)
->
자, 이제 브라우저에 출력을 해보자.
콘솔 출력용으로 JDBCPrgram.java에서 적어줬듯이 (26, 27행)
서블릿 파일에도 적어줘서, 이제 브라우저 출력을 해보자. (오라클에서 불러온 DB들을 이제 화면에 볼 수 있게 되는것!)
cf) 10번째의 list를 JDBCProgram.java에서 listdiffer라고 연습했었다.
-> 그 때는 담겨진 것들을 '굳이 꺼내서' 콘솔에 전체 출력했었는데, 이제는 담겨진 것들 중 필요한 것들을 '굳이 꺼내서' 화면에 출력하고 있는 것.
왜 타입이 Member형인지는 위에 그림판에 직접 그린걸 보면 된다.
참고) for-each문
* 13일 *
이제 Member 말고, Notice 관련해서 브라우저에 띄워보자!
Notice.java
-> 기계적으로 4단계 거쳐서 만들어주고
NoticeService.java
-> jdbc 연결해주고
결과집합 rs에 있는 것들을 한 줄 한 줄 씩 꺼내고오고 (while(rs.next())
그 꺼내온거를 Notice notice = new Notice(); 이후 notice에 set해서 담아주고
미리 만들어놓은 List<Notice> list = new ArrayList<>(); 의 list에 .add(notice)해서 배열로 담아 return해준다.
jsp에다가 연결해서 화면에도 출력가능하도록 해보자
타입이 Notice라는거☆ 이제는 그림판 안그려도 알지!
사용자의 get 요청을 처리할 수 있도록 해보자
1. 먼저 f, q
![]() list.jsp 파일, |
|
![]() f, q를 getParameter로 '받아서' |
참고) html에 name="x", "y"로 값 받아서 사용했던 '계산기' 만들었을 때를 떠올려보시오. |
![]() f, q를 인자로 getList 함수를 사용해서 / |
참고) '인자'와 '매개변수' |
![]() NoticeService.java 파일 |
참고)
* 14일 *
2. page까지 넣어서 p, f, q의 흐름을 봐보자
![]() 질문 ) 35번째줄 쿼리식 |
|
![]() 이제 데이터 전체를 가지고 오는게 아니라, HI 검색 시 HI만 나오는 것 처럼 이제 매개변수로 관련된 데이터들을 들고와주게 된 것 :) |
|
매개변수로 page도 추가해주자 | |
![]() 페이지를 p로 넘겨받는데, 눌러서 입력 받는 것 |
![]() 기본 page는 1로 설정 (page 값을 전해주는게 없어도 첫 페이지는 나오도록 :)) |
![]() 18-20번째 줄을 쓰지 않으면 -> null 값이 되서 500 오류가 남 |
3. '페이지' 요청에 맞게 데이터를 불러와보자
ex) 2페이지를 누르면 -> 10~20까지의 데이터를 불러오는 것
4. 검색할 때, 내가 검색한 내용들 고정시켜주기
1) 검색어 고정
2) 카테고리 고정
우선,
select 태그 내에 'selected'라는 함수가 있다.
170,171 - (select 태그) 옵션을 아무것도 선택하지 않으면 빈 공백 ""
173. 만약 옵션은 '제목'으로 했으면 -> 공백이 아니라 그게 선택되는거고
174. 옵션을 '작성자'로 했으면 -> 공백이 아니라 그게 선택되는거고
184, 185 - 아래 결과 그림에서 보면 selected가 'writer-id'에 있는데 검색분류를 작성자로 선택해서 그러함. (만약에 제목으로 선택했으면 seleted가 위로 올라감)
5. '현재 페이지 / 전체 페이지' 보여주기 (스칼라값(Scala))
전체 검색한 개수가 몇 개인지 알아내야함
225. field, query값을 '인자'로 줘서 / 받은 / getCount() 함수의 결과를 / int count
226. lastPage는 = 위에서 받은 count/10 + (count를 10으로 나눠서 나머지가 0이면 0, 아니면 1)
230. page_는 위쪽에서 이렇게 전달받은 p를 정수 변환한 값 (즉, 현재 페이지)
if(p != null && !p.equals(""))
page_ = Integer.parseInt(p);
6. 1,2,3,4,.. 에서 선택한 페이지만 bold체로 해주기
15일부터는 자세 페이지에서 확인 (큰 흐름 정리는 끝났고, 이렇게 기능들만 이제 추가하는 것이니)