반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 라이젠
  • 정올알고리즘 정올 알고리즘
  • 일어키보드
  • 빠른 시작 켜기
  • 4700u
  • Github CLI
  • stackset
  • github actions
  • cfn
  • AWS
  • 키보드매핑
  • jdk14
  • ubuntu terminal
  • GIT
  • alt tab
  • chromium edge
  • docker ps
  • 크로미움 엣지
  • docker
  • 문법 체크
  • github
  • angular cli
  • docker desktop
  • 빠른 시작 끄기
  • wsl_update_x64
  • handson
  • transit gateway peering
  • vmmem
  • wsl2
  • transit_gateway

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

프로그래밍/Web

MVC Model2 패턴 / 간이 게시판 제작 기록 (3/4)

2017. 11. 11. 09:08
반응형



이 페이지에서는 수정과 삭제를 다루도록 하겠다.



게시글 추가가 가능했다면 수정 기능도 거의 비슷하다


먼저 수정 jsp에 접근할 공간을 찾아보자

게시글을 수정한다면, 게시글을 표현해주는 구체적인 페이지가 좋겠고

그 페이지는 상세 페이지가 좋을 것이다.


상세 페이지의 코드는 생략하도록 한다. 

SQL 코드의 차이를 제외하면 조회 코드와 거의 유사하다.






수정 페이지는 대략 이런페이지로 구성되어있다..


수정 버튼을 클릭하게 되면 이러한 구체적인 페이지로 넘어가게끔 한다.






제목과 내용 항목은 모두 readonly 형태로 구성한다


작성시간은 자동으로 수정될 것이며

제목과 내용 이외의 항목이 수정되는 것은 너무나 부자연스럽다.



이젠 jsp를 살펴보자

상세페이지에서 버튼을 만들어준다.

<form class="form-group" action="board-update" method="post">
<li><a class="btn btn-default" href="board-update?bno=${vo.bno}">게시글 수정</a></li>


게시글을 수정했을 시 컨트롤러를 호출하게끔 설정해준다.


href의 board - update는 서블릿에 맵핑된 주소이고

뒤에 붙은 코드는

게시글의 번호를 같이 보내주기 위한 el 코드이다

게시글의 고유키를 알아야 수정이 가능하기에


게시글 번호를 반드시 보내줘야 한다.

보내는 방식은 post로 보낸다.


나중에 업데이트가 리턴값을 받을 공간이 필요하기도 하거니와

모든 제목, 컨텐츠 정보를 get으로 받을 경우

주소가 기하급수적으로 늘어날 우려가 있고, 보안문제도 있기에

post가 적합하다


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");

int bno = Integer.parseInt(request.getParameter("bno"));
String title = request.getParameter("title");
String content = request.getParameter("content");
String userid = request.getParameter("userid");

System.out.println("BoardUpdateServlet::doPost(bno=" + bno + ", userid=" + userid + ")");

Board board = new Board(bno, title, content, userid, null);
int result = boardService.update(board);


컨트롤 서블릿에 오게되면 doGet이 데이터를 받게된다.


doPost에서 boardService의 upate를 불러주도록 한다.


추가와 마찬가지로 boardService의 select는 boardDaoImple의 update 불러준다.


회원번호에 의한 수정이 필요하기에 매개변수로 넣어준다.


이렇게 보내진 매개변수 정보는 


@Override
public int update(Board board) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(SQL_UPDATE);
pstmt.setString(1, board.getTitle());
pstmt.setString(2, board.getContent());
pstmt.setInt(3, board.getBno());

result = pstmt.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}

return result;
} // end update()


업데이트 메소드가 받게 될것이다.


조회메소드와 거의 차이가 없는데


차이점을 몇가지 꼽아보자면


먼저 sql문


public static final String SQL_UPDATE =
"update test_board "
+ " set title = ?, content = ?, regdate = sysdate "
+ " where bno = ?";

이러한 형태이다.


번호로 조회를 하고, 그에 맞는 타이틀, 내용을 수정해주는 코드이다


수정한 시간을 기준으로 날짜데이터도 교체를 할것이기에


sysdate를 넣어준다. 이코드는 오라클이 받아서


자동으로 날자데이터를 반환하게 해줄 코드이다.


또한 result의 리턴값을 저장할 메소드의 형태가 다르다


조회의 경우 executeQuery를 이용했는데

수정의 경우 executeUpdate를 이용한다.

이 두 메소드의 차이는 리턴값이다 쿼리의 경우 resultSet.

즉 관련 오브젝트의 집합을 리턴하는데


업데이트의 경우 성공과 실패를 구분하는 1/0만을 리턴하기 때문에


이렇게 된다.


이렇게 되면 모든 수정은 끝나고


리턴값을 컨트롤 서블릿으로 돌려주게 된다.



// 수정 완료 후 상세보기 페이지로 이동 - 리다이렉트
response.sendRedirect("board-detail?bno=" + bno);


컨트롤 서블릿은 이 리턴값을 받아 상세페이지 보기로 넘어가게 된다.


일반적으로 게시글을 수정하면 그 게시글의 수정을 확인할 수 있게끔

상세 페이지로 이동하는 것이 알맞을 것이다.



이렇게 되면 모든 수정이 완료되게 된다.








다음으로 삭제를 살펴보면



삭제도 마찬가지로 게시판 서비스의 형태 기능이기 때문에


서비스 -> Dao를 통한 기능구현이다.


업데이트보다 매우 간단하다.


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int bno = Integer.parseInt(request.getParameter("bno"));
System.out.println("BoardDeleteServlet::doGet(bno=" + bno + ")");

int result = boardService.delete(bno);


삭제 버튼을 통해 서블릿 페이지로 들어왔다면


서비스 클래스의 delete를 만나게 될것이다


이 delete는 dao로 연결해주며


dao는 데이터베이스에 있는 정보를 게시번호로 식별하여(bno) 삭제를 진행할 것이다.


@Override
public int delete(int bno) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(SQL_DELETE);
pstmt.setInt(1, bno);
result = pstmt.executeUpdate();

} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}

return result;
}


delete의 메소드는 이러한 방식이다


성공과 실패로 구분하기에 excuteUpdate() 메소드를 사용하며

result는 성공(1) 과 실패(0)으로 리턴한다.


dao 인터페이스에 기록된 sql 명령어는


public static final String SQL_DELETE =
"delete from test_board where bno = ?";

의 형태를 띈다


이러한 sql명령어를 처리하고 난 뒤

서블릿으로 돌아가서 서블릿은


// 삭제 완료 후에는 게시판 메인 페이지(board-main)으로 리다이렉트
response.sendRedirect("board-main");

메인페이지로 보내도록 한다.

삭제된 글을 상세페이지로 보내는 것은 이상하니까.






다음은 마지막으로 검색 페이지를 다루도록 하겠다.

반응형

'프로그래밍 > Web' 카테고리의 다른 글

MVC Model2 패턴 / 간이 게시판 제작 기록 (4/4)  (0) 2017.11.11
MVC Model2 패턴 / 간이 게시판 제작 기록 (2/4)  (0) 2017.11.11
MVC Model2 패턴 / 간이 게시판 제작 기록 (1/4)  (0) 2017.11.11
    '프로그래밍/Web' 카테고리의 다른 글
    • JSP에서 쿠키와 세션
    • MVC Model2 패턴 / 간이 게시판 제작 기록 (4/4)
    • MVC Model2 패턴 / 간이 게시판 제작 기록 (2/4)
    • MVC Model2 패턴 / 간이 게시판 제작 기록 (1/4)
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바