ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • day65 - Spring Framework(스프링, Annotation)
    KIC/Spring 2021. 9. 15. 18:24
    반응형

    [boardController.java]

    package controller;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.oreilly.servlet.MultipartRequest;
    
    import service.BoardMybatisDao;
    import model.Board;
    
    
    @Controller
    @RequestMapping("/board/")
    public class BoardController{
    	
    	HttpServletRequest request;
    	Model m;
    	HttpSession session;
    	
    	@Autowired
    	BoardMybatisDao dao;
    	
    	@ModelAttribute
    	void init(HttpServletRequest request, Model m) {
    		this.request = request;
    		this.m = m;
    		this.session = request.getSession();
    	}
    	
    	@RequestMapping("list") // 실질적으로는 /board/list 인 샘
    	public String list(){
    		/*
    		 * 게시물 목록 보기 
    		 * 1. pageNum 파라미터 존재. pageNum 파라미터 없으면 1로 설정. 
    		 * 2. 10건의 게시물 출력. => db에서
    		 *    해당 페이지에 출력되는 게시물만 조회. 순서 : 최근 게시물 순으로 
    		 * 3. 화면에 출력.
    		 * 4. boardid 파라메터가 없으면 session을 수정하지 않음 default는 1임
    		 */
    
    		// pageNum이 넘어와야 pageNum이 바뀜
    		if (request.getParameter("pageNum") != null) {
    			session.setAttribute("pageNum", request.getParameter("pageNum"));
    		}
    		// boardid가 넘어와야 세션이 변경됨 : 현재 게시판분류에 따른 입력,수정을 적용
    		if (request.getParameter("boardid") != null) {
    			session.setAttribute("boardid", request.getParameter("boardid"));
    			session.setAttribute("pageNum", "1");
    		}
    
    		
    		String pageNum = (String) session.getAttribute("pageNum");
    		if (pageNum == null) 	pageNum = "1";
    		int pageInt = Integer.parseInt(pageNum);
    		
    		String boardid = (String) session.getAttribute("boardid");
    		if (boardid == null)  	boardid = "1";
    		
    
    		
    		
    		int limit = 10; // 한페이지에 출력할 게시물 건수
    		
    		int boardcount = dao.boardCount(boardid);// 등록된 전체 게시물의 건수
    		/*
    		 * pageInt-현재 페이지 넘버, 
    		 * limit-한페이지에 출력할 게시물 건수
    		 * boardcount--등록된 전체 게시물의 건수
    		 * boardid-공지사항(1),자유게시판(2), QnA(3)
    		 */
    		List<Board> list = dao.list(pageInt, limit, boardcount, boardid); // 화면에 출력된 게시물 데이터
    		// 13 ---> boardcount/limit : 4 + 1
    		//-----------paging 작업
    		int maxpage = (int) (boardcount / limit) + (boardcount % limit == 0 ? 0 : 1);
    		int bottomLine = 3;
    		// page 1,2,3 : 1, 4,5,6: 2
    		int startpage = 1 + (pageInt - 1) / bottomLine * bottomLine;
    		int endpage = startpage + bottomLine - 1;
    		if (endpage > maxpage) 	endpage = maxpage;
    		int boardnum = boardcount - (pageInt - 1) * limit;  //100개 1:100, 2:90, 3:80
    		//-----------paging 작업
    		
    		
    		
    
    		
    		//print list
    		m.addAttribute("boardcount", boardcount);  // 등록된 전체 게시물의 건수
    		m.addAttribute("list", list);  //프린트한 게시물
    		m.addAttribute("boardnum", boardnum); //게시물 시작번호
    		m.addAttribute("pageNum", pageNum);  //현재 페이지 번호
    		
    		//하단 paging
    		m.addAttribute("startpage", startpage); // 하단 시작 페이지
    		m.addAttribute("endpage", endpage);  //하단 end 페이지
    		m.addAttribute("bottomLine", bottomLine);  //하단 화면당 페이지 보기
    		m.addAttribute("maxpage", maxpage);  //총 페이지수
    	
    		//게시판 제목
    		m.addAttribute("boardName", getBoardName(boardid));  //게시판 제목 (공지시항, 자유게시판, QnA)
    		
    		return "board/list";
    	}
    	
    	
    	public String getBoardName(String boardid) {
    		
    		String boardName = "";
    		switch (boardid) {
    		case "1": {   boardName="공지사항"; break;	}
    		case "2": {   boardName="자유게시판"; break;	}
    		case "3": {   boardName="QnA"; break;	}
    		default:
    			 boardName="공지사항";
    		}
    		
    		return boardName;
    	}
    	
    	
    	
    	
    	
    	
    	@RequestMapping("writeForm")
    	public String writeForm() {
    		String boardid = (String) request.getSession().getAttribute("boardid");
    		if (boardid == null)  	boardid = "1";
    		m.addAttribute("boardName", getBoardName(boardid));
    		return "board/writeForm";
    	}
    	
    	@RequestMapping("writePro")
    	public String writePro(Board board) {
    		String uploadpath = request.getServletContext().getRealPath("/") + "upfile";
    		
    		MultipartFile multipartFile = board.getF();
    		
    		if(!multipartFile.isEmpty()) {
    			File file = new File(uploadpath, multipartFile.getOriginalFilename());
    			try {
    				multipartFile.transferTo(file);
    				board.setFile1(multipartFile.getOriginalFilename());
    			}catch(IllegalStateException e) {
    				e.printStackTrace();
    			}catch(IOException e) {
    				e.printStackTrace();
    			}
    			
    		}else {
    			board.setFile1("");
    		}
    		String boardid = (String) session.getAttribute("boardid");
    		if (boardid == null)  	
    			boardid = "1";
    		board.setBoardid(boardid);
    		String msg = "게시물 등록 실패";
    		String url = "board/writeForm";
    		if(dao.insert(board)) {
    			msg="게시물 등록 성공";
    			url="board/list";
    		}
    		m.addAttribute("msg", msg);
    		m.addAttribute("url", url);
    		return "alert";
    	}
    
    
    	
    	@RequestMapping("info")
    	public String info(int num){
    
    		Board board = dao.selectOne(num); // 게시물 조회
    		dao.readcntadd(num); // 조회건수증가
    		m.addAttribute("board", board);
    		String boardid = (String) request.getSession().getAttribute("boardid");
    		if (boardid == null)  	boardid = "1";
    		m.addAttribute("boardName", getBoardName(boardid));
    		
    		return "board/info";
    	}
    
    	@RequestMapping("updateForm")
    	public String updateForm(int num){
    		/*
    		 * 1. num 값의 게시물을 조회화여 화면 출력하기
    		 */
    		Board board = dao.selectOne(num);
    		m.addAttribute("board", board);
    		return "board/updateForm";
    	}
    	
    	@RequestMapping("update  ")
    	public String update(Board board) {
    		String uploadpath = request.getServletContext().getRealPath("/") + "upfile";
    		
    		MultipartFile multipartFile = board.getF();
    		
    		if(!multipartFile.isEmpty()) {
    			File file = new File(uploadpath, multipartFile.getOriginalFilename());
    			try {
    				multipartFile.transferTo(file);
    				board.setFile1(multipartFile.getOriginalFilename());
    			}catch(IllegalStateException e) {
    				e.printStackTrace();
    			}catch(IOException e) {
    				e.printStackTrace();
    			}
    			
    		}else {
    			board.setFile1("");
    		}
    		Board dbBoard = dao.selectOne(board.getNum());
    		String msg = "비밀번호가 틀렸습니다.";
    		String url = "board/updateForm?num=" + board.getNum();
    		
    		if(board.getPass().equals(dbBoard.getPass())){
    			if(dao.update(board)) {
    				msg="게시물 수정 성공";
    				url="board/list";
    			}else {
    				msg = "게시물 수정 실패";
    			}
    		}
    		m.addAttribute("msg", msg);
    		m.addAttribute("url", url);
    		return "alert";
    		
    	}
    
    	@RequestMapping("deleteForm")
    	public String deleteForm(int num){
    
    		m.addAttribute("num", num);
    		return "board/deleteForm";
    	}
    
    	@RequestMapping("delete")
    	public String delete(int num, String pass){
    
    		System.out.println(pass);
    		String msg = "비밀번호가 틀렸습니다!";
    		String url = "board/deleteForm?num=" + num;
    		
    		Board board = dao.selectOne(num);
    		// board.getPass() : db에 저장된 비밀번호
    		if (pass.equals(board.getPass())) {
    			if (dao.delete(num)) {
    				msg = "게시글을 성공적으로 삭제하였습니다.";
    				url = "board/list";
    			} else {
    				msg = "게시글을 삭제하는데 실패하였습니다!";
    				url = "board/info?num=" + num;
    			}
    		}
    
    		m.addAttribute("url", url);
    		m.addAttribute("msg", msg);
    
    		return "alert";
    	}
    
    	@RequestMapping("replyForm")
    	public String replyForm(int num){
    		/*
    		 * 답변글 쓰기 화면 
    		 * 1. 원글의 num을 파라미터로 받는다. 
    		 * 2. 원글의 num,ref,reflevel,refstep 정보를 저장 
    		 * 3. 입력 화면 표시
    		 */
    
    		
    		Board board = dao.selectOne(num); // 게시물 조회
    
    		m.addAttribute("board", board);
    		String boardid = (String) request.getSession().getAttribute("boardid");
    		if (boardid == null)  	boardid = "1";
    		m.addAttribute("boardName", getBoardName(boardid));
    		return "board/replyForm";
    	}
    
    	
    	
    	
    	
    	@RequestMapping("replyPro")
    	public String replyPro(Board board){
    
    		String boardid = (String) request.getSession().getAttribute("boardid");
    		if (boardid == null) 	boardid = "1";
    
    		board.setFile1("");
    		board.setBoardid(boardid);
    		
    		dao.refstepadd(board.getRef(), board.getRefstep());
    		// 3. Board 객체를 db에 insert 하기.
    		String msg = "답변등록시 오류발생";
    		String url = "board/replyForm?num=" + board.getNum();
    		if (dao.insert(board)) {
    			msg = "답변등록 완료";	url = "board/list";
    		}
    		m.addAttribute("url", url);
    		m.addAttribute("msg", msg);
    		return "alert";
    	}
    	
    }
    300x250

    댓글

Designed by Tistory.