카테고리 없음

[Project][Spring] Controller

321 2021. 3. 30. 16:51

 

Controller에서는 url주소에 따른 기능 구현 및 Parameter 설정을 주로 한다.

 

package kr.co.controller;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import kr.co.service.BoardService;
import kr.co.service.ReplyService;
import kr.co.vo.BoardVO;
import kr.co.vo.PageMaker;
import kr.co.vo.ReplyVO;
import kr.co.vo.SearchCriteria;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	
	@Autowired
	ReplyService replyService;
	
	@Autowired
	BoardService service;
	
	@RequestMapping(value="/writeView", method=RequestMethod.GET)
	public void writeView() throws Exception{
		
		logger.info("writeView");
	}
	
	@RequestMapping(value="/write", method=RequestMethod.POST)
	public String write(BoardVO boardVO) throws Exception{
		logger.info("write");
		service.write(boardVO);
		
		return "redirect:/";
	}
	
	@RequestMapping(value="/list", method=RequestMethod.GET)
	public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
		logger.info("list");
		
		model.addAttribute("list", service.list(scri));
	
		PageMaker pageMaker = new PageMaker();
		pageMaker.setCri(scri);
		pageMaker.setTotalCount(service.listCount(scri));
		
		model.addAttribute("pageMaker", pageMaker);
		return "board/list";
	}
	
	@RequestMapping(value="/readView", method=RequestMethod.GET)
	public String read(BoardVO boardVO, @ModelAttribute("scri") SearchCriteria scri, Model model) throws Exception{
		logger.info("read");
		
		model.addAttribute("read", service.read(boardVO.getBno()));
		model.addAttribute("scri", scri);
		
		List<ReplyVO> replyList = replyService.readReply(boardVO.getBno());
		model.addAttribute("replyList", replyList);
		
		return "board/readView";
	}
	
	@RequestMapping(value="/updateView", method=RequestMethod.GET)
	public String updateView(BoardVO boardVO, Model model) throws Exception{
		logger.info("updateView");
		
		model.addAttribute("update", service.read(boardVO.getBno()));
		
		return "board/updateView";
	}
	
	@RequestMapping(value="/update", method=RequestMethod.POST)
	public String update(BoardVO boardVO) throws Exception{
		logger.info("update");
		
		service.update(boardVO);
		
		return "redirect:/board/list";
	}
	
	@RequestMapping(value="/delete", method=RequestMethod.POST)
	public String delete(BoardVO boardVO) throws Exception{
		logger.info("delete");
		
		service.delete(boardVO.getBno());
		
		return "redirect:/board/list";
	}
	
	@RequestMapping(value="/replyWrite", method=RequestMethod.POST)
	public String replyWrite(ReplyVO replyVo, SearchCriteria scri, RedirectAttributes rttr) throws Exception{
		logger.info("replyWrite");
		
		replyService.writeReply(replyVo);
		
		rttr.addAttribute("bno", replyVo.getBno());
		rttr.addAttribute("bdate", replyVo.getBdate());
		rttr.addAttribute("page", scri.getPage());
		rttr.addAttribute("perPageNum", scri.getPerPageNum());
		rttr.addAttribute("searchType", scri.getSearchType());
		rttr.addAttribute("keyword", scri.getKeyword());
	
		return "redirect:/board/readView";
	}

}

 

  • 클래스 파일에 @Controller를 붙여주면 된다.
  • @RequestMapping(value="주소", method="방법") 혹은 @RequestMapping("주소")를 사용해서 주소를 나타냄. 이때 상위 메서드의 내용은 포함되므로 하나씩 추가될 때마다 주소가 하나씩 늘어난다고 보면 된다.
  • @RequestParam은 getParameter() 메서드의 역할을 하면서 매개변수를 설정해 값을 받아온다. required=true/false로 받아오는 값이 없을 때 예외처리(true) 혹은 null값처리(false)를 할 수 있다.
  • @Model이나 @ModelAndView를 사용해서 모델의 애트리뷰트를 설정해 준다. ModelAndView로 리턴하면 다음페이지인 View를 설정할 수 도 있다.
    • spring config에서 prefix 설정을 해주었다면 String으로 리턴해도 페이지로 정상 이동.
    • @Model을 사용할 때 model.addAttribute("key", "value");형식으로 "설정"할 때 주로 사용함.
    • @ModelAttribute는 한꺼번에 내용을 vo로 받아와서 사용할 때 쓴다.
      • 예) @ModelAttribute("~~~") BoardVO boardVO  -> boardVO.getBno(); boardVO.getBname();
  • logger => System.out.println(); 처럼 로그 기록.
    • log4j.properties로 디테일 설정 가능