본문 바로가기
✨ Back-end/Servlet

[Servlet / JSP / SQL / Template / Session] 회원 관리 폼 만들기 (5) - 게시글 등록 (INSERT)

by 환풍 2023. 2. 28.
728x90
반응형

 

게시글을 등록하는 글쓰기를 만들어 보려고 한다.


글쓰기 버튼이 어디있는지 살펴보자.

webapp / view / content / board_list.jsp 파일에 있다.

input 타입이 button으로 되어 있으니, form action = "boardDetail.bo"로 가지 않고 직접 경로를 지정해준다.

onclick="goBoardWrite(); input 태그내에 경로를 위처럼 자바스크립트 형태로 만들어주었는데,

단, 위 c:if test ~~ 문장으로 세션에 들어있는 loginInfo 값이 빈 값이 아닌,, 즉, 일치할 때 (로그인이 되었을 때) 쓸 수 있다.

html head태그 밑에 <script>를 써서 자바스크립트 문법으로 board_write.bo로 보내는것으로 코드를 짜보았다.

 

BoardController.java 서블릿

 해당 서블릿으로 이동하면 별다른 코드없이 바로 board_write.jsp로 가라고 한다.

 

 board_write.jsp

 

이번엔 input type을 submit으로 주어 TITLE의 name과 CONTENT의 name 값을 갖고서

write_commit.bo 서블릿으로 이동한다.

 

BoardController.java 서블릿

board_write.jsp에서 전달해준 title과 content name 값들을 문자열로 받아 저장 시켜주었다.

이후 바로 board-mapper.xml로 돌아가자.

 

board-mapper.xml

resultMap은 select 쿼리가 있을때 받아서 사용하지만, 나중에 사용할 것이니 미리 만들어두고,

게시글 등록을 위해 insert문을 사용해 쿼리를 타이핑 했다.

VALUES 값으로 받아오는 BOARD_NUM 자리에 (SELECT NVL(MAX(BOARD_NUM), 0) + 1 FROM BOARD)

NVL은 Oracle 카테고리에 언급한 적이 한번 있다.  NVL은 (~~, 0 )에서 ~~의 NULL 값을 0으로 바꿔주세요. 이다

BOARD 테이블에서 BOARD_NUM의 최대값이 현재 없기 때문에 NULL인데, 이것을 0으로 바꾼 후, +1 하라는 뜻이다.

이후, BOARD_NUM의 값은 1이 되면서 0으로 초기화 하지 않고 다음번에는 +1을 더해 2, 3, 4 이런식으로 증가한다.

mapper를 완료했으면 service패키지로 돌아온다.

 

매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
 2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
 2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨.
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.

BoardService.java 인터페이스

insert 쿼리를 사용했고, 조회 결과는 등록 한줄이므로 DTO객체를 사용한다.

insert쿼리문에서 만들었던 id가 메소드 명이되고, 매개변수로 boardDTO를 받을 수 있다.

 

BoardServiceImpl.java 클래스

Impl 클래스로 넘어와 게시글 등록 오버라이딩을 생성해 준 후sqlSession을 삽입하고 커밋까지 완료해준다.

 

BoardController.java 서블릿

이후 아까 나중에 하려고 했던 작업을 시작하자. 먼저 로그인 한 정보를 가져오기 위해 세션을 불러온다.

세션에 있는 loginInfo를 MemberDTO객체의 loginInfo 데이터에 넣어줄 수 있다.

이때 session은 Object 자료형이기 때문에 (MemberDTO)을 이용해 형변환해서 loginInfo에 넣어줄 수 있다.

이후 BoardDTO로 새로운 board 객체 공간을 생성해 준 후 세터를 이용해 각 데이터들을 넣어준다.

loginInfo의 MemId값을 board의 Writer에 넣어준다.

이후 쿼리 작성을 해주었던 boardService에서 insertBoard의 매개변수 값을 board로 설정한 후

"list"라는 이름으로 boardList.bo 페이지로 뿌려준다.

주석으로 칠한 List는 게시글 리스트를 뽑아내는 것이나, 다음에 해보려고 한다. 일단 생략하고,

이렇게 해서 board_list.jsp로 페이지로 갈 수 있다.

TITLE과 CONTENT에 데이터를 입력하고 글 등록을 눌렀는데, BOARD 게시판은 텅텅 비어있다. 왜그런가?

분명 데이터 베이스에서도 잘 들어가있다. 이유는 저장된 데이터를 List형태로 아직 출력하지 않아서이다.

다음 장에서는 등록된 게시글 리스트를 조회하는 방법에 대해서 알아보자.

728x90
반응형

댓글