3층 1구역 - 개발의 장/Spring
spring - 회원제 게시판 구현하기 - 게시판(5) [조회수 증가] (2022-11-07)
상이태상
2022. 11. 8. 00:04
1. 서론
이번에 조회수 증가를 해보도록 하자.
2. 본론
많이 추가할 내용은 없다.
BoardController.java(전체)
package com.care.pra.board.controller;
import java.io.File;
import java.io.FileInputStream;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.care.pra.board.service.IBoardService;
@Controller
public class BoardController {
//console창에 해당 로그가 찍힌다. 따라서 프로그램의 오류 발생 시 어디서 어떤 이유로 오류가 발생했는지
//알 수 있어 이슈처리가 용이하다.
final static Logger logger = LoggerFactory.getLogger(BoardController.class);
@Autowired IBoardService service;
@RequestMapping(value = "writeProc")
public String writeProc(MultipartHttpServletRequest multi) {
service.writeProc(multi);
return "forward:boardProc";
}
@RequestMapping(value = "boardProc")
public String boardProc(Model model) {
service.boardProc(model, 0, null, null);
return "forward:/index?formpath=board";
}
//제이쿼리를 통해 viewProc값을 받게 된다.
@RequestMapping(value = "viewProc")
public String viewProc(@RequestParam(value = "writeNo", required = false) String writeNo, Model model) {
//만약 게시물 번호가 없거나 비어있다면
if(writeNo == null || writeNo == "")
return "forward:/index?formpath=board";
//넘겨받은 게시물의 번호를 정수 자료형으로 변환한다.
int no = Integer.parseInt(writeNo);
service.viewProc(no, model);
service.upHit(no);
return "forward:/index?formpath=view";
}
@RequestMapping(value = "download")
public void download(@RequestParam(value = "file") String fileName, HttpServletResponse res) throws Exception {
if(fileName == "" || "파일 없음".equals(fileName))
return;
res.addHeader("Content-disposition", "attachment; filename="+fileName);
File file = new File(IBoardService.FILE_LOCATION + "\\" + fileName);
FileInputStream input = new FileInputStream(file);
FileCopyUtils.copy(input, res.getOutputStream());
input.close();
}
}
BoardController.java(추가된 코드)
service.upHit(no);
BoardServiceImpl.java(전체)
package com.care.pra.board.service;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.care.pra.board.BoardDTO;
import com.care.pra.board.repository.IBoardDAO;
@Service
public class BoardServiceImpl implements IBoardService{
@Autowired IBoardDAO mapper;
@Autowired HttpSession session;
@Override
public void writeProc(MultipartHttpServletRequest multi) {
String id = (String)session.getAttribute("id");
String title = multi.getParameter("title");
String content = multi.getParameter("content");
MultipartFile file = multi.getFile("fileName");
BoardDTO dto = new BoardDTO();
dto.setId(id);
dto.setTitle(title);
dto.setContent(content);
dto.setHit(0);
SimpleDateFormat writeFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String writeDate = writeFormat.format(date);
dto.setWriteDate(writeDate);
if(file.getSize() != 0) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss-");
Calendar calen = Calendar.getInstance();
String fileName = sdf.format(calen.getTime()) + file.getOriginalFilename();
dto.setFileName(fileName);
File save = new File(IBoardService.FILE_LOCATION + "\\" + fileName);
System.out.println(file.getOriginalFilename());
try {
file.transferTo(save);
} catch (Exception e) {
e.printStackTrace();
}
}else
dto.setFileName("파일 없음");
mapper.writeProc(dto);
}
@Override
public void viewProc(int no, Model model) {
model.addAttribute("board", mapper.viewProc(no));
}
@Override
public void boardProc(Model model, int currentPage, String search, String select) {
ArrayList<BoardDTO> boardList = mapper.boardProc();
model.addAttribute("boardList", boardList);
}
@Override
public void upHit(int no) {
mapper.upHit(no);
}
}
BoardServiceImpl.java(추가된 코드)
@Override
public void upHit(int no) {
mapper.upHit(no);
}
IBoardDAO.java(전체)
package com.care.pra.board.repository;
import java.util.ArrayList;
import org.springframework.stereotype.Repository;
import com.care.pra.board.BoardDTO;
@Repository
public interface IBoardDAO {
void writeProc(BoardDTO dto);
ArrayList<BoardDTO> boardProc();
BoardDTO viewProc(int no);
void upHit(int no);
}
boardMapper.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="com.care.pra.board.repository.IBoardDAO">
<insert id="writeProc" parameterType="com.care.pra.board.BoardDTO">
<selectKey keyProperty="no" resultType="int" order="BEFORE">
SELECT nvl(max(no), 0)+1 FROM quiz_board
</selectKey>
INSERT INTO quiz_board VALUES(#{no}, #{id}, #{title}, #{content}, #{fileName}, #{writeDate}, #{hit} )
</insert>
<select id="boardProc" resultType="com.care.pra.board.BoardDTO">
SELECT * FROM quiz_board
</select>
<select id="viewProc" resultType="com.care.pra.board.BoardDTO" parameterType="int">
SELECT * FROM quiz_board WHERE no=#{no}
</select>
<update id="upHit" parameterType="int" >
UPDATE quiz_board SET hit=hit+1 WHERE no=#{no}
</update>
</mapper>
결과....결과를 보자.....
맨 아래에 있는 글을 클릭해보도록 하자 현재 조회수는 8이다.
조회수가 9가 되었다