반응형
리스트 페이지가 보여지지만 현재 클릭했을 때 아무 것도 보이지 않는다.
클릭하면 제목, 내용, 작성자, 조회수 등이 뜨게끔 수정해보겠다.
수정 후 리스트 페이지는 이렇게 떠야 한다.
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="수정하기" />
<a href="list">목록보기</a>
<a href="#">삭제</a>
<a href="#">답변</a>
</td>
</tr>
</form>
</table>
</div>
</body>
</html>
수정하기는 아직 만들지 않았다.
클릭하면 조회수가 1씩 증가하는 것을 볼 수 있다.
내용 보여주는 곳 까지 파일로 저장해놨으니 아래 참조
반응형
'스프링 프레임워크 > PJT_게시판 만들기' 카테고리의 다른 글
[JAVA+Taglib+Oracle 게시판] 06. 수정, 삭제 구현 (0) | 2019.07.15 |
---|---|
[JAVA+Taglib+Oracle 게시판] 04. 글쓰기 구현 (0) | 2019.06.10 |
[JAVA+Taglib+Oracle 게시판] 03. 리스트 페이지 로직 설명 (0) | 2019.06.09 |
[JAVA+Taglib+Oracle 게시판] 02. 리스트 페이지 만들기 (0) | 2019.06.07 |
[JAVA+Taglib+Oracle 게시판] 01. 개발환경 세팅 (0) | 2019.05.30 |