입력 받은 값을 출력 ( jstl 문법으로 param."파라미터 이름" 또는 여러개의 파라미터 값이면 paramValues."파라미터 이름" 으로 불러온다
코드 실행 결과
DAO, DTO 활용하기
TestDAO.java, TestDTO.java 파일 생성 후 작성
ex04_all_data.jsp, ex04_one_date.jsp 작성 ( bean 객체를 사용하여 TestDAO 에 있는 데이터를 dao 라는 변수로 저장 > dao 의 getList() 메소드를 사용하여 얻어지는 값들을 list 변수에 저장 > 해당 list 를 for Each 문을 사용하여 dto 라는 변수로 받아서 사용
sendRedirect() : 클라이언트에게 주소를 전송한 뒤 클라이언트가 서버에 전달받은 주소를 다시 요청
forward() : 클라이언트에게 주소를 요청하지 않고 서버에서 처리하여 내부의 경로를 출력
액션 태그를 사용하여 로그인 성공 시 코드 작성
main.jsp 에서는 request 값이 forward 로 넘어와서 scope 의 범위 내에서 작동하기 때문에 id 와 msg 파라미터를 페이지가 이동되었음에도 사용할 수 있다.
include 태그
파일 세팅
파일 세팅 완료
ex01.jsp 작성
jsp_include.jsp 와 tag_include.jsp 를 작성
각각 jsp 액션 태그와 기본 태그를 사용하여 작성
ex01.jsp 에 변수 생성 후 각 페이지에서 확인
>> jsp 액션 태그를 사용해서는 include 로 가져온 변수를 사용할 수 없다. ( 기존 태그를 사용해야 함 )
useBean 태그
파일 세팅
create table mem_jsp(
id varchar2(20) primary key,
pwd varchar2(20),
name varchar2(20),
addr varchar2(100),
tel varchar2(20)
);
insert into mem_jsp values('aaa','aaa','홍길동','산골짜기','010-xxx-xxx');
insert into mem_jsp values('bbb','bbb','김개똥','개똥별','010-xxx-xxx');
insert into mem_jsp values('ccc','ccc','고길똥','마포구','010-xxx-xxx');
commit;
sql 문 실행
파일 세팅 완료
MemberDTO.java 에 DB 에 저장된 데이터 형식 선언 후 getter / setter 생성
ex01.jsp 에서 bean 객체에 DTO 객체를 담아 setter 를 이용해 값을 저장하고 getter 를 이용해 불러와 출력
register_form.jsp 에 작성
register.jsp 에 기존 방식으로 저장하여 사용하는 코드 작성
register_form.jsp 에 넘어온 값들을 setProperty 로 한꺼번에 DTO 에 저장 후 각 값에 1 기입 후 전송
단, setProperty 를 이용해서 bean 객체에 저장할때 넘어오는 이름과 DTO 의 변수 이름이 동일해야 한다
index.jsp 파일 작성
register_form.jsp 와 show_list.jsp 파일에 index.jsp 를 include
MemberDAO.java 에 DB 연동 코드 작성
ojdbc8.jar 추가
show_list.jsp 에 MemberDAO 를 객체화하여 실행시킨 뒤 콘솔창에 --- 드라이브 로드 성공 --- 문구가 출력되면 정상적으로 DB 에 연동되었다는 의미
jsp 태그로 bean 객체를 만들어 memberDAO 를 객체를 생성
MemberDAO.java 파일에 DB 에서 mem_jsp 테이블의 정보를 DTO 에 담아서 return 하는 getList() 메소드 선언
이후 show_list.jsp 에서 이 getList() 메소드를 사용하여 list 변수에 담고 해당 list 사이즈를 출력하면 콘솔 창에 DB 에 저장된 행의 갯수인 3이 출력됨
create table member_jsp(
id varchar2(20) primary key,
name varchar2(20),
kor number,
eng number,
math number
);
insert into member_jsp values('aaa','Hong',100,100,100);
insert into member_jsp values('bbb','Kim',90,90,90);
insert into member_jsp values('ccc','Go',80,80,80);
commit;
sql 문 실행
driver.jsp 작성, 연동 성공 문구 콘솔창에 출력되어야 DB 연동 성공 ( 11 버전 : xe, 이후 버전 : orcl )
DriverManager 와 Connection 클래스 import 필요
select_all.jsp 에서 driver.jsp 파일을 include 해서 con 객체를 받아와서 출력 및 각 name 에 a 태그 추가
쿼리문 실행 결과를 담은 ResultSet 의 구성 rs.next() 를 사용하여 다음 값이 있는지 확인
select_all.jsp 페이지에서 이름을 클릭했을때 a 태그로 파라미터 값과 함께 전달되는 것 select_one.jsp 에서 확인
select_all.jsp 에서 넘겨받은 파라미터 값을 가지고 select_all.jsp 에서 DB 에 접근하여 내용을 표시
create table paging(
num number not null,
title varchar2(30) not null,
pdate varchar2(10) not null,
count number not null,
primary key(num)
);
create sequence test_num;
글 작성시 이동되는 /write 경로 page_router.js 에 작성 ( post 방식 )
page_controller.js 에 async - await 을 통해 동기처리 하여 작성
page_service.js 에 pageInsert 부분 작성
pageDAO.js 에 글에 관련된 데이터 DB 에 저장하는 로직 작성 ( nextval : DB 에 sequence 로 생성해놓은 1씩 값이 증가하며 저장되는 부분을 의미 )
서버 실행
글 작성부분 구현 완료
글 상세보기 구현
list.ejs 에 글 타이틀에 글 번호를 경로로 하는 a 태그 작성
page_router.js 에 경로 작성 :num 으로 글 번호를 변수로 받음
page_controller.js 에 변수로 받은 num 을 service 로 넘겨주는 코드 작성
page_service.js 에 넘겨받은 글 번호를 dao 쪽으로 넘겨서 연산하는 코드 작성
dao 에 넘겨 받은 글 번호랑 일치하는 행을 찾는 코드를 작성 후 return 으로 해당 데이터를 service 로 반환
content.ejs 작성
글 상세보기 구현 완료
조회수 증가시키는 부분 구현
page_service.js 에 조회수 증가시키는 부분 로직 작성
dao 에 조회수 증가 로직 작성
서버 실행 ( 만약 조회수가 글을 눌러서 상세보기가 켜지자 마자 늘어나길 원한다면 조회수 늘어나는 로직에 async - await 을 적용해주면 된다 )
글 조회수 증가 구현 완료
페이징 처리
페이징 방식
글의 총 갯수를 가져오는 totalContent 를 page_controller.js 에 작성
page_service.js 에 글 전체 갯수 가져오는 로직 작성
pageDAO.js 에 DB 에 접근하여 전체 글 갯수 가져오는 로직 작성
list.ejs 에 totalContent 출력해 봄 ( 콘솔과 웹 출력 결과물 )
페이지를 확인할 수 있는 start 라는 변수를 생성하여 로직을 작성할 것, page_controller.js 작성
page_service.js 에서 로직 작성
start 값을 출력해 봄
이전을 누르면 start -1 값을 전달, 다음을 누르면 start +1 값을 전달, start 값이 1이면 이전 버튼을 비활성화, start 값이 totalContent 와 같아면 다음 버튼을 비활성화
rownum : 가상의 행의 수
( 의미는 없지만, 만약 글의 번호로 데이터를 처리한다고 가정했을 때 한 페이지에 글을 5개씩 출력하고자 할 때 2번째 작성 글이 삭제되었다면 오류가 발생하거나 첫번째 페이지에 1, 3, 4, 5 글 4개만 출력되게 된다..... 그래서 오라클에서 지원하는 가상의 행{결과 값이 출력되는 행만큼 임의의 번호를 붙여주는 rownum}인 rownum 을 사용하여 글이 삭제되었어도 빈 값이 없이 1, 3, 4, 5, 6 식으로 출력되게끔 설정한다 )
마지막 페이지 값을 담은 page 정보도 page_controller.js 에 작성
page_service.js 에서 pageNum 에 한 페이지 당 출력될 글의 갯수 설정 후 연산을 통해 toPage(총 페이지) 설정, startNum 과 endNum 은 DB 에 글의 rownum 연산을 할 때 필요한 값을 선언 ( start 는 현재 몇번째 페이지인지 나타냄 )
page_service.js 에서 페이지 정보를 DAO 에 전달하여 연산
list.ejs 에서 전달받은 page 의 totPage(토탈 페이지) 값으로 목록을 출력한다