이전에 작성한 클래스들을 활용하여 사용자가 글을 작성하면 폴더를 생성하고
생성된 폴더에 이미지를 저장하는 코드를 작성해보겠습니다.
BoardInsertAction.java
package controller.community;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import controller.common.Action;
import controller.common.ActionForward;
import controller.function.CKEditorDeleteFile;
import controller.function.LoginCheck;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import model.board.BoardDAO;
import model.board.BoardDTO;
public class BoardInsertAction implements Action{
//글작성페이지
@Override
public ActionForward execute(HttpServletRequest request, HttpServletResponse response) {
//기본으로 넘어가야하는 페이지 와 redirect 여부를 설정
ActionForward forward = new ActionForward();
String path = "info.jsp";//메인커뮤니티페이지로 이동
boolean flagRedirect = false;//포워드 방식으로
//로그인 정보가 있는지 확인해주고
String login[] = LoginCheck.Success(request, response);
String member_id = login[0];//세션에 있는 사용자의 아이디
System.out.println("로그인 확인: " + login);//로그인 확인 로그
//만약 로그인 정보가 없다면
if(member_id == null) {
//로그인 페이지로 전달해줍니다.
request.setAttribute("msg", "글 작성은 로그인 후 사용 가능합니다.");
request.setAttribute("path", "LOGINPAGEACTION.do");
}
else {
// 요청에서 게시글 제목과 내용을 가져옴
String boardTitle = request.getParameter("VIEW_TITLE");
String boardContent = request.getParameter("VIEW_CONTENT");
String boardLocation = request.getParameter("board_location"); //지역은 아직 구현xx
//------------------------------------------------------------------------
//CKEditor 제거된 이미지 제거하는 로직
//UTF-8 형식으로 보내주니 UTF-8 로 인코딩 해주고
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
System.out.println("인코딩 실패");
}
//세션을 불러와서
HttpSession session = request.getSession();
//세션에 저장되어 있는 폴더 개수를 가져옵니다. 삼항연산자로 만약 세션값이 null이 아니라면 정수형으로 변경하여 가져오도록합니다.
int folder_session = (session.getAttribute("FOLDER_NUM") != null) ? (Integer)session.getAttribute("FOLDER_NUM"):0;
//View에서 보내준 내용 확인합니다.
System.out.println(boardContent);
//세션에 있는 값이 0보다 크다면 이미지 폴더가 생성된 것으로 if문 실행
if(folder_session > 0) {
//폴더를 명시해줍니다.
String folder = "/board_img/"+member_id+"/"+folder_session;
//명시된 폴더를 추가해주고 내 서버의 폴더주소를 불러옵니다.
String uploadPath = request.getServletContext().getRealPath(folder);
System.out.println("BoardInsertAction.java 확인용 로그 : "+uploadPath);
//넘어온 이미지와 서버에 저장된 이미지를 체크하여
//없는 이미지는 삭제해줍니다.
CKEditorDeleteFile.imgDelete(boardContent, uploadPath);
}
//------------------------------------------------------------------------
System.out.println("게시글 제목: " + boardTitle);//제목 로그
System.out.println("게시글 내용: " + boardContent);//내용 로그
System.out.println("게시글 작성자: " + member_id);//작성자 로그
// 게시글의 제목, 내용, 지역, 작성자를 DTO에 설정
BoardDTO boardDTO = new BoardDTO();
boardDTO.setModel_board_title(boardTitle);
boardDTO.setModel_board_content(boardContent);
boardDTO.setModel_board_location(Location(boardLocation));
boardDTO.setModel_board_writer_id(member_id);
// 게시글을 데이터베이스에 저장
BoardDAO boardDAO = new BoardDAO();
request.setAttribute("msg", "글이 작성 완료");
request.setAttribute("path", "MainCommunityPage.do");
session.setAttribute("FOLDER_NUM","");
boolean flag = boardDAO.insert(boardDTO);//글 insert
if (!flag) {
//실패했을때
request.setAttribute("msg", "글이 작성 실패");
request.setAttribute("path", "INSERTBOARDPAGEACTION.do");
session.setAttribute("FOLDER_NUM",folder_session);
}
}
forward.setPath(path);
forward.setRedirect(flagRedirect);
return forward;
}
/* 뷰에서 전달받은 지역 값을 실제 지역명으로 변환하는 함수
*/
public String Location(String view_Location) {
Map<String, String> locationMap = new HashMap<String, String>();
locationMap.put("SEOUL", "서울특별시");
locationMap.put("GYEONGGI", "경기도");
locationMap.put("INCHEON", "인천광역시");
locationMap.put("SEJONG", "세종특별자치도");
locationMap.put("BUSAN", "부산광역시");
locationMap.put("DAEGU", "대구광역시");
locationMap.put("DAEJEON", "대전광역시");
locationMap.put("GWANGJU", "광주광역시");
locationMap.put("ULSAN", "울산광역시");
locationMap.put("CHUNGCHEONGNAMDO", "충청남도");
locationMap.put("CHUNGCHEONGBUKDO", "충청북도");
locationMap.put("JEONLANAMDO", "전라남도");
locationMap.put("JEONLABUKDO", "전라북도");
locationMap.put("GYEONGSANGNAMDO", "경상남도");
locationMap.put("GYEONGSANGBUKDO", "경상북도");
locationMap.put("GANGWONDO", "강원도");
locationMap.put("CHUNGNAM", "충청남도");
return locationMap.getOrDefault(view_Location, "서울특별시"); // 기본값은 서울특별시
//getOrDefault Map 인터페이스에서 제공하는 메서드로,
//특정 키에 해당하는 값을 반환하되,
//만약 그 키가 존재하지 않으면 기본값을 반환하는 역할을 합니다.
}
}
코드 설명
View에서 작성된 글을 받아와 줍니다.
String boardContent = request.getParameter("VIEW_CONTENT");
받아온 글을 UTF-8 형식으로 인코딩 해주고
session 에 저장되어있는 이미지 폴더 번호가 있는지 확인 해줍니다.
//UTF-8 형식으로 보내주니 UTF-8 로 인코딩 해주고
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
System.out.println("인코딩 실패");
}
//세션을 불러와서
HttpSession session = request.getSession();
//세션에 저장되어 있는 폴더 개수를 가져옵니다. 삼항연산자로 만약 세션값이 null이 아니라면 정수형으로 변경하여 가져오도록합니다.
int folder_session = (session.getAttribute("FOLDER_NUM") != null) ? (Integer)session.getAttribute("FOLDER_NUM"):0;
만약 세션에 들어있는 이미지 폴더 번호가 있다면 서버에 저장된 이미지와
작성된 글의 이미지가 같은지 확인하여 작성된 이미지가 아니라면 삭제해줍니다.
(CKEditorDeleteFile.imgDelete 는 앞선 포스팅에서 작성한 클래스입니다.)
//세션에 있는 값이 0보다 크다면 이미지 폴더가 생성된 것으로 if문 실행
if(folder_session > 0) {
//폴더를 명시해줍니다.
String folder = "/board_img/"+member_id+"/"+folder_session;
//명시된 폴더를 추가해주고 내 서버의 폴더주소를 불러옵니다.
String uploadPath = request.getServletContext().getRealPath(folder);
System.out.println("BoardInsertAction.java 확인용 로그 : "+uploadPath);
//넘어온 이미지와 서버에 저장된 이미지를 체크하여
//없는 이미지는 삭제해줍니다.
CKEditorDeleteFile.imgDelete(boardContent, uploadPath);
}
최종적으로 글이 작성되었다면 session에 저장된 이미지 폴더 번호를 지워주고
만약 작성되지 못했다면 이미지 폴더 번호를 그대로 남겨줍니다.
request.setAttribute("msg", "글이 작성 완료");
request.setAttribute("path", "MainCommunityPage.do");
session.setAttribute("FOLDER_NUM","");
boolean flag = boardDAO.insert(boardDTO);//글 insert
if (!flag) {
//실패했을때
request.setAttribute("msg", "글이 작성 실패");
request.setAttribute("path", "INSERTBOARDPAGEACTION.do");
session.setAttribute("FOLDER_NUM",folder_session);
}
728x90
'팀 프로젝트 > Web' 카테고리의 다른 글
게시판 페이지 CKEditor 글 수정 파트 (Controller) (1) | 2024.09.22 |
---|---|
게시판 페이지 CKEditor 글 수정 파트 (JavaScript, jsp) (2) | 2024.09.22 |
게시판 페이지 CKEditor 추가 (0) | 2024.09.21 |
2024-09-06 암벽장 메인 페이지, 상세페이지 한글코딩 (1) | 2024.09.07 |
2024-09-06 RankPage 코드 작성 (0) | 2024.09.07 |