본문 바로가기
SPRING

[SPRING] 09/16 게시판만들기-2

by KhyeonS 2022. 9. 16.

조회수 기능!!

 

BoardDAO 수정

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import vo.BoardVO;

public class BoardDAO {
	
	SqlSession sqlSession;
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	//전체 게시글 조회
	public List<BoardVO> selectList(){
		List<BoardVO> list = sqlSession.selectList("b.board_list");
		return list;
	}
	
	//새글추가
	public int insert(BoardVO vo) {
		int res=sqlSession.insert("b.board_insert", vo);
		return res;
	}
	
	//상세보기를 위한 게시글 한 건 조회
	public BoardVO selectOne(int idx) {
		BoardVO vo=sqlSession.selectOne("b.board_one", idx);
		return vo;
	}
	//조회수 증가
	public int update_readhit(int idx) {
		int res = sqlSession.update("b.update_readhit",idx);
		return res;
	}


}

BoardController 수정

package com.korea.board;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import dao.BoardDAO;
import util.Util;
import vo.BoardVO;

@Controller
public class BoardController {
	
	@Autowired
	HttpServletRequest request;
	
	BoardDAO board_dao;
	public void setBoard_dao(BoardDAO board_dao) {
		this.board_dao = board_dao;
	}
	
	//전체 게시글 조회
	@RequestMapping(value={"/", "/list.do"})
	public String seletList(Model model){
		
		List<BoardVO> list=	board_dao.selectList();
		model.addAttribute("list", list);
		
		//show라는 이름으로 저장된 값을 제거
		request.getSession().removeAttribute("show");
		
		
		return Util.Board.VIEW_PATH+ "board_list.jsp";
	}
	
	//새글 작성을 위한 페이지로 전환
	@RequestMapping("/insert_form.do")
	public String insert_form() {
		return Util.Board.VIEW_PATH + "board_write.jsp";
	}
	
	//새글쓰기
	@RequestMapping("/insert.do")
	public String insert(BoardVO vo) {
		
		//ip가져오기
		String ip=request.getRemoteAddr();
		vo.setIp(ip);
		
		int res= board_dao.insert(vo);
		
		return "redirect:list.do";
		
	}
	
	//게시글 상세보기
		@RequestMapping("/view.do")
		public String view(Model model, int idx) {


			BoardVO vo =board_dao.selectOne(idx);
			model.addAttribute("vo", vo);
			
			HttpSession session = request.getSession();
			String show =(String)session.getAttribute("show");
			
			if (show == null) {
				//조회수 증가를 위한 업데이트메서드
				board_dao.update_readhit(idx);
				session.setAttribute("show", "");
			}

			return Util.Board.VIEW_PATH + "board_view.jsp";
			

		}	


}

board.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="b">

	<select id="board_list" resultType="board">
		select * from sboard order by ref DESC, step ASC
	</select>

	<!-- 새글 추가 -->
	<insert id="board_insert" parameterType="board">
		insert into sboard values(
		seq_sboard_idx.nextVal,
		#{name},
		#{subject},
		#{content},
		#{pwd},
		#{ip},
		sysdate,
		0,
		seq_sboard_idx.currVal,
		0,
		0,
		0
		)
	</insert>
	
	<!-- 상세보기 -->
	<select id="board_one" parameterType="int" resultType="board">
		select * from sboard where idx=#{idx}
	</select>
	
	<!-- 조회수 증가 -->
	<update id="update_readhit" parameterType="int">
		<!-- idx에 해당되는 게시글의 readhit를 1씩 증가 -->
		update sboard set readhit = readhit + 1
		where idx=#{idx}
	</update>
	
</mapper>

이렇게 조회수가 늘은것을 볼수 있다.


댓글쓰기~~!!

board_view.jsp 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	function reply(f){
	
		location.href="reply_form.do?idx="+f.idx.value+"&ref="+f.ref.value;
		
	}
</script>

</head>
<body>
<form>
<input type="hidden" name="idx" value="${vo.idx}">
<input type="hidden" name="ref" value="${vo.ref}">
<input type="hidden" name="pwd" value="${vo.pwd}">
	<table border="1" width="600">
		<tr>
			<th>제목</th>
			<td>${vo.subject}</td>
		</tr>
		<tr>
			<th>작성자</th>
			<td>${vo.name}</td>
		</tr>
		<tr>
			<th>작성일</th>
			<td>${vo.regdate}</td>
		</tr>
		<tr>
			<td colspan="2"><pre>${vo.content}</pre></td>
		</tr>
		
		<tr>
			<th>비밀번호</th>
			<td>
				<input type="password" name="c_pwd">
			</td>
		</tr>
		<tr>
			<td colspan="2">
			<input type="button" value="목록으로" onclick="location.href='list.do'">
			<c:if test="${vo.depth lt 1 }">
			<!-- eq - equal ( = )ne - not equal ( <> )lt - little ( < ) 
			le - little or equal ( <= )gt - greater ( > )ge - greater or equal ( >= )  -->
			<input type="button" value="댓글달기" onclick="reply(this.form);">
			</c:if>
			<input type="button" value="삭제" onclick="del(this.form);">
			</td>
		</tr>
	</table>
	
	</form>
</body>
</html>

BoardController 수정

package com.korea.board;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import dao.BoardDAO;
import util.Util;
import vo.BoardVO;

@Controller
public class BoardController {

	@Autowired
	HttpServletRequest request;

	BoardDAO board_dao;
	public void setBoard_dao(BoardDAO board_dao) {
		this.board_dao = board_dao;
	}

	//전체 게시글 조회
	@RequestMapping(value={"/", "/list.do"})
	public String seletList(Model model){

		List<BoardVO> list=	board_dao.selectList();
		model.addAttribute("list", list);

		//show라는 이름으로 저장된 값을 제거
		request.getSession().removeAttribute("show");


		return Util.Board.VIEW_PATH+ "board_list.jsp";
	}

	//새글 작성을 위한 페이지로 전환
	@RequestMapping("/insert_form.do")
	public String insert_form() {
		return Util.Board.VIEW_PATH + "board_write.jsp";
	}

	//새글쓰기
	@RequestMapping("/insert.do")
	public String insert(BoardVO vo) {

		//ip가져오기
		String ip=request.getRemoteAddr();
		vo.setIp(ip);

		int res= board_dao.insert(vo);

		return "redirect:list.do";

	}

	//게시글 상세보기
	@RequestMapping("/view.do")
	public String view(Model model, int idx) {


		BoardVO vo =board_dao.selectOne(idx);
		model.addAttribute("vo", vo);

		HttpSession session = request.getSession();
		String show =(String)session.getAttribute("show");

		if (show == null) {
			//조회수 증가를 위한 업데이트메서드
			board_dao.update_readhit(idx);
			session.setAttribute("show", "");
		}

		return Util.Board.VIEW_PATH + "board_view.jsp";


	}

	//댓글 작성을 위한 페이지로 전환
	@RequestMapping("/reply_form.do")
	public String replyForm(Model model, int idx, int ref) {
		
		model.addAttribute("idx", idx);
		model.addAttribute("ref", ref);
		return Util.Board.VIEW_PATH + "board_reply.jsp";
	}
	
	//댓글쓰기
	@RequestMapping("/reply.do")
	public String reply(BoardVO vo) {
		
		//ip가져오기
		String ip=request.getRemoteAddr();
		vo.setIp(ip);
		
		BoardVO baseVo=board_dao.selectOne(vo.getIdx());
		
		//댓글작성을 위한 기준글의 step이상인 값은 +1처리를 해주자
		board_dao.update_step(baseVo);
		
		//댓글이 들어갈 위치를 설정
		vo.setStep(baseVo.getStep()+1);
		vo.setDepth(baseVo.getDepth()+1);
		
		//댓글 추가
		board_dao.reply(vo);
		
		return "redirect:list.do";
		
	}


}

board_write 복사해서 board_reply 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script>
	function send_check(f){
		//유효성 체크 했다고 하고
		
		//비밀번호 유효성 체크
		var pwdPattern = /^[A-Za-z0-9]{4,10}$/;

		//영문과 숫자로 이루어진 비밀번호	
		if(!pwdPattern.test(f.pwd.value)){
			alert("비밀번호 형식을 확인하세요");
			return;
		}	
		f.submit();
		
	}
</script>
</head>
<body>
<form method="post" action="reply.do">

<input type="hidden" name="ref" value="${ref }">
<input type="hidden" name="idx" value="${idx }">

<table border="1" align="center" width="610">
<caption>:::댓글 쓰기:::</caption>
	<tr>
		<th>제목</th>
		<td><input name="subject" style="width:300px"></td>
	</tr>
	<tr>
		<th>작성자</th>
		<td><input name="name" style="width:300px"></td>
	</tr>
	<tr>
		<th>내용</th>
		<td><textarea name="content" rows="10" cols="70"></textarea></td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td><input name="pwd" type="password" style="width:300px"></td>
	</tr>
	
	<tr>
	<td colspan="2" align="right">
	 <input type="button" value="등록" onclick="send_check(this.form);">
	 <input type="button" value="취소" onclick="location.href='list.do'">
	 
	</td>
	</tr>
</table>
</form>
</body>
</html>

BoardDAO 수정

package dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import vo.BoardVO;

public class BoardDAO {
	
	SqlSession sqlSession;
	public void setSqlSession(SqlSession sqlSession) {
		this.sqlSession = sqlSession;
	}
	
	//전체 게시글 조회
	public List<BoardVO> selectList(){
		List<BoardVO> list = sqlSession.selectList("b.board_list");
		return list;
	}
	
	//새글추가
	public int insert(BoardVO vo) {
		int res=sqlSession.insert("b.board_insert", vo);
		return res;
	}
	
	//상세보기를 위한 게시글 한 건 조회
	public BoardVO selectOne(int idx) {
		BoardVO vo=sqlSession.selectOne("b.board_one", idx);
		return vo;
	}
	//조회수 증가
	public int update_readhit(int idx) {
		int res = sqlSession.update("b.update_readhit",idx);
		return res;
	}
	
	//댓글 작성을 위한 step값 증가
	public int update_step(BoardVO vo) {
		
		int res=sqlSession.update("b.update_step", vo);
		return res;
		
	}
	
	//댓글 작성
	public int reply(BoardVO vo) {
		int res =sqlSession.insert("b.board_reply", vo);
		return res;
		
	}


}

board.xml 수정

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="b">

	<select id="board_list" resultType="board">
		select * from sboard order by ref DESC, step ASC
	</select>

	<!-- 새글 추가 -->
	<insert id="board_insert" parameterType="board">
		insert into sboard values(
		seq_sboard_idx.nextVal,
		#{name},
		#{subject},
		#{content},
		#{pwd},
		#{ip},
		sysdate,
		0,
		seq_sboard_idx.currVal,
		0,
		0,
		0
		)
	</insert>
	
	<!-- 상세보기 -->
	<select id="board_one" parameterType="int" resultType="board">
		select * from sboard where idx=#{idx}
	</select>
	
	<!-- 조회수 증가 -->
	<update id="update_readhit" parameterType="int">
		<!-- idx에 해당되는 게시글의 readhit를 1씩 증가 -->
		update sboard set readhit = readhit + 1
		where idx=#{idx}
	</update>
	<!-- step 값 증가 -->
	<update id="update_step" parameterType="board">
		update sboard set step = step + 1
		where ref=#{ref} and step > #{step}
	</update>
	
	<!-- 댓글쓰기 -->
	<insert id="board_reply" parameterType="board">
		insert into sboard values(
			seq_sboard_idx.nextVal,
			#{name},
			#{subject},
			#{content},
			#{pwd},
			#{ip},
			sysdate,
			0,
			#{ref},
			#{step},
			#{depth},
			0
		)
		
	</insert>
</mapper>

댓글에는 댓글달기가 사라짐
2022_0915_Board.7z
0.01MB

 

'SPRING' 카테고리의 다른 글

[SPRING] 09/19 게시판만들기 -3  (1) 2022.09.19
[SPRING] 0915 게시판 만들기-1  (0) 2022.09.15
[SPRING] 09/14 방명록에 사진 첨부  (0) 2022.09.14
[SPRING] 09/13 글쓰기 기능, 수정 추가  (0) 2022.09.13
[SPRING] 09/08  (0) 2022.09.08

댓글