Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

WON.dev

BBSController.java 본문

JSP/JSP.sideproject

BBSController.java

GAWON 2023. 6. 23. 12:09
package org.joonzis.controller;

import java.io.*;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.joonzis.model.Paging;
import org.joonzis.service.BBSService;
import org.joonzis.service.BBSServiceImpl;
import org.joonzis.service.CommentService;
import org.joonzis.service.CommentServiceImpl;
import org.joonzis.vo.BVO;
import org.joonzis.vo.CVO;

import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;

@WebServlet("/BBSController")
public class BBSController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public BBSController() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		String realPath = request.getServletContext().getRealPath("/upload");
		MultipartRequest mr = null;
		String cmd = request.getParameter("cmd");
		if(cmd == null) {
			mr = new MultipartRequest(
					request,
					realPath,
					1024*1024*10,	// 바이트 단위(1024=1KB) (1024KB=1MB)
					"utf-8",
					new DefaultFileRenamePolicy()
					// 동일한 이름의 파일이 업로드되면 어떤 방식으로 저장할 것인지
					// 기본 값 : 파일 뒤에 번호를 붙임
				);
			cmd = mr.getParameter("cmd");
		}
		
		String resultCmd = "allList";
		if(cmd != null && !cmd.isEmpty()) {
			resultCmd = cmd;
		}
		
		boolean forwardCheck = false;
		String path = "";
		
		BBSService bservice = new BBSServiceImpl();
		CommentService cservice = new CommentServiceImpl();
		
		String currentPage = "";
		String open = null;
		HttpSession session = request.getSession();
		String b_idx = "";
		BVO bvo = null;
		CVO cvo = null;
		int c_idx = 0;
		int cp = 0;
		
		switch(cmd) {
		
		// 삽입 화면 이동
		case "insert_page":
			forwardCheck = true;
			path = "bbs/insert_page.jsp";
			break;
		
		// 전체 목록 가져오기
		case "allList" :
			Paging pvo = new Paging();
			pvo.setTotalRecord(bservice.recordCount());
			pvo.setTotalPage();
			
			currentPage = request.getParameter("currentPage");
			if(currentPage != null && !currentPage.isEmpty()){
				pvo.setNowPage(Integer.parseInt(currentPage));
			}
			
			pvo.setBegin( (pvo.getNowPage()-1) * pvo.getRecordPerPage() + 1);
			pvo.setEnd(pvo.getBegin() + pvo.getRecordPerPage() - 1);
			
			int begin = pvo.getBegin();
			int end = pvo.getEnd();
			
			Map<String, Integer> map = new HashMap<>();
			map.put("begin", begin);
			map.put("end", end);
			
			List<BVO> list = bservice.getBBSList(map);
			request.setAttribute("list", list);
			
			pvo.setBeginBlock( (pvo.getNowPage()-1) / pvo.getPagePerBlock() * pvo.getPagePerBlock() + 1);
			pvo.setEndBlock(pvo.getBeginBlock() + pvo.getPagePerBlock() - 1);
			
			if(pvo.getEndBlock() > pvo.getTotalPage()){
				pvo.setEndBlock(pvo.getTotalPage());
			}
			
			request.setAttribute("pvo", pvo);
			
			
			open = (String)session.getAttribute("open");
			if(open != null){
				session.removeAttribute("open");
			}
			
			path = "bbs/allList.jsp";
			forwardCheck = true;
			break;
			
		// 전체 페이지
		case "view" :
			b_idx = request.getParameter("b_idx");
			currentPage = request.getParameter("currentPage");
			
			bvo = bservice.getBBS(Integer.parseInt(b_idx));
			
			open = (String)session.getAttribute("open");
			if(open == null){
				session.setAttribute("open", "yes");
				int hit = bvo.getHit() + 1;
				bvo.setHit(hit);
				bservice.getUpdateHit(bvo);
			}
			
			session.setAttribute("bvo", bvo);
			session.setAttribute("currentPage", currentPage);
			
			
			List<CVO> cList = cservice.getCommentList(bvo.getB_idx());
			request.setAttribute("cList", cList);
			
			forwardCheck = true;
			path = "bbs/view.jsp";
			break;
		// 데이터 삽입
		case "insertBBS" :
			bvo = new BVO();
			bvo.setWriter(mr.getParameter("writer"));
			bvo.setPw(mr.getParameter("pw"));
			bvo.setTitle(mr.getParameter("title"));
			bvo.setContent(mr.getParameter("content"));
			bvo.setIp(Inet4Address.getLocalHost().getHostAddress());	
			
			
			if(mr.getFile("filename") != null){
				bvo.setFilename(mr.getFilesystemName("filename"));
			}else{
				bvo.setFilename("");
			}
			
			int result = bservice.getInsertBBS(bvo);
			request.setAttribute("result", result);
			forwardCheck = true;
			path = "BBSController?cmd=allList";
			break;
			
			
			
		case "download":
			String folderPath = request.getParameter("path");			// 폴더 명
			String filename = request.getParameter("filename");	// 파일 명
			
			// 다운로드 받을 수 있는 문서 타입으로 설정하기
			response.setContentType("application/x-msdownload");
			
			// 파일 클래스(파일 스트림)를 통해 다운로드 할 파일 연결하기
			File file = new File(realPath + "/" + filename);		// new File("경로 + 파일명");
			
			// 파일 이름에 공백이 있을 경우 "+" 로 출력되는 부분 수정
			filename = URLEncoder.encode(filename, "utf-8");
			filename = filename.replaceAll("\\+", "%20");
			
			// 클라이언트의 헤더 정보에 첨부파일이 있음을 처리
			response.setHeader("Content-Disposition", "attachment; filename=" + filename + ";");
			response.setHeader("Content-Length", file.length() + "");
			
			// 실제 다운로드 하기
			FileInputStream fis = null;
			BufferedInputStream bis = null;		// 서버에 저장된 파일을 읽어들이는 스트림
			BufferedOutputStream bos = null;	// 클라이언트에 파일을 작성할 버퍼스트림
			
			try{
				fis = new FileInputStream(file);
				bis = new BufferedInputStream(fis);
				bos = new BufferedOutputStream(response.getOutputStream());
		
				// 2. 전체 다운로드 받기 
				byte[] buffer = new byte[(int)file.length()];		
				bis.read(buffer, 0, buffer.length);					
				bos.write(buffer);
					
			} catch(Exception e) {
				e.printStackTrace();
			} finally {
				try {
					if( bos != null) { bos.close();}
					if( bis != null) { bis.close();}
				} catch(Exception e){
					e.printStackTrace();						
				}
			}
			
			break;
			
		case "removeBBS":
			b_idx = request.getParameter("b_idx");
			
			result = cservice.commentCountByIdx(Integer.parseInt(b_idx));
			if(result > 0) {
				cservice.removeCommentAll(Integer.parseInt(b_idx));
			}
			
			result = bservice.removeBBS(Integer.parseInt(b_idx));

			request.setAttribute("result", result);
			forwardCheck = true;
			path = "bbs/remove.jsp";
			break;
			
		case "insertComment":
			
			cvo = new CVO();
			cvo.setWriter(request.getParameter("writer"));
			cvo.setPw(request.getParameter("pw"));
			cvo.setContent(request.getParameter("content"));
			cvo.setB_idx(Integer.parseInt(request.getParameter("b_idx")));
			cvo.setIp(Inet4Address.getLocalHost().getHostAddress());	
			
			
			cservice.insertComment(cvo);
			
			currentPage = request.getParameter("currentPage");
			b_idx = request.getParameter("b_idx");
			
			System.out.println(currentPage);
			System.out.println(b_idx);
			
			forwardCheck = true;
			path = "/BBSController?cmd=view&b_idx=" + b_idx + "&currentPage=" + currentPage;
			
			break;
			
		case "removeComment" :
			cservice.removeComment(Integer.parseInt(request.getParameter("c_idx")));
			request.setAttribute("b_idx", request.getParameter("b_idx"));
			
			b_idx = request.getParameter("b_idx");
			c_idx = Integer.parseInt(request.getParameter("c_idx"));
			
			
			forwardCheck = true;
			
			path = "/BBSController?cmd=view&b_idx=" + b_idx + "&currentPage=" + cp;
			break;
		case "updatePage":
			path = "/BBSController/update_page.jsp";
			break;
			
		case "update":
			
			bvo = new BVO();
			bvo.setB_idx(Integer.parseInt(mr.getParameter("b_idx")));
			bvo.setTitle(mr.getParameter("title"));
			bvo.setContent(mr.getParameter("content"));
			bvo.setIp(Inet4Address.getLocalHost().getHostAddress());	
			
			File newfile = mr.getFile("filename");			// 새 첨부 파일 (newfile)
			String oldfile = mr.getParameter("oldfile");	// 기존 첨부 파일(oldfile)
			if(newfile != null){	// 새 첨부 파일 O
				if(oldfile != null){	// 기존 첨부 파일 O
					File removeFile = new File(realPath + "/" + oldfile);
					if(removeFile.exists()){	// 기존 첨부 파일 유무 확인
						removeFile.delete();	// 기존 첨부 파일 삭제
					}
				}
				bvo.setFilename(newfile.getName());	// 새 첨부 파일 이름 가져오기
			}else{	// 새 첨부 파일 X
				if(oldfile != null){	// 기존 첨부 파일 O
					bvo.setFilename(oldfile);
				}else{
					bvo.setFilename("");	// 새 첨부 파일 X, 기존 첨부 파일 X
				}
			}
			
			bservice.updateBBS(bvo);
			
			request.setAttribute("b_idx", bvo.getB_idx());
			forwardCheck = true;
			path ="/BBSController?cmd=view&b_idx=" + b_idx + "&currentPage=" + currentPage;
			break;
		}
		
		if(forwardCheck) {
			request.getRequestDispatcher(path).forward(request, response);
		}else {
			response.sendRedirect(path);
		}
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

'JSP > JSP.sideproject' 카테고리의 다른 글

CDaoImpl.java  (0) 2023.06.23
CDao.java  (0) 2023.06.23
BDaoImpl.java  (0) 2023.06.23
BDao.java  (0) 2023.06.23
MemberController.java  (0) 2023.06.23