[JAVA+Taglib+Oracle 게시판] 05. 내용보기 구현

    반응형

    리스트 페이지가 보여지지만 현재 클릭했을 때 아무 것도 보이지 않는다.

     

    클릭하면 제목, 내용, 작성자, 조회수 등이 뜨게끔 수정해보겠다.

     

    수정 후 리스트 페이지는 이렇게 떠야 한다.

     

    1.  컨트롤러작성

    아래 코드를 BController.java에 삽입해 준다.

    	@RequestMapping("/contentView")
    	public String contentView(HttpServletRequest request, Model model) {
    		
    		System.out.println("-------- contentView() 호출 ----------");
    		
    		model.addAttribute("request", request);
    		//HttpServletRequest로 전 전 페이지 정보를 가져와 request에 저장함.
    		
    		cmd = new ContentCmd(); //bbsCommand에 ContentCmd를 불러와 cmd에 저장
    		
    		cmd.service(model);//model 파라미터를 service메소드에 넣어서 동작
    		
    		return "contentView";
    	}

     

    2. list.jsp 파일 수정

    위의 ContentCmd.java를 만들어 주기 전에 리스트 페이지를 수정한다.

     

    테이블 안에서 내용을 보여주는 td태그 안의 내용만 수정한다.

    <table border="1" cellpadding="0" cellspacing="0" width="500">
    		<tr>
    			<td>번호</td>
    			<td>제목</td>
    			<td>작성자</td>
    			<td>날짜</td>
    			<td>조회수</td>
    		</tr>
    				<!-- 게시글 목록 가져오기 -->
    		<c:forEach items="${list}" var="vo">	
    		<!-- ListCmd에서 만들었던 모델 list를 컨트롤러를 통해 받아온다.-->
    		<tr>
    			<td>${vo.bNo}</td>
    			<!-- 제목을 클릭하면 페이지가 넘어가면서 번호 정보를 가져온다. -->
    			<td><a href="contentView?bNo=${vo.bNo}">${vo.bSubject}</a></td>
    			<td>${vo.bName}</td>
    			<td>${vo.bDate}</td>
    			<td>${vo.bHit}</td>
    		</tr>
    		</c:forEach>
    		<tr>
    			<td colspan="5" align="center"><a href="writeForm">글쓰기</a></td>
    		</tr>
    		
    	</table>

     

    3. Cmd 작성

    bbsCommand 패키지에 ContentCmd.java 파일을 생성

     

    그 뒤 아래의 코드를 입력

     

    ContentCmd.java

    package com.spring.bbsCommand;
    
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.ui.Model;
    
    import com.spring.bbsDAO.BDAO;
    import com.spring.bbsVO.BVO;
    
    public class ContentCmd implements Bcmd {
    
    	@Override
    	public void service(Model model) {
    		//모델을 받아 맵형태로 바꿔줌.
    		Map<String, Object> map = model.asMap();
    		
    		//1번글을 클릭하면 1번, 2번글을 클릭하면 2번을 전달받아야 함. 컨트롤러의 리퀘스트가 맵안에 있다. 이것을  HttpServletRequest로 저장
    		HttpServletRequest request = (HttpServletRequest)map.get("request");
    		
    		String bNo = request.getParameter("bNo");
    		
    		//dao 불러오기
    		BDAO dao = new BDAO();
    		
    		//조회수증가와 내용가져옴
    		BVO bVo = dao.contentView(bNo);
    		
    		//모델에 추가
    		model.addAttribute("contentView", bVo);
    	}
    
    }
    

     

    4. BDAO에 contentView 추가

    위에서 dao의 contentview() 메소드를 사용하였으므로 BDAO에 그 메소드를 정의해줘야한다.

     

    BDAO.java에 contentView메소드를 추가

    public BVO contentView(String bbsNo) {
    	//return하는 bVo가 VO에서 가져온 것이므로 BVO를 타입으로 사용함
    	//String bbsNo가 	bNo임
    	
    		//조회수 로직으로
    		addHit(bbsNo);
    		
    		BVO bVo = null;
    		
    		//많이 보던 형식 커넥션, 프리페어드, 리절트셋.  데이타소스  >> 그뒤 sql
    		Connection connection = null;
    		PreparedStatement preparedStatement = null;
    		ResultSet resultSet = null;
    		
    		try {
    			connection = dataSource.getConnection();
    			
    			String sql = "select * from mvc_bbs where bNo = ?";
    			preparedStatement = connection.prepareStatement(sql);
    			preparedStatement.setInt(1, Integer.parseInt(bbsNo));
    			resultSet = preparedStatement.executeQuery();
    			
    			if(resultSet.next()) {
    				int bNo = resultSet.getInt("bNo");
    				String bName = resultSet.getString("bName");
    				String bSubject = resultSet.getString("bSubject");
    				String bContent = resultSet.getString("bContent");
    				Timestamp bDate = resultSet.getTimestamp("bDate");
    				
    				int bHit = resultSet.getInt("bHit");
    				int bGroup = resultSet.getInt("bGroup");
    				int bStep = resultSet.getInt("bStep");
    				int bIndent = resultSet.getInt("bIndent");
    				
    				//값을 가져왔으니 bVo에
    				
    				bVo = new BVO(bNo, bName, bSubject, bContent, bDate, bHit, bGroup, bStep, bIndent);
    			}
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			//finally에 클로즈 처리
    			
    			try {
    				if(resultSet != null) resultSet.close();
    				if(preparedStatement != null) preparedStatement.close();
    				if(connection != null) connection.close();
    				
    				
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    			
    			
    		}
    		
    		return bVo;
    	}//contentView()

     

    5. BDAO에 클릭하면 조회수가 증가 하는 메소드를 만든다.

     

    BDAO.java에 아래 코드 입력

    //조회수 늘어나는 로직
    	private void addHit(String bNo) {
    		Connection connection = null;
    		PreparedStatement preparedStatement = null;
    		
    		try {
    			connection = dataSource.getConnection();
    			String sql = "update mvc_bbs set bHit = bHit + 1 where bNo = ?";
    			preparedStatement = connection.prepareStatement(sql);
    			preparedStatement.setString(1, bNo); //1은 첫번째 물음표 값을 입력
    			
    			int n = preparedStatement.executeUpdate();
    			
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if(preparedStatement != null) preparedStatement.close();
    				if(connection != null) connection.close();
    				
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    		}
    	}//addHit()

     

    6. contentView.jsp 생성

    그 뒤 view폴더에 contentView.jsp를 만들어 아래코드를 입력

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>글내용 보기</title>
    </head>
    <body>
    		<div align="center">
    			<h2>글내용 확인</h2>
    			<hr width="500" color="green" />
    			<table width="500" cellpadding="0" cellspacing="0" border="1">
    			<form action="" method="post">
    			<tr>
    				<td>번호</td>
    				<td>${contentView.bNo}</td>
    			</tr>
    			<tr>
    				<td>조회수</td>
    				<td>${contentView.bHit}</td>
    			</tr>
    						<tr>
    				<td>작성자</td>
    				<td><input type="text" name="bName" value="${contentView.bName }"></td>
    			</tr>
    						<tr>
    				<td>제목</td>
    				<td><input type="text" name="bSubject" value="${contentView.bSubject}"></td>
    			</tr>
    						<tr>
    				<td>내용</td>
    				<td><textarea rows = "10" name="bContent">${contenctView.bContent}</textarea></td>
    			</tr>
    			<tr>
    				<td colspan="2" align="center"><input type="submit" value="수정하기" />
    								&nbsp;&nbsp;&nbsp;<a href="list">목록보기</a>
    								&nbsp;&nbsp;&nbsp;<a href="#">삭제</a>
    								&nbsp;&nbsp;&nbsp;<a href="#">답변</a>
    				</td>
    			</tr>
    			
    			
    			</form>
    			
    			
    			</table>
    			
    			
    		</div>
    		</body>
    </html>

     

    수정하기는 아직 만들지 않았다.

    클릭하면 조회수가 1씩 증가하는 것을 볼 수 있다.

     

    내용 보여주는 곳 까지 파일로 저장해놨으니 아래 참조

     

    springBBS 내용보여주는 곳 까지.zip
    0.06MB

    반응형

    댓글