PLOD

[spring] spring MVC - (3.View) 본문

개발 공부/Spring framework

[spring] spring MVC - (3.View)

훌룽이 2023. 4. 17. 17:05

웹 계층에서 가장 먼저 설계해야 되는 것은 주소 , 즉 URL(URI)이다.JSP는 tomcat 서버를 켰을 때 http://localhost:8080/...을 입력하게 되면 나오는 화면이다.  아래는 게시판 프로젝트에서 Controller를 설계 할 때 설정했던 예시이다.

Task URL Method Parameter From URL 이동
전체 목록 /board/list GET      
등록 처리 /board/register POST 모든 항목 입력화면 필요 이동
조회 /board/read GET bno=123    
삭제 처리 /board/modify POST bno 입력화면 필요 이동
수정 처리 /board/remove POST 모든 항목 입력화면 필요 이동

Controller는 Service 객체와 같이 연동해야 하므로 의존성 처리도 같이 진행된다.Controller는 Service에 대해 의존적이므로 @AllArgsConstructor를 이용해 생성자를 만들고 자동으로 주입하도록 한다. 테스트 코드는 기존과 좀 다르게 진행된다. 웹을 개발할 때 매번 URL 테스트를 위해 WAS를 실행하는 단계를 생략하기 위함이다. 스프링의 테스트 기능으로 WAS를 실행하지 않고도 테스트가 가능하다.

 

BoardMapper.xml이용하여 BoardServiceTests에서 프리젠테이션(웹)계층(뷰) 에서 CRUD화면을 *.jsp 파일로 연결해주는 BoardController 클래스작성하여( jsp를 호출화면을 작성하는 클래스는 xxxController) 하나의 클래스 내에서 여러 메서드를 작성하고 @RequestMapping을 이용해 URL을 분기하는 구조로 작성할 수 있기 때문에 하나의 클래스에서 필요한 만큼 분기를 이용하는 구조로 작성한다.

package org.zerock.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.zerock.domain.BoardVO;
import org.zerock.service.BoardService;

import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j;

@Controller
@Log4j
@RequestMapping("/board/*")
@AllArgsConstructor
public class BoardController {
	
	@Autowired
	private BoardService service;
	
	@GetMapping("/list")
	public void list(Model model) {
		log.info("list");
		model.addAttribute("list", service.getList());
	}
	
	@PostMapping("/register")
	public String register(BoardVO board, RedirectAttributes rttr) {
		log.info("register : " + board);
		service.register(board);
		rttr.addFlashAttribute("result", board.getBno());
		
		return "redirect:/board/list";
	}
	
	@GetMapping({"/get","/modify"})
	public void get(@RequestParam("bno") Long bno , Model model) {
		log.info("/get or /modify");
		model.addAttribute("board",service.get(bno));
	}
	
	
	  @PostMapping("/modify") 
	  public String modify(BoardVO board,RedirectAttributes rttr) { 
		  log.info("modify : " + board);
		  if(service.modify(board)) { rttr.addFlashAttribute("result","success"); }
		  return "redirect:/board/list"; 
	  }
	 
	
	@PostMapping("/remove")
	public String remove(@RequestParam("bno") Long bno, RedirectAttributes rttr) {
		log.info("remove......" + bno);
		if(service.remove(bno)) {
			rttr.addFlashAttribute("result","success");
		}
		return "redirect:/board/list";
	}
	
	@GetMapping("/register")
	public void register() {
		
	}
	
	
}

전체페이지 조회는 GETMapping으로 등록이나 삭제는 POSTMapping로 설정한다. BoardController의 get 메서드는 bno값을 좀 더 명시적으로 처리하는 @RequestParam을 이용해 지정한다. 파라미터 이름과 변수 이름을 기준으로 동작해야 되므로 생략해도 무방하다. Modify는 변경된 내용을 수집해 BoardVO 파라미터로 처리하고 BoardService 호출한다. 

수정 작업 시작 화면은 GET으로 접근하지만 실제론 POST 방식으로 동작한다. 삭제는 반드시 POST로만. BoardControllerremove는 삭제 후 페이지 이동이 필요하므로 RedirectAttributes를 파라미터로 등록하고 redirect로 다시 목록 페이지로 이동하고 MockMvc 파라미터는 문자열로만 처리해야 한다.

 

 

'개발 공부 > Spring framework' 카테고리의 다른 글

[spring] spring 과 MyBatis 연동  (0) 2023.08.19
[spring] Spring dependency 설정(gradle, maven)  (0) 2023.07.08
[spring] spring MVC - (2.Controller)  (0) 2023.04.17
[spring] spring MVC- (1.Model)  (0) 2023.03.23
[JSP] JSP , JSTL  (0) 2023.03.09
Comments