MCPcopy Create free account
hub / github.com/castello/spring_basic / service

Method service

ch2/MyDispatcherServlet.java:24–68  ·  view source on GitHub ↗
(HttpServletRequest request, HttpServletResponse response)

Source from the content-addressed store, hash-verified

22@WebServlet("/myDispatcherServlet") // http://localhost/ch2/myDispatcherServlet?year=2021&month=10&day=1
23public class MyDispatcherServlet extends HttpServlet {
24 @Override
25 public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
26 Map map = request.getParameterMap();
27 Model model = null;
28 String viewName = "";
29
30 try {
31 Class clazz = Class.forName("com.fastcampus.ch2.YoilTellerMVC");
32 Object obj = clazz.newInstance();
33
34 // 1. main메서드의 정보를 얻는다.
35 Method main = clazz.getDeclaredMethod("main", int.class, int.class, int.class, Model.class);
36
37 // 2. main메서드의 매개변수 목록(paramArr)을 읽어서 메서드 호출에 사용할 인자 목록(argArr)을 만든다.
38 Parameter[] paramArr = main.getParameters();
39 Object[] argArr = new Object[main.getParameterCount()];
40
41 for(int i=0;i<paramArr.length;i++) {
42 String paramName = paramArr[i].getName();
43 Class paramType = paramArr[i].getType();
44 Object value = map.get(paramName);
45
46 // paramType중에 Model이 있으면, 생성 & 저장
47 if(paramType==Model.class) {
48 argArr[i] = model = new BindingAwareModelMap();
49 } else if(paramType==HttpServletRequest.class) {
50 argArr[i] = request;
51 } else if(paramType==HttpServletResponse.class) {
52 argArr[i] = response;
53 } else if(value != null) { // map에 paramName이 있으면,
54 // value와 parameter의 타입을 비교해서, 다르면 변환해서 저장
55 String strValue = ((String[])value)[0]; // getParameterMap()에서 꺼낸 value는 String배열이므로 변환 필요
56 argArr[i] = convertTo(strValue, paramType);
57 }
58 }
59
60 // 3. Controller의 main()을 호출 - YoilTellerMVC.main(int year, int month, int day, Model model)
61 viewName = (String)main.invoke(obj, argArr);
62 } catch(Exception e) {
63 e.printStackTrace();
64 }
65
66 // 4. 텍스트 파일을 이용한 rendering
67 render(model, viewName, response);
68 } // main
69
70 private Object convertTo(Object value, Class type) {
71 if(type==null || value==null || type.isInstance(value)) // 타입이 같으면 그대로 반환

Callers

nothing calls this directly

Calls 4

convertToMethod · 0.95
renderMethod · 0.95
invokeMethod · 0.80
getNameMethod · 0.45

Tested by

no test coverage detected