1단계 : MethodCall 클래스를 통해서 ModelController의 메서드를 실행시킨 후 출력한다.
- 1. HashMap 객체를 생성 ( Controller의 작업 결과를 저장할 객체 생성)
- 2. 실행할 메서드를 가지고 있는 Controller 객체를 생성한 후 메서드를 실행
* 매개변수로 처리결과를 저장할 MAP을 넣어준다.
- 3. mc.main(map) 의 실행결과로 "txtView1" 를 리턴해주고, 처리결과는 map에 저장된다
* call by reference로 결과값이 map에 저장된다.
- 4. render(map,viewName); 를 통해서 출력해준다.
* map에는 처리결과가 저장되어있고, viewName에는 출력페이지 이름이 저장되어 있다.
* Scanner를 통해서 파일을 읽어 출력해준다.
2 단계 : MethodCall2 클래스를 통해서 Class 객체를 통해 실행할 클래스를 만들고 메서드를 실행한다.
- 호출하는 메서드의 매개변수를 하드코딩하는 단계
1. Class의 forName() 매서드를 통해서 실행할 클래스 객체를 생성한 후 newInstance() 통해서 해당 객체를 생성한다.
2. getDeclaredMethod() 를 통해서 실행하고자할 Method 이름과, 해당 매서드의 매개변수를 넣어준다. 리턴 값은 Method 객체로 리턴된다.
3. 사용자의 요청을 저장할 Model을 생성한다.
4. 생성된 Method 객체를 통해 invoke() 메서드를 실행하는데 매개변수로, 메서드가 포함된 클래스 객체를 넣고, 해당 메서드의 매개변수를 넣어준다.
* invoke() 메서드를 통해서 YoilTellerMVC 클래스의 main(int,int,int,model) 메서드가 실행되고, 실행결과는 Model에 저장되고 리턴값으로 yoil 이 리턴되었다. 해당 값을 viewName에 넣었고
* render 매서드를 통해서 출력을 실시 했다.
5. render 매서드를 통해서 Scanner 객체를 통해서 viewName의 jsp 파일을 읽어 콘솔에 출력하였다.
3단계 : MethodCall3를 통해서 Class 객체를 통해 실행할 클래스를 만들고 메서드를 실행한다.
- 실행할 메서드의 매개변수를 하드코딩하지 않고 맵핑을 통해서 처리한다.
- 요청온 값은 map에 저장되어있다고 가정하고 실행했다
- getParameterMap()을 통해서 요청된 값은 Map에 저장됨 [4단계에서 실행할것]
1. 일단 map을 생성한 다음에 year, 2021, month, 10, day, 1 을 넣어주는데 지금은 하드 코딩으로 직접 넣어주지만 해당 기능은 DispatcherServlet이 알아서 수행해준다.
2. 데이터를 넘길 Model객체를 생성해준다.
3. Method 까지는 위의 2번 방법과 동일하고, 그다음부터 이제 해당 메서드의 파라미터로 들어가는 것들을 자동으로 맵핑 처리한다.
- Mehtod에서 생성한 main 인스턴스 변수를 통해서 getParameters(); 메서드로 Parameter[] 을 리턴받는다
- 또한 파라미터의 값을 넣어줄 배열 객체를 생성해준다
4. for문을 통해서 Parameter[]에서 매개변수의 목록과 타입을 가지고 오고, 사용자로부터 요청이 온 데이터의 값을 각각의 파라미터의 이름을 통해서 해당 파라미터에 알맞은 값을 value로 가지고 온다.
파라미터의 값을 넣어줄 배열 객체에다가 해당 값들을 넣어주는데 이때 ParameterType이 Model일 경우는 model 객체를 생성해서 넣어주고 그외의 타입은 알맞은 형태에 맞게 converTo를 통해서 형변환후 객체 배열에 넣어준다.
4단계 WebServlet을 통해서 맵핑을 한다 -> WebServlet의 경우 URL주소를 맵핑하는데 클래스마다 맵핑해주는 것으로
@Controller + @RequsetMapping 의 기능을 합쳐논것이라고 생각하면된다.
1. HttpServletRequset 객체를 통해서 사용자의 요청을 얻어낼수 있는데 이를 Map 형태로 받는다.
- request.getParameterMap();
2. 그 후는 3번 형태와 비슷하지만 차이점이 있다면 Map을 통해서 map<K,V> 형태로 만들었을때 V값이 String[]이란 점이 차이점이다. (paramArr[i].getName()이게 K 값이 된다)
3. 매개변수를 넣을 배열 객체를 생성한 후에 해당 배열에 넣을때 Parameter 타입에 맞게 Model일경우 Model 생성 Requset, Resonse, value일경우 각각 맞게 넣어주고 invoke 통해서 메서드를 실행해준다.
'dev > Spring' 카테고리의 다른 글
[Spring] ModelAttribute, BindingResult (0) | 2022.06.04 |
---|---|
[Spring] RequestParam (0) | 2022.06.03 |
[Spring] Private한 메서드 호출 (0) | 2022.05.22 |
[Spring] MVC 패턴 - 관심사의 분리 (0) | 2022.05.22 |
[Spring] HTTP/ TOMCAT 전반적인 내용 (0) | 2022.05.20 |