Back-end/Spring

Spring) 스프링 Controller 개념과 페이지 연결(주소매핑)

luana_eun 2022. 4. 27. 17:10
728x90

1. 컨트롤러란?

스프링 프레임워크는 MVC패턴을 사용하고있고,

여기서 Controller는 화면(View)과 비즈니스 로직(Model)를 연결시키는 다리 역할을 한다. 

 

쉽게 말하자면 화면에서 /aaa 로 가줘~ 하고 요청하면 주소를 받아들여 어디로 갈지 분석하고 맞는 길로 연결시켜주는 역할이다. 

 

Controller를 세부적으로 나누면 FrontController와 Controller로 나눌 수 있다. 

FrontController는 사용자의 모든 요청을 전달받는곳으로, 요청에따라 view페이지 또는 적절한 컨트롤러를 호출한다.

또한 원하는 작업을 수행한 결과를 가지고 다시 페이지를 이동한다. 

 

▷ 작성하는 코드가 컨트롤러인지 어떻게 파악할까?

    @Controller 어노테이션으로 인해 이 클래스가 컨트롤러인지 파악한다. 

컨트롤러가 페이지가 어딨는지 어떻게 알고 연결할까?

    servlet-context.xml 파일에 가보면 컨트롤러 어노테이션과 어떻게 주소를 매핑해서 뷰를 연결할건지 등등

    컨트롤러에 대한 설정이 들어있다. https://luanaeun.tistory.com/196

    

 

 

2. 기본 컨트롤러 살펴보기. 

프로젝트를 생성하면 src/main/java 밑에 기본 패키지 밑에 HomeController.java 컨트롤러 파일이 있다. 

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		String formattedDate = dateFormat.format(date);
		model.addAttribute("serverTime", formattedDate );
	
		return "home";
	}
}

@Controller : 이 어노테이션으로 인해 내부적으로 컨트롤러의 역할을 할 수 있다.

LoggerFactory.getLogger() : 로그 정보를 출력하는 객체

@RequestMapping() :  요정 주소와 실제주소를 매핑하는 어노테이션. 마치 if문과 같다. 

@GetMapping() : @RequestMapping()과 같은 역할을 하고, 요즘엔 이 어노테이션을 더 많이 쓴다. 

@RequestMapping(value = "/doTest", method = RequestMethod.GET) : value의 주소로 get방식으로 페이지를 호출하면... @RequestMapping("/doTest")는 위의 코드를 생략한 것이다. 

return "home"; : 위 메서드는 home을 리턴하고있는데, 이는 페이지를 부르는것으로, 추 후에 자세히 다뤄볼 것이다.

 

 

 

3. 컨트롤러 만들고 매핑되는지 확인해보기

1) 컨트롤러 만들기

@Controller
public class SampleController01 {
	private static final Logger log = LoggerFactory.getLogger(SampleController01.class);
	
	// http://localhost:8088/web/doTest
	@RequestMapping("/doTest")
	public void doTest() {
		System.out.println("@@@ doTest로 이동!");
		log.info("@@@ 로그 출력 @@@");
	}
}

 

2) 실행 후 로그 출력되는지 테스트

서버를 켜고 해당 주소로 이동하면(http://localhost:8088/web/doTest)

아직 페이지는 안만들어서 404가 뜨지만 콘솔창에 정보가 뜨는 것을 볼 수 있다. 

 

** System.out.println과 log.info의 출력형태가 다른것을 볼 수 있는데, 

   시스템콜은 출력하고자 하는 메시지만 출력되고, info는 어디에서 발생한 메시지인지도 표시한다.

    System.out.println은 시스템의 리소스를 가져다 쓰는것이기 때문에 이것보다는 log를 사용하는것이 좋다. 

 

 

3) 페이지 확인

@RequestMapping("/doTest")으로 연결한 페이지의 404페이지를 자세히 보면

views/doTest.jsp를 찾을 수 없다고 나온다.

이는 servlet-context.xml 파일에 의해 자동으로 /views 폴더 밑의 페이지들과 연결되도록 한 것이다. 

따라서 페이지를 매핑하려면 이제 views폴더에 doTest.jsp파일을 만들면된다. 

 

 

4) 페이지 만들기

views폴더 밑에 doTest.jsp를 생성했더니 이제 만든 페이지가 잘 나온다!

 

728x90