1. 개요
이 테크 노트는 신규로 생성한 스프링 프로젝트에 Controller를 추가하는 실습임
2. 사전작업
이클립스에서 Spring Project 를 만들어본다.
3. 신규 Controller 생성
3-1. HomeController 분석
우선 앞서 만든 스프링 프로젝트에 기본으로 포함되어 있는 HomeController를 살펴보자.
package com.test.myfirst; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); /** * Simply selects the home view to render by returning its name. */ @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"; } }
@RequestMapping(value = "/", method = RequestMethod.GET) 을 통해 / 에 해당하는 요청을 처리하는 Controller임을 알 수 있다.
그러면 우리는 새로운 URL을 처리하는 Controller를 추가해보기로 하겠다.
3-2. TimeController 생성
임의로 TimeController라는 것을 만들어보겠다. 새로 뭔가 만들기는 어려우니 위의 HomeController를 그대로 사용할 것이다.
TimeController.java는 src/main/java/com/test/myfirst 아래에 만든다. (com/test/myfirst는 앞선 장에서 내가 com.test.myfirst라는 패키지로 생성을 했기 때문이라는 것을.. 모르면.. 지금 안된다..)
그렇게 고친 것이 다음과 같다.
package com.test.myfirst; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class TimeController { private static final Logger logger = LoggerFactory.getLogger(TimeController.class); @RequestMapping(value = "/time.do", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome Time Controller! 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"; } }
- 클래스 이름이 다르다. (TimeControll.java)
- RequestMapping이 다르다. /time.do 라는 요청을 처리하기 위하여 수정되었다.
- 로거 클래스가 HomeController에서 TimeController로 바뀌었다.
- 로거가 찍는 문자열이 "Welcome home!" 에서 "Welcome Time Controller!" 로 수정되었다.
4. 실행
이제 톰캣 서버를 다시 시작해보자. 그리고 http://localhost:8080/myfirst/time.do 를 호출하면..
아까 http://localhost:8080/myfirst/ 롤 호출한 것과 같은 결과를 볼 수 있다! (당연하다..) 우리는 단지 time.do가 호출이 되도록 처리만 했지 화면, 즉 view에 대한 것은 전혀 수정한 바가 없기 때문이다. 그러면 화면도 수정하고 싶다면?
HomeController든 TimeController든 리턴으로 넘겨주는 것은 아래와 같다.
return "home";
home. 이것은 src/main/webapps/views 아래의 home.jsp를 뜻한다.
5. View
5-1. home.jsp
src/main/webapps/views/home.jsp 파일을 보자.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html> <head> <title>Home</title> </head> <body> <h1> Hello world! </h1> <P> The time on the server is ${serverTime}. </P> </body> </html>
/ 이든 /time.do 든 우리가 보았던 화면이 바로 이 파일이다.
그리고 ${serverTime}은 우리가 Controller에서 넘겼던 아래 값과 매핑되는 것이다.
model.addAttribute("serverTime", formattedDate );
5-2. time.jsp
그러면 /time.do에 대한 새로운 뷰를 만들어보자. 위치는 일단 home.jsp가 있는 src/main/webapps/views 아래에 만들면 되겠다. 즉, src/main/webapps/views/time.jsp이다.
많은 내용을 고칠 것은 없고 문구만 바꿔보자.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html> <head> <title>Time</title> </head> <body> <h1> Hello time! </h1> <P> The time on the server is ${serverTime}. </P> </body> </html>
추가로 할 일이 있다. TimeController에서 time.jsp로 리턴하도록 수정하는 것이다.
return "time";
이제 /time.do 호출 시 바뀐 문구를 확인할 수 있다!