본문으로 바로가기

02. Spring MVC 게시판 구현③ - 게시글 상세정보

category IT/SpringDay 2022. 5. 17. 23:27

1. 게시글에서 제목을 누르면

   <a href="content_view?bId=${mvc_board.bId}">${mvc_board.bTitle}</a>

   @RequestMapping("/content_view") 연결됨.

 

2. Controller

  - @RequestMapping("/content_view") 매핑된 메소드 실행 

@RequestMapping("/content_view")
	public String content_view(HttpServletRequest request, Model model) {
		logger.info("content_view start...");
		//list.jsp에  content_view?bId=${mvc_board.bId} 
		model.addAttribute("request", request);
		command = new BContentCommand();
		command.execute(model);
		
		return "content_view";
	}

 

3. BContentCommand(Service)

  - Controller의 model.addAttribute("request", request);
  - 모델의 객체를 맵으로 받음.

  - map에 저장된 request의 밸류값을 request에 저장.

package com.oracle.oMVCBoard.command;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.ui.Model;

import com.oracle.oMVCBoard.dao.BDao;
import com.oracle.oMVCBoard.dto.BDto;

public class BContentCommand implements BCommand {

	@Override
	public void execute(Model model) {
		//   key     value
		Map<String, Object> map = model.asMap();
		//Controller의 model.addAttribute("request", request);
		//모델의 객체를 맵으로 받음.
		HttpServletRequest request = (HttpServletRequest) map.get("request");
		//map에 저장된 request의 밸류값을 request에 저장.
		int bId = Integer.parseInt(request.getParameter("bId"));
		BDao dao = new BDao();
		BDto board = dao.contentView(bId);
		model.addAttribute("mvc_board", board);

	}

}

 

4. BDao

   - 게시글을 선택하면 무조건 조회수++ 되도록 upHit메소드 실행. 반환값은 필요없으므로 void로 작성 

public BDto contentView(int bId) {
		//조회수
		upHit(bId);
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		BDto dto = null;
		String sql = "select * from mvc_board where bId = ?";
		
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bId);
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				int bId2 = rs.getInt("bId");
				String bName = rs.getString("bName");
				String bTitle = rs.getString("bTitle");
				String bContent = rs.getString("bContent");
				Timestamp bDate = rs.getTimestamp("bDate");
				int bHit = rs.getInt("bHit");
				int bGroup = rs.getInt("bGroup");
				int bStep = rs.getInt("bStep");
				int bIndent = rs.getInt("bIndent");
				dto = new BDto(bId2, bName, bTitle, bContent, bDate, bHit, bGroup, bStep, bIndent);
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return dto;
	}

	private void upHit(int bId) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = "update mvc_board set bHit=bHit+1 where bId=?";
		int result = 0;
		
		try {
			conn = dataSource.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bId);
			result = pstmt.executeUpdate();
			if(result > 0 ) System.out.println("upHit 성공");
			else            System.out.println("upHit 실패");
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println("upHit error ->"+ e.getMessage());  
		} finally {
			try {
				if(pstmt != null) pstmt.close();
				if(conn != null) conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
		
	}

 

5. Controller에서 content_view.jsp로 이동

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="modify" method="post">
		<input type="hidden" name="bId" value="${mvc_board.bId }">
		<table border="1">
			<tr>
				<td>번호</td><td>${mvc_board.bId }</td>
			</tr>
			<tr>
				<td>히트</td><td>${mvc_board.bHit }</td>
			</tr>
			<tr>
				<td>이름</td><td><input type="text" name="bName" value="${mvc_board.bName }"></td>
			</tr>
			<tr>
				<td>제목</td><td><input type="text" name="bTitle" value="${mvc_board.bTitle }"></td>
			</tr>
			<tr>
				<td>내용</td>
				<td><textarea rows="10" name="bContent">${mvc_board.bContent }</textarea></td>
			</tr>
			<tr>
				<td colspan="2"><input type="submit" value="수정">&nbsp;&nbsp;
				<a href="list">목록보기</a>&nbsp;&nbsp;
				<a href="delete?bId=${mvc_board.bId }">삭제</a>&nbsp;&nbsp;
				<a href="reply_view?bId=${mvc_board.bId }">답변</a></td>
			</tr>
		</table>
	</form>
</body>
</html>

 

6. 응답화면