상세 컨텐츠

본문 제목

Servlet 페이지들 관계 정리

수업 일지/Servlet

by NayC 2021. 5. 5. 23:24

본문

728x90

* 10 ~ 12일 * 

 

 

just 저장 용도

 

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 하나하나씩 출력해보려고!) 

 

마지막이 20이겠구나 ㅎㅎ

 

21명의 id, nicName, pwd가 담긴 listdiffer 하나하나가 다 Member인 것 (아래 그림에서 35번째줄 봐도 이해 easy)

 

->

 

 


자, 이제 브라우저에 출력을 해보자.

 

콘솔 출력용으로 JDBCPrgram.java에서 적어줬듯이 (26, 27행) 

서블릿 파일에도 적어줘서, 이제 브라우저 출력을 해보자. (오라클에서 불러온 DB들을 이제 화면에 볼 수 있게 되는것!)  

 

cf) 10번째의 list를 JDBCProgram.java에서 listdiffer라고 연습했었다. 

-> 그 때는 담겨진 것들을 '굳이 꺼내서' 콘솔에 전체 출력했었는데, 이제는 담겨진 것들 중 필요한 것들을 '굳이 꺼내서' 화면에 출력하고 있는 것. 

 

왜 타입이 Member형인지는 위에 그림판에 직접 그린걸 보면 된다. 

 

참고) for-each문

https://wikidocs.net/264

 


* 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 파일, 
html 부분에서 사용자 입력값을 받을 수 있는 부분에 name을 줘서 활용할 수 있도록 한다. 

 

f, q를 getParameter로 '받아서' 
서블릿에서는 f, q로 사용해보도록 하자. 

참고) html에 name="x", "y"로 값 받아서 사용했던
'계산기' 만들었을 때를 떠올려보시오. 

f, q를 인자로 getList 함수를 사용해서 /
여기서 list로 써야겠다.  

참고) '인자'와 '매개변수'
 

NoticeService.java 파일

1) f, q 값이 아무것도 전달되지 않았을 때의 getList()
-> 기본 설정을 "title"로, 검색창에는 "" 빈 공백을 띄워줘야 겠군

2) f, q 값이 전달되었을 때는 getList(String field, String query)로 매개변수를 설정해주었고 
-> 관련 데이터를 가지고 와준다. 

참고) 

계산기 만들었을 때 
매개변수, 인자


* 14일 * 

 

2. page까지 넣어서 p, f, q의 흐름을 봐보자

 

질문 ) 35번째줄 쿼리식
-> field 에 (이런) query가 들어간 결과를 불러오는거니까!  

 

이제 데이터 전체를 가지고 오는게 아니라, HI 검색 시 HI만 나오는 것 처럼 이제 매개변수로 관련된 데이터들을 들고와주게 된 것 :) 

매개변수로 page도 추가해주자

페이지를 p로 넘겨받는데, 눌러서 입력 받는 것
-> 클릭할 수 있게 하고 요청 이루어질 수 있도록 해야
-> a 태그로 고쳐주고, f값 q값도 같이 넘겨줘야 검색한 결과를 보내줄 것
-> (값들이 온거니까) field, query로 바꿔서 써주기

기본 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))

전체 검색한 개수가 몇 개인지 알아내야함

 

이걸 sql에 붙여넣고 

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일부터는 자세 페이지에서 확인 (큰 흐름 정리는 끝났고, 이렇게 기능들만 이제 추가하는 것이니) 

 

 

 

 

728x90
반응형

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

인증 서블릿 필터  (0) 2021.05.29
55일차. Servlet 17 - ★CRUD (2)  (0) 2021.05.07
54일차. Servlet 16 - ★CRUD (1)  (0) 2021.05.06
38일차. Servlet 6  (0) 2021.04.13
서버 ↔ 브라우저 요청 정리  (0) 2021.04.12

관련글 더보기