본문 바로가기

웹 개발/JSP

[Web_JSP] 18

실습(MVC(board))

- [Web_JSP] 17 이어서

 

1. BoardVO.java

package com.board.app.domain.vo;

public class BoardVO {
	private int boardNumber;
	private String boardTitle;
	private String boardContent;
	private int memberNumber;
	private String boardDate;
	private int readCount;
	
	public BoardVO() {;}

	public int getBoardNumber() {
		return boardNumber;
	}
 
	public void setBoardNumber(int boardNumber) {
		this.boardNumber = boardNumber;
	}

	public String getBoardTitle() {
		return boardTitle;
	}

	public void setBoardTitle(String boardTitle) {
		this.boardTitle = boardTitle;
	}

	public String getBoardContent() {
		return boardContent;
	}

	public void setBoardContent(String boardContent) {
		this.boardContent = boardContent;
	}

	public int getMemberNumber() {
		return memberNumber;
	}

	public void setMemberNumber(int memberNumber) {
		this.memberNumber = memberNumber;
	}

	public String getBoardDate() {
		return boardDate;
	}

	public void setBoardDate(String boardDate) {
		this.boardDate = boardDate;
	}

	public int getReadCount() {
		return readCount;
	}

	public void setReadCount(int readCount) {
		this.readCount = readCount;
	}
}

 

 

 

2. BoardDTO.java

package com.board.app.domain.vo;
 
// 나는 기존 테이블의 컬럼의 변형 또는 이외의 연산이 있을 경우에는
// 클래스이름 뒤에 DTO를 붙이겠다. 
public class BoardDTO {
	private int boardNumber;
	private String boardTitle;
	private String boardContent;
	private int memberNumber;
	private String memberId;
	private String boardDate;
	private int readCount;
	
	public BoardDTO() {;}

	public BoardDTO(BoardVO boardVO) {
		super();
		this.memberNumber = boardVO.getMemberNumber();
		this.boardNumber = boardVO.getBoardNumber();
		this.boardTitle = boardVO.getBoardTitle();
		this.boardContent = boardVO.getBoardContent();
		this.boardDate = boardVO.getBoardDate();
		this.readCount = boardVO.getReadCount();
	}

	public int getBoardNumber() {
		return boardNumber;
	}

	public void setBoardNumber(int boardNumber) {
		this.boardNumber = boardNumber;
	}

	public String getBoardTitle() {
		return boardTitle;
	}

	public void setBoardTitle(String boardTitle) {
		this.boardTitle = boardTitle;
	}

	public String getBoardContent() {
		return boardContent;
	}

	public void setBoardContent(String boardContent) {
		this.boardContent = boardContent;
	}

	public int getMemberNumber() {
		return memberNumber;
	}

	public void setMemberNumber(int memberNumber) {
		this.memberNumber = memberNumber;
	}

	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}

	public String getBoardDate() {
		return boardDate;
	}

	public void setBoardDate(String boardDate) {
		this.boardDate = boardDate;
	}

	public int getReadCount() {
		return readCount;
	}

	public void setReadCount(int readCount) {
		this.readCount = readCount;
	}
}

 

 

 

3. BoardDAO.java

package com.board.app.domain.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.board.app.domain.vo.BoardDTO;
import com.board.app.domain.vo.BoardVO;
import com.mybatis.config.MyBatisConfig; 

public class BoardDAO {
	SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
	SqlSession sqlSession;
	
	public BoardDAO() {
		sqlSession = sqlSessionFactory.openSession(true);
	}
	
	//게시글 목록
	public List<BoardDTO> selectAll(Map<String, Integer> boardMap) {
		return sqlSession.selectList("Board.selectAll", boardMap);
	}
	
	//게시글 전체 개수
	public int getTotal() {
		return sqlSession.selectOne("Board.getTotal");
	}
	
	//게시글 정보 조회
	public BoardDTO selectDetail(int boardNumber) {
		return sqlSession.selectOne("Board.selectDetail", boardNumber);
	}
	
	//게시글 조회수 증가
	public void updateReadCount(int boardNumber) {
		sqlSession.update("Board.updateReadCount", boardNumber);
	}
	
	//최근 게시글 번호
	public int getSeq() {
		return sqlSession.selectOne("Board.getSeq");
	}
	
	//게시글 추가
	public void insert(BoardVO board) {
		sqlSession.insert("Board.insert", board);
	}
	
	//게시글 삭제
	public void delete(int boardNumber) {
		sqlSession.delete("Board.delete", boardNumber);
	}
	
	//게시글 수정
	public void update(BoardVO board) {
		sqlSession.update("Board.update", board);
	}
	
}

 

 

 

4. BoardMapper.xml

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

	<select id="selectAll" parameterType="map" resultType="boardDTO">
		select board_number, board_title, board_content, member_id, board_date, read_count 
		from tbl_board b join tbl_member m 
		on b.member_number = m.member_number
		order by 1 desc limit #{startRow}, #{rowCount}
	</select>
	 
	<!-- 게시글 전체 개수  -->
	<select id="getTotal" resultType="_int">
		select count(board_number) from tbl_board
	</select>
	
	<!-- 게시글 상세보기(전체 정보 조회) -->
	<select id="selectDetail" parameterType="_int" resultType="boardDTO">
		select board_number, board_title, board_content, b.member_number, member_id 
		from tbl_board b join tbl_member m
		on  b.member_number = m.member_number and board_number = #{boardNumber}
	</select>
	
	<!-- 조회수 -->
	<update id="updateReadCount" parameterType="_int">
		update tbl_board
		set read_count = read_count + 1
		where board_number = #{boardNumber}
	</update>
	
	<!-- 최근 게시글 번호 -->
	<select id="getSeq" resultType="_int">
		select board_number from tbl_board
		order by 1 desc limit 0, 1
	</select>
	
	<!-- 게시글 작성 -->
	<insert id="insert" parameterType="boardVO">
		insert into tbl_board (board_title, board_content, member_number, board_date) 
		values(#{boardTitle}, #{boardContent}, #{memberNumber}, now())
	</insert>
	
	<!-- 게시글 삭제 -->
	<delete id="delete" parameterType="_int">
		delete from tbl_board where board_number = #{boardNumber}
	</delete>
	
	<!-- 게시글 수정 -->
	<update id="update" parameterType="boardVO">
		update tbl_board
		set board_title=#{boardTitle}, board_content=#{boardContent}
		where board_number = #{boardNumber}
	</update>
	
</mapper>

 

 

 

5. FileVO.java

package com.board.app.domain.vo;

public class FileVO {
	
	private String fileName;
	private String fileNameOriginal;
	private int boardNumber;
	
	public FileVO() {;}
 
	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	public String getFileNameOriginal() {
		return fileNameOriginal;
	}

	public void setFileNameOriginal(String fileNameOrigianl) {
		this.fileNameOriginal = fileNameOrigianl;
	}

	public int getBoardNumber() {
		return boardNumber;
	}

	public void setBoardNumber(int boardNumber) {
		this.boardNumber = boardNumber;
	}
}

 

 

 

6. FileDAO.java

package com.board.app.domain.dao;

import java.util.Enumeration;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.board.app.domain.vo.BoardDTO;
import com.board.app.domain.vo.BoardVO; 
import com.board.app.domain.vo.FileVO;
import com.mybatis.config.MyBatisConfig;
import com.oreilly.servlet.MultipartRequest;

public class FileDAO {
	SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
	SqlSession sqlSession;
	
	public FileDAO() {
		sqlSession = sqlSessionFactory.openSession(true);
	}
	
	public void insert(MultipartRequest multipartRequest, int boardNumber) {
		FileVO file = new FileVO();
		//type="file"인 태그의 name 값들
		Enumeration<String> files = multipartRequest.getFileNames();
		
		while(files.hasMoreElements()) {
			String name = files.nextElement();
			//원본 파일 이름
			String fileNameOriginal = multipartRequest.getOriginalFileName(name);
			//중복 시 변경되는 이름
			String fileName = multipartRequest.getFilesystemName(name);
			
			if(fileName == null) {continue;}
			
			file.setFileName(fileName);
			file.setFileNameOriginal(fileNameOriginal);
			file.setBoardNumber(boardNumber);
			
			insert(file);
		}
	}
	
	public void insert(FileVO fileVO) {
		sqlSession.insert("File.insert", fileVO);
	}
	
	public void delete(int boardNumber) {
		sqlSession.delete("File.delete", boardNumber);
	}
	
	public List<FileVO> select(int boardNumber){
		return sqlSession.selectList("File.select", boardNumber);
	}
}

 

 

 

7. FileDownloadOk.java

package com.board.app.board;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;

import com.board.app.action.Action;
import com.board.app.action.ActionInfo;

public class FileDownloadOk implements Action {

	@Override
	public ActionInfo execute(HttpServletRequest req, HttpServletResponse resp) throws IOException {
		req.setCharacterEncoding("UTF-8");
		resp.setCharacterEncoding("UTF-8");
		
		String uploadPath = "D:\\web_1900_hds\\jsp\\workspace\\board\\WebContent\\upload";
		String fileName = req.getParameter("fileName");
		String fileNameOriginal = req.getParameter("fileNameOriginal");
		InputStream inputStream = null;
		OutputStream outputStream = null;
		File file = null;
		
		file = new File(uploadPath, fileName);
		String fileNameToSend = new String(fileNameOriginal.getBytes("UTF-8"), "ISO-8859-1");
		inputStream = new FileInputStream(file);
		resp.setContentType("application/octet-stream");
		resp.setHeader("Content-Description", "파일 다운로드");
		resp.setHeader("Content-Disposition", "attachment;filename=\"" + fileNameToSend + "\"");
		resp.setHeader("Content-Type", "application/octet-stream;charset=utf-8");
		resp.setHeader("Content-Length", file.length() + "");
		
		byte[] b = new byte[(int)file.length()];
		int len = 0;
		outputStream = resp.getOutputStream();
		
		while((len = inputStream.read(b)) > 0) {
			outputStream.write(b, 0, len);
		}
		
		outputStream.close();
		inputStream.close();
		
		return null;
	}

}

 

 

 

8. FileMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http//mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="File">
	<!-- 첨부파일 추가 -->
	<insert id="insert" parameterType="fileVO">
		insert into tbl_file (file_name, file_name_original, board_number)
		values(#{fileName}, #{fileNameOriginal}, #{boardNumber})
	</insert>
	 
	<!-- 첨부파일 삭제 -->
	<delete id="delete" parameterType="_int">
		delete from tbl_file where board_number = #{boardNumber}
	</delete>
	
	<!-- 첨부파일 가져오기 -->
	<select id="select" parameterType="_int" resultType="fileVO">
		select file_name, file_name_original, board_number
		from tbl_file
		where board_number = #{boardNumber}
	</select>
</mapper>

 

 

 

'웹 개발 > JSP' 카테고리의 다른 글

[Web_JSP] 20  (0) 2022.06.08
[Web_JSP] 19  (0) 2022.06.07
[Web_JSP] 17  (0) 2022.06.05
[Web_JSP] 16  (0) 2022.06.04
[Web_JSP] 15  (0) 2022.06.03