이전 예제에서 유의깊게 봐야할 부분이라면 바로 이부분일 것입니다.
${serverTime} 이부분에서 서버의 시간대를 가져옵니다. 꼭 PHP 에서 자주본 문법같기도 합니다.
문제는 저게 왜 서버의 시간대를 지칭하는지 아직 모른다는 것이죠.
제가 생각한 가능성은 다음과 같습니다.
1. ${serverTime} 은 스프링 프레임워크에서 제공하는 매크로 상수이다.
2. 소스 어디선가 전역적으로 사용할 수 있도록 변수를 정의 하였다.
3. 스프링 프레임워크를 공부하다 보면 알 수 있을 것이다.
사실 3번이 답이겠죠. 아직 모르겠습니다.
이번 포스팅에서는 스프링의 구조와 함께 그 부분을 조사해보겠습니다.
일단 ${serverTime} 의 궁금증을 풀기 위해 소스를 뒤져보겠습니다.
HomeController.java 파일을 찾을 수 있는데요.
소스의 내용을 보면 다음과 같은 내용이 있습니다.
${serverTime} 과 깊은 관련이 있어보이는 부분이 보입니다.
model.addAttribute() 함수를 이용해서 속성(Attribute) 를 추가합니다.
아마도 (key, value) 로 넣는 것이겠죠.
키가 "serverTime", 값은 포맷된 현재 시간의 문자열입니다.
이부분이 찾는 부분이 맞는지 확인하기 위해 소스를 조금 바꿔보겠습니다.
소스를 다음과 같이 바꿔줍니다.
만약 위의 예상이 맞다면 화면의 표시되는 시간이 바뀌어야합니다.
소스를 변경하고 다시 실행한 모습입니다.
역시 예상대로 화면이 바뀌었습니다.
즉 ${serverTime} 은 model.addAttribute() 를 통해 들어온 속성을 불러온것이라고 볼 수 있겠죠.
또 HomeController.java 에서는 주의깊게 봐야 할 부분이 있습니다.
바로 밑줄 친 어노테이션 부분입니다.
스프링은 @Controller 어노테이션을 보고 이 클래스가 Controller 라는것을 인지합니다.
또 메소드 위에 @RequestMapping 어노테이션을 보고 이것이 요청때 사용되어진다는 것을 확인하죠.
@RequestMapping(value = "/", method = RequestMethod.GET) |
여기서 value 는 패키지 이후의 상세 매핑 주소라고 생각됩니다.
method 는 아마도 HTTP 의 GET 메소드 방식을 의미하겠죠.
확인하기 위해 value 부분을 바꿔보겠습니다.
다음 화면과 같이 바꿔보죠.
이렇게 수정한뒤 아까와 같은 주소로 접속해보겠습니다.
http://localhost:8080/blog 로 접속하면 다음과 같이 화면이 나옵니다.
이제는 아래의 주소로 접근해야 합니다.
http://localhost:8080/blog/home
@RequestMapping 에 의해 Method 가 실행된다는 것을 알 수 있습니다.
또 return 부분을 봐야합니다.
여기서 "home" 문자열을 반환하는데, 이것은 어떤 뷰를 실행할것인지 선택하는 중요한 요건입니다.
잠시 ServletContext.xml 파일을 보겠습니다.
소스중 이런 부분이 있습니다.
<beans:bean> 태그에 InternalResourceViewResolver 가 있습니다.
그리고 접두사가
/WEB-INF/views/
접미사가
.jsp
입니다.
주석은 @Controller 에 의해 렌더링 하기 위해 선택된 뷰 라고 쓰여 있습니다.
즉 Controller 에서 반환한 "home" 은
/WEB-INF/views/home.jsp 가 되는 것입니다.
역시 이부분도 시험삼아 home2.jsp 를 만들고 @Controller 에서는 "home2" 를 반환해보겠습니다.
home2.jsp 를 만들고 다음과 같이 편집합니다.
그리고 Controller 에서는 "home2" 를 반환합니다.
이제 실행해보겠습니다.
예상대로 home2.jsp 가 불리게 되었습니다.
위의 사항을 토대로 페이지가 불리게 되는 순서를 그림으로 그려보죠.
아직 저도 배우는 입장이라 정확하지 않지만 현재까지 제가 아는 지식으로 보면 저런 그림이 나옵니다.
하지만 이 예제에서는 요청때 아무런 데이터도 전달하지 않았습니다.
대부분 페이지를 요청할때 데이터를 같이 전달합니다.
'Spring&mybatis(ibatis)' 카테고리의 다른 글
ibatis 태그 지원 목록입니다 (0) | 2018.11.12 |
---|---|
mybatis 기호 비교 등등 (0) | 2018.10.26 |
mybatis order 속성사용 (0) | 2018.10.26 |
a child container failed during start 에러 (0) | 2018.09.27 |
@RestController , @Controller 차이점입니다 (0) | 2018.03.20 |