1. MethodInfo 예제
Spring에 매개 변수만 적어주면 어떻게 페이지가 생성되는지 원리를 알아보자.
https://github.com/castello/spring_basic/blob/main/ch2/MethodInfo.java에 있는 MethodInfo 코드를 가져온다.
StringJoiner는 구분자 " , " // 접두사 " ( " // 접미사 " ) " 를 붙이고 add 메서드를 사용하면 console과 같이 깔끔하게 출력 가능하다.
YoilTeller의 매개 변수는 request, response인데 console에 출력된 것의 매개 변수는 arg0, arg1이다. 컴파일러에게 매개 변수의 type은 중요하지만 이름은 중요하지 않다. 컴파일 된 상태에는 매개 변수의 이름은 저장하지 않는다. 매개 변수의 이름을 저장하기 위해서는 컴파일 할 때, javac -parameters 라는 옵션을 추가해야한다. (JDK 1.8에서 추가된 옵션)
preference에서 compiler의 항목에 옵션을 선택하면 매개 변수의 이름을 저장할 수 있다. 만약 활성화가 안되어있다면 Compiler가 1.8보다 높은 버전으로 설정해야 한다.
다시 실행해도 매개 변수의 이름이 저장되지 않는데, ch2 프로젝트의 자바 버전이 1.6으로 되어있기 때문이다.
pom.xml파일의 java-version을 1.6에서 11로 바꿔주고,
maven-complier-plugin의 버전도 11로 바꿔준다. 1.6을 11로 바꿔줄 수 있지만 2번 바꿔야 하는 번거로움이 있다.
따라서 위와 같이 변경해주면 처음에 변경했던 java-version 값을 참조해서 위가 바뀌면 아래도 같이 바뀐다.
변경 사항을 적용하기 위해 Maven항목에서 Update Project를 해야한다. 프로젝트를 Maven을 이용해서 관리하고 pom.xml파일이 maven 설정 파일이므로 변경한 것을 적용하기 위해서는 업데이트를 해야한다.
아까와 다르게 매개 변수의 이름이 출력된다.
매개 변수 이름을 얻는 방법에 2가지가 있다.
1. Reflection API
2. Class file
1번은 -parameters 옵션을 사용하므로 Java8, JDK1.8부터 사용할 수 있다. 스프링은 Java8 이전부터 존재했는데 그 때는 Class file로 부터 매개 변수의 이름을 얻어왔다.
Spring의 Package Explorer는 source파일 중심이라 class파일을 보기 어려워 설정을 하자.
windows - show view - others에 들어가서 navigator를 검색한다. navigator는 탐색기같은 거라 source, class파일 둘 다 볼 수 있다.
target에 들어가 class파일을 보면 위와 같다.
class 파일은 binary이므로 실제로 위와 같이 읽을 수 없고 Class File Viewer로 해석해서 보여준다.
class파일 안의 Local variable table을 보면 변수 이름이 있다.
YoilTellerMVC의 변수를 보면 다음과 같다.
1. MethodCall 예제
1. main 메서드에서 HashMap map = new HashMap(); map을 생성
2. ModelController mc = new ModelController(); Controller를 생성
3. String viewName = mc.main(map); Controller의 main 메서드에 map을 넘겨준다.
ModelController의 HashMap인 map을 main 메서드에 반환할 필요가 없다. 처음부터 main에서 HashMap을 만들어 넘겨준 것이므로 viewName만 반환하면 된다.
따라서 render 메서드에는 map data를 받아 viewName인 txtView2를 읽는다.
render 메서드는 결과를 console에 출력한다.
실행하면 txtView2.txt 파일이 없어 에러가 발생한다.
[txtView2.txt] id:${id} pwd:${pwd} |
위 내용을 txt파일로 만든다.
위치는 ch2의 root에 만들어야한다.
둘 다 상관없다.
HashMap을 처음 생성했을 때는 data가 없기 때문에 공백이 나오게 되고 ModelController 메서드에서 map에 data가 채워진다. 그리고 retrun에 view가 반환되어 render 메서드로 console에 id, pwd가 출력된다.
view를 다른 view로 바꾸어 출력하면 console에도 다르게 출력된다.
✨ 이 예제의 핵심은 Controller를 직접 만들어 보는 것이다.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
13. 서블릿과 JSP (1) (0) | 2023.07.09 |
---|---|
12. 관심사의 분리와 MVC패턴 - 원리(2) -> 다시 듣기 (0) | 2023.07.07 |
ch2_10. 관심사의 분리와 MVC패턴 - 실습(2) (0) | 2023.07.05 |
ch2_10. 관심사의 분리와 MVC패턴 - 실습(1) (0) | 2023.04.12 |
ch2_09. 관심사의 분리와 MVC패턴 - 이론 (0) | 2023.04.12 |