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를 생성했더니 이제 만든 페이지가 잘 나온다!
'Back-end > Spring' 카테고리의 다른 글
Spring) 로그인 동작 만들기(테스트 형태) (0) | 2022.04.29 |
---|---|
Spring) Contoller 리턴 타입에 따른 매핑 방법 (0) | 2022.04.27 |
Spring) DB연결 방법 3가지(직접, Bean객체, MyBatis) (0) | 2022.04.25 |
Spring) JUnit을 활용하여 테스트 코드 작성하기 (0) | 2022.04.23 |
Spring) Spring 프로젝트 생성, 설정 및 Tomcat 서버 설치 (0) | 2022.04.18 |