Servlet게시판2: 게시판 글쓰기

BoardFrontController.java의 doProcess()의 주소비교 후 처리부분에 코드 추가

  • 글 저장구조 : .jsp(뷰) -> servlet(컨트롤러) -> .java(모델) -> DB로 이동
    • .jsp(뷰) -> DB 바로 갈수 없으므로 .java(모델)가 필요하다.
    • .jsp(뷰) -> .java(모델) 바로 갈 수 없으므로 servlet이 필요하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//2. 주소비교 후 처리
System.out.println("--------------@ 주소 비교 후 처리 @-------------");
Action action = null;
ActionForward forward = null;

//2-1. 글쓰기 동작 : 글 입력 + DB저장
if(command.equals("/BoardWrite.bo")){
System.out.println("컨트롤러: BoardWrite.bo주소요청");
//ActionForward 객체생성되면 2가지 정보를 저장할 수 있음 =>setPath(), setRedirect()
//ActionForward 객체를 생성한다고 해서 바로 페이지이동이 가능하지않다. 이 객체는 이동할 정보만 가지고 있다.
forward = new ActionForward();
forward.setPath("./board/writeForm.jsp");
forward.setRedirect(false); //주소는 `*.bo` 화면은 `.jsp`
System.out.println("컨트롤러:./board/writeForm.jsp로 이동준비완료");
}else if(command.equals("/BoardWriteAction.bo")){
//글 하려면 : .jsp(뷰) -> servlet(컨트롤러) -> .java(모델) -> DB로 이동 해야한다

//BoardWriteAction 생성 아래 두가지 방식
try{
//1.forward = new BoardWriteAction().execute(req, resp);
//가바지라서 메모리에서 사라지기때문에 필요할때마다 삭제되어버려서 사용하려면다시 만들기를 반복해야한다
//따라서 아래 2번째방법 주로 사용
//2.
action = new BoardWriteAction();
forward = action.execute(request, response);
} catch(Exception e){
e.printStackTrace();
}
}




writeForm.jsp 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%
System.out.println("뷰: .jsp페이지로 이동완료");
String id = (String) session.getAttribute("id");
%>
<fieldset>
<legend>게시판 글쓰기</legend>
<form action="./BoardWriteAction.bo" method="post" name="fr">
글쓴이 : <input type="text" name="name" required><br>
비밀번호 : <input type="password" name="pw" required><br>
제목 : <input type="text" name="subject" maxlength="15" required><br>
내용 : <br>
<textarea rows="10" cols="35" name="content" placeholder="여기에 작성해주세요" required></textarea><br>
<input type="submit" value="글등록" class="btn">
<button type="reset" class="btn">초기화</button>
<input type="button" value="목록으로" class="btn" onclick="location.href='.//BoardList.bo'">
</form>
</fieldset>




BoardWriteAction.java 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class BoardWriteAction implements Action {

@Override
public ActionForward execute(HttpServletRequest req, HttpServletResponse resp) throws Exception {
System.out.println("모델: BoardWriteAction안의 execute() 실행됨");
//1. 한글처리
req.setCharacterEncoding("UTF-8");

//2.전달되는 파라미터 정보저장 ->MemberDTO생성
BoardDTO bdto = new BoardDTO();
bdto.setName(req.getParameter("name"));
bdto.setPw(req.getParameter("pw"));
bdto.setSubject(req.getParameter("subject"));
bdto.setContent(req.getParameter("content"));
//추가로 ip정보 가져오기
bdto.setIp(req.getRemoteAddr());

//3.BoardDAO객체생성
BoardDAO bdao = new BoardDAO();
int result = bdao.insertBoard(bdto);

//4페이지 이동
ActionForward forward = new ActionForward();

if(result == 1){ // 글하나 작성완료
forward.setPath("./BoardList.bo");
forward.setRedirect(true);
}else{
//에러 상황( 자바스크립트 / 페이지 이동 )
forward.setPath("./Main.me");
forward.setRedirect(true);
}
return forward;
}
}




BoardDAO.java에 insertBoard()메서드 추가 코드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//글쓰기
public int insertBoard(BoardDTO bdto){
int result = 0;
int bno = 0;

try {
getCon(); // con 인스턴스 변수에 저장완료
// 글번호 계산
sql = "select max(bno) from itwill_board";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()){
bno = rs.getInt(1)+1; //인덱스 사용 호출
//rs.getInt("max(bno)"); // 컬럼명 사용 호출
}
System.out.println("DAO : 글번호 "+bno);
sql ="insert into itwill_board(bno,name,passwd,subject,content,"
+ "readcount,re_ref,re_lev,re_seq,date,file,ip) "
+ "values(?,?,?,?,?,"
+ "?,?,?,?,now(),"
+ "?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, bno);
pstmt.setString(2, bdto.getName());
pstmt.setString(3, bdto.getPw());
pstmt.setString(4, bdto.getSubject());
pstmt.setString(5, bdto.getContent());
pstmt.setInt(6, 0); //조회수 0
pstmt.setInt(7, bno); // 일반글 == re_ref
pstmt.setInt(8, 0); // 일반글 lev = 0
pstmt.setInt(9, 0); // 일반글 seq = 0
pstmt.setString(10, bdto.getIp());
pstmt.setString(11, bdto.getFile());
// 실행
result = pstmt.executeUpdate();
System.out.println("DAO : 글쓰기 완료! ");
} catch (Exception e) {
e.printStackTrace();
} finally {
closeDB();
}
return result;
}//end of insertBoard