본문 바로가기

컴퓨터학원(복습)(수료)

자바(JAVA)기반 안드로이드 웹&앱 개발 65일차 (MVC Model2 적용 게시판)

수,목 평가가 있어서... 해당 내용은 주말에 올리겠습니다.

게시판 페이징, 비밀번호 암호화(BCrypt, SHA256)를 해야하는데.. 자꾸 안드로이드 때도 그렇고 안배운거 시험에 내시니까 힘드네요 ㅎㅎ..그래도 해봐야죠!

 

------------------------------

[MVC Model2 적용 게시판)

게시판 구조

1. 기존 main.jsp에서 게시글 리스트로 가는 button을 추가한다.

1) <c:url value="/board/list.do" var="burl">

(1) /board/list.do 라는 값을 burl 이라는 변수에 넣는 것입니다.

2) onclick="location.href='${burl}'">

(1) 버튼을 눌렀을 때 {burl}의 주소로 갑니다.

2. WebContent\property/commandHandlerURI.properties에 board 주소들을 추가합니다.

commandHandlerURI.properties

1) /board/list.do=board.command.BoardListHandler

(1) /board/list.do 는 board.command.BoardListHandler 경로로 간다는 의미입니다.

3. board 테이블을 생성합니다. (mySQL)

create table board (

num integer(5) primary key auto_increment,

pass varchar(30),

name varchar(30),

email varchar(30),

title varchar(50),

content varchar(1000),

readcount integer(4) default 0,

writedate timestamp default current_timestamp );

4. board.dto.BoardVO.java (자바빈) 을 생성합니다.

1) 생성한 board 테이블과 똑같이 변수들을 입력한 후 Getter/Setter 들을 생성합니다.

(해당 클래스 빈공간 우클릭 > source 클릭 > Generate Getter and Setter 클릭)

5. util.DBManager.java 를 생성합니다. (JDBC 를 관리하는 클래스입니다.)

1) DBManager는 getConnection(), close(conn, stmt, rs) close(conn, stmt), clolse(rs)를

가지고 있습니다. 자원을 반납해주는 메소드입니다.

6. board.dao.BoardDAO.java 클래스를 생성합니다. ( Database Access Object )

BoardDAO 1

BoardDAO 2

BoardDAO 3

1) BoardDAO는

List 형태로 게시판들을 가져오는 selectAllBoards()

새로운게시판을 DB에 삽입하는 insertBoard()

게시글 조회 수를 갱신하는 updateReadCount()

게시판 글 상세 내용을 보여주는 selectOneBoardByNum()

게시판 생성 시 작성했던 Password를 체크하는 checkPassWord()

게시판을 삭제해주는 deleteBoard() 가 있습니다.

2) List<BoardVO> selectAllBoards()

(1) num을 기준으로 내림차순 정렬(desc)을 하여 board를 조회한 것을 List<BoardVO> 에 넣습니다.

(2) rs.next()로 BoardVO 들을 하나 씩 커서처럼 찍어서 list에 add합니다.[list.add(bVO)]

(3) 여기서 중요한건 자원을 반납하여야 하는데, try( Connection ~ stmt.executeQuery(sql) )

안에다가 넣어주면 자동으로 종료되므로 따로 close()를 할 필요가 없습니다.

※ PreparedStatement 와 Statement의 차이

(갑자기 문득 궁금해져서. IT개념 칸에 따로 정리해서 올리겠습니다.)

https://mozi.tistory.com/29

[JAVA] PreparedStatement 와 Statement 차이점 알아보기

Statement 와 PreparedStatement SQL 을 실행할 수 있는 객체입니다. Statement 1. 단일로 사용될 때 빠른 속도를 지닙니다. 2. 쿼리에 인자를 부여할 수 없습니다. 3. 매번 컴파일을 수행해야 합니다. PreparedSt..

mozi.tistory.com

7. BoardListHandler.java (MVC 중 C)를 작성합니다.

( 요청된 URI 에 대한 파라미터(정보)를 가지고 ControllerUsingURI.JAVA에 넘기는 클래스입니다.)

BoardListHandler.java

1) Handler에 대한 메소드 설명(?)은 저번 https://blog.naver.com/tnwnsrla/222377329824

64일차에서 자세히 적어놨으므로 생략하겠습니다.

8. board/boardList.jsp 를 작성합니다. (MVC 중 View)

boardList.jsp

1) BoardListHandler.java에서 setAttribute 한 boardList(items)를 가져와 var="board"에 넣습니다.

2) {board.num}으로 boardList(items) -> board -> board 의 num == board.num을 가져오는 것입니다.

3) view.do?num 은 view.do 페이지에서 num={board.num}으로 파라미터를 받아 해당

{board.title}(게시판제목) 를 클릭하면 해당 게시글 내용을 보여주는 페이지로 가게 하는 것입니다.

9. BoardWriteHandler.java를 생성합니다.

BoardWriteHandler.java

10. boardWrite.jsp 를 생성합니다.

boardWrite.jsp

11. js/board.js 를 작성하여 유효성 검사에 대한 사항들을 작성합니다.

board.js

12. BoardViewHandler.java를 작성합니다.

BoardViewHandler.java

1) 사용자가 Board.Title 을 클릭하였을 때 보여지는 화면이므로 게시글 조회수가 올라가야합니다. 그래서

bDao.updateReadCount(num)이 존재합니다.

13. boardView.jsp를 작성합니다.

boardView.jsp

14. BoardCheckPassHandler.java 를 작성합니다.

BoardCheckPassHandler.java

1) req.getParameter("pass")로 해당 게시물에 대한 pass워드 값을 받아오고 새로 입력하는 password 와

동일한지 비교합니다. bVo.getPass().equals(pass)

15. boardCheckPass.jsp 를 작성합니다.

boardCheckPass.jsp

16. checkSuccess.jsp를 작성합니다.

checkSucces.jsp

1) boardView.jsp 에서 '게시글 수정'과 '게시글 삭제' 버튼을 보시면 open_win 으로 버튼을 눌렀을 때

check_pass.do 로 이동하면서 board.num 값을 파라미터로 주고 update, delete name을 줍니다.

(check_pass.do 에서 비밀번호 대조)

2) update, delete name을 if문으로 판단하여, 해당 name 에 맞는 update.do 와 delete.do 로

보내면서 param.num 을 가져옵니다.

17. BoardUpdateHandler.java를 생성합니다. (게시판 수정)

BoardUpdateHandler.java

1) processSubmit() == "POST" 로 수정을 하였다면 response.sendRedirect("list.do")로

다시 게시글리스트로 보내주는 것이 중요합니다.

18. boardUpdate.jsp 를 생성합니다. (게시판 수정 View)

boardUpdate.jsp

19. BoardDelteHandler.java를 생성합니다. (게시판 삭제)

BoardDeleteHandler.java

1) BoardUpdateHandler.java 와 마찬가지로 작업을 완료한 후 res.sendRedirect("list.do")로

보내는 것이 중요합니다.

끝.