반응형
- 회원제 게시판에서는 반드시 로그인 후에 글쓰기 페이지로 진입 가능 (로그인이 안 된 상태라면 로그인 페이지로 이동)
→ 앞에서 만들었던 LoginForm.jsp를 그대로 사용 - 글쓰기 처리 프로세스와 담당 모듈(파일)
1. 로그인 여부 확인
1) 로그인 정보가 없을 때 로그인 페이지로 이동
- 프로젝트의 WebContent → Board에서 IsLoggedIn.jsp 파일 생성
// WebContent/Board/IsLoggedIn.jsp
<%@ page import="utils.JSFunction"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
if (session.getAttribute("UserId") == null { //1.
JSFunction.alertLocation("로그인 후 이용해주십시오.", "../Session/LoginForm.jsp", out); //2.
return; //3.
}
%>
- sesion 영역에 “UserId”라는 속성값이 있는지 확인 - 값이 null이면 로그인하지 않은 상태
- 로그인하지 않았다면(=1.의 값이 null이면), “로그인 후 이용해주십시오”라는 문구를 경고창에 띄운 후 로그인 페이지로 이동
→ 앞에서 만들었던 utils 패키지의 JSFunction 클래스 재사용 - 특정한 조건에서 실행을 멈추고 싶을 때는 반드시 return문을 써줘야 함
2) 글쓰기 페이지 구현
- 프로젝트의 WebContent → Board에서 Write.jsp 파일 생성
// WebContent/Board/Write.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%> <!--1.로그인 확인-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원제 게시판</title>
<script type="text/javascript">
function validateForm(form) { //2.폼 내용 검증
if (form.title.value == "") {
alert("제목을 입력하세요.");
form.title.focus();
return false;
}
if (form.title.value == "") {
alert("내용을 입력하세요.");
form.content.focus();
return false;
}
}
</script>
</head>
<body>
<jsp:include page="../Common/Link.jsp" />
<h2>회원제 게시판 - 글쓰기(Write)</h2>
<form name="writeFrm" method="post" action="WriteProcess.jsp" <!-- 3. -->
onsubmit="return validateForm(this);"> <!-- 4. -->
<table border="1" width="90%">
<tr>
<td>제목</td>
<td> <!-- 5. -->
<input type="text" name="title" style="width: 90%;" />
</td>
</tr>
<tr>
<td>내용</td>
<td> <!-- 6. -->
<textarea name="content" style="width: 90%; height= 100px;"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<button type="submit">작성 완료</button> <!-- 7. -->
<button type="reset">다시 입력</button>
<button type="button" onclick="location.href='List.jsp';">
목록 보기
</button>
</td>
</tr>
</table>
</form>
</body>
</html>
- 글쓰기 페이지는 로그인해야 진입할 수 있으므로, 앞서 작성한 IsLoggedIn.jsp를 삽입
- 자바스크립트 함수: 폼에 필수 항목인 ‘제목’과 ‘내용’이 입력되어 있는지 확인하고, 값이 비어 있다면 경고창을 띄우고 포커스를 이동시킨 후에 실패를 뜻하는 false 반환
- 폼의 이름(writeForm), 전송 방식(post), 폼값을 전송할 경로(WriteProcess.jsp)를 지정함
- [작성 완료] 버튼을 눌렀을 때(=submit 이벤트가 발생했을 때), 2.의 validateForm() 함수를 호출
→ 검증 함수가 false를 반환하면 폼값을 전송하지 않음 - 글의 제목 입력란
- 글의 내용 입력란
- [작성 완료] 버튼: List.jsp를 실행해서 제목과 내용을 입력하고 이 버튼을 누르면, WriteProcess.jsp로 폼값이 전송됨
→ 이 폼값을 받아 데이터베이스에 추가하려면 먼저 DAO 클래스에 메소드를 추가해야 함
3) DAO에 글쓰기 메소드 추가
- 프로젝트의 Java Resources → src → model1 → board에서 BoardDAO.java 파일을 열고, insertWrite( ) 메소드 추가
// Java Resources/src/model1/board/BoardDAO.java
... 생략 ...
public class BoardDAO extends JDBConnect {
... 생략 ...
//1.게시글 데이터를 받아 DB에 추가
public int insertWrite(BoardDTO dto) {
int result = 0;
try {
//2.insert 쿼리문 작성
String query = "insert into board ( "
+ " num,title,content,id,visitcount) "
+ " values ( "
+ " seq_board_num.NEXTVAL, ?, ?, ?, 0)"; //3.
psmt = con.prepareStatement(query); //4.동적 쿼리
//5.(아래 코드 3줄)
psmt.setString(1, dto.getTitle());
psmt.setString(2, dto.getContent());
psmt.setString(3, dto.getId());
result = psmt.executeUpdate(); //6.
}
catch (Exception e) {
System.out.println("게시물 입력 중 예외 발생");
e.printStackTrace();
}
return result; //7.
}
}
- insertWrite( ) 메소드: BoardDTO 타입의 매개변수를 받은 후, 데이터를 insert 한 후 insert에 성공한 행의 개수를 정수로 반환
- 여기서 insert 쿼리문 작성
- 제목, 내용, 아이디를 모두 인파라미터(?)로 설정
- 인파라미터가 있는 동적 쿼리이므로 PreparedStatement 객체 생성
- 3에서 사용자가 입력한 값 대입
- insert 쿼리를 실행하면, 추가한 행의 개수를 성공적으로 돌려줌
- 6.의 값을 JSP로 반환
4) 글쓰기 처리 페이지 생성
- 사용자가 글을 입력할 글쓰기 페이지와, 글 내용을 DB에 저장해 줄 DAO 객체를 연결하면 됨
- 프로젝트의 WebContent → Board에서 WriteProcess.jsp 파일 생성
// WebContent/Board/WriteProcess.jsp
<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%> //1.
<%
//2.폼값 받기
String title = request.getParameter("title");
String content = request.getParameter("content");
//3.폼값을 DTO 객체에 저장
BoardDTO dto = new BoardDTO();
dto.setTitle(title);
dto.setContent(content);
dto.setId(session.getAttribute("UserId").toString()); //4.
//5.DAO 객체를 통해 DB에 DTO 저장
BoardDAO dao = new BoardDAO(application);
int iResult = dao.insertWrite(dto);
dao.close();
//성공 or 실패?
if (iResult == 1) {
response.sendRedirect("List.jsp"); //6.
} else {
JSFunction.alertBack("글쓰기에 실패하였습니다", out); //7.
}
%>
- 로그인 확인을 위해 include: 글쓰기 페이지에서 세션 유지 시간이 지날 동안 동작이 없었다면, 로그인이 해제됨
- 전송된 폼값
- 2.를 DTO 객체에 담음
- session 영역에 저장된 사용자 아이디를 DTO에 담음 → board 테이블의 id 컬럼은 member 테이블의 id 컬럼과 외래키로 설정되어 있으므로, id가 빈 값이면 insert할 때 제약조건 위배로 오류 발생
- 앞 절에서 작성한 insertWrite() 메소드를 호출해 DB에 저장
- 입력 결과에 따라 성공 → 목록 페이지로 이동
- 입력 결과에 따라 실패 → 경고창을 띄운 후 글쓰기 페이지(=이전 페이지)로 이동
5) 동작 확인 - Write.jsp 파일 실행
(1) [확인] 버튼을 누르면 로그인 페이지(앞서 생성했던 LoginForm.jsp)로 이동
(2) 아이디에 “hello” 비밀번호에 “1234”를 입력 후 [로그인하기] 버튼 클릭
(3) 로그인 후, 상단 공통 링크의 [게시판(페이징 X)] 링크 클릭
(4) 게시글 목록이 보이면, 오른쪽 아래의 [글쓰기] 클릭해서 글쓰기 페이지로 진입
- 글쓰기 페이지 정상 출력
(5) 글쓰기 페이지에서 ‘내용’ 항목만 입력 후 [작성 완료] 버튼을 눌러 보면, “제목을 입력하세요.”란 경고창 확인 가능
(6) ‘제목’ 항목까지 입력하고 다시 [작성 완료] 버튼 클릭
- 목록 보기 페이지(List.jsp)로 이동하며, 새로 작성한 게시물이 등록됨
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 26. 모델1 방식의 회원제 게시판 만들기 - 게시글 수정하기 (1) | 2024.01.05 |
---|---|
JAVA/JSP 25. 모델1 방식의 회원제 게시판 만들기 - 게시글 상세 보기 (1) | 2024.01.01 |
JAVA/JSP 23. 모델1 방식의 회원제 게시판 만들기 - 게시판 목록 페이지 (1) | 2023.12.30 |
JAVA/JSP 22. 모델1 방식의 회원제 게시판 만들기 - 프로젝트 구상, 모델1 구조와 모델2 구조(MVC 패턴) (0) | 2023.12.27 |
JAVA/JSP 21. 액션 태그(Action Tag) - <jsp:param> (1) | 2023.12.23 |