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 + "¤tPage=" + 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 + "¤tPage=" + 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 + "¤tPage=" + 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);
}
}