From 5bb0c8d488e6ac76b501bec0affdb6af1a0dca69 Mon Sep 17 00:00:00 2001 From: kim Date: Sat, 16 Jan 2021 15:15:33 +0900 Subject: [PATCH] =?UTF-8?q?java=20reflection=20-=20=EB=A6=AC=ED=94=8C?= =?UTF-8?q?=EB=A0=89=EC=85=98=ED=95=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EB=B6=84=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reflect/controller/UserController.java | 10 ++-- .../reflect/controller/dto/JoinDto.java | 40 ++++++++++++++ .../reflect/controller/dto/LoginDto.java | 30 +++++++++++ .../example/reflect/filter/Dispatcher.java | 22 ++++++-- .../java/com/example/reflect/model/User.java | 51 ++++++++++++++++++ .../reflect/controller/UserController.class | Bin 1089 -> 1355 bytes .../reflect/controller/dto/JoinDto.class | Bin 0 -> 1300 bytes .../reflect/controller/dto/LoginDto.class | Bin 0 -> 1087 bytes .../example/reflect/filter/Dispatcher.class | Bin 3223 -> 3925 bytes .../com/example/reflect/model/User.class | Bin 0 -> 1527 bytes .../reflect/controller/UserController.class | Bin 1089 -> 1355 bytes .../reflect/controller/dto/JoinDto.class | Bin 0 -> 1300 bytes .../reflect/controller/dto/LoginDto.class | Bin 0 -> 1087 bytes .../example/reflect/filter/Dispatcher.class | Bin 3223 -> 3925 bytes .../com/example/reflect/model/User.class | Bin 0 -> 1527 bytes 15 files changed, 145 insertions(+), 8 deletions(-) create mode 100644 reflect/src/main/java/com/example/reflect/controller/dto/JoinDto.java create mode 100644 reflect/src/main/java/com/example/reflect/controller/dto/LoginDto.java create mode 100644 reflect/src/main/java/com/example/reflect/model/User.java create mode 100644 reflect/target/classes/com/example/reflect/controller/dto/JoinDto.class create mode 100644 reflect/target/classes/com/example/reflect/controller/dto/LoginDto.class create mode 100644 reflect/target/classes/com/example/reflect/model/User.class create mode 100644 reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/controller/dto/JoinDto.class create mode 100644 reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/controller/dto/LoginDto.class create mode 100644 reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/model/User.class diff --git a/reflect/src/main/java/com/example/reflect/controller/UserController.java b/reflect/src/main/java/com/example/reflect/controller/UserController.java index cf9d6cc7..fc45f7b0 100644 --- a/reflect/src/main/java/com/example/reflect/controller/UserController.java +++ b/reflect/src/main/java/com/example/reflect/controller/UserController.java @@ -1,17 +1,19 @@ package com.example.reflect.controller; import com.example.reflect.anno.RequestMapping; +import com.example.reflect.controller.dto.JoinDto; +import com.example.reflect.controller.dto.LoginDto; public class UserController { - @RequestMapping("/join") - public String join(){ + @RequestMapping("/user/join") + public String join(JoinDto dto){ System.out.println("join() 함수 호출"); return "/"; } - @RequestMapping("/login") - public String login(){ + @RequestMapping("/user/login") + public String login(LoginDto dto){ System.out.println("login()함수 호출"); return "/"; } diff --git a/reflect/src/main/java/com/example/reflect/controller/dto/JoinDto.java b/reflect/src/main/java/com/example/reflect/controller/dto/JoinDto.java new file mode 100644 index 00000000..ee7d407f --- /dev/null +++ b/reflect/src/main/java/com/example/reflect/controller/dto/JoinDto.java @@ -0,0 +1,40 @@ +package com.example.reflect.controller.dto; + +public class JoinDto { + private String username; + private String password; + private String email; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return "JoinDto{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + ", email='" + email + '\'' + + '}'; + } +} diff --git a/reflect/src/main/java/com/example/reflect/controller/dto/LoginDto.java b/reflect/src/main/java/com/example/reflect/controller/dto/LoginDto.java new file mode 100644 index 00000000..81f58120 --- /dev/null +++ b/reflect/src/main/java/com/example/reflect/controller/dto/LoginDto.java @@ -0,0 +1,30 @@ +package com.example.reflect.controller.dto; + +public class LoginDto { + private String username; + private String password; + + @Override + public String toString() { + return "LoginDto{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + '}'; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/reflect/src/main/java/com/example/reflect/filter/Dispatcher.java b/reflect/src/main/java/com/example/reflect/filter/Dispatcher.java index e71163b1..cf133298 100644 --- a/reflect/src/main/java/com/example/reflect/filter/Dispatcher.java +++ b/reflect/src/main/java/com/example/reflect/filter/Dispatcher.java @@ -10,6 +10,8 @@ import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Enumeration; public class Dispatcher implements Filter { @@ -50,14 +52,26 @@ public class Dispatcher implements Filter { for (Method method : methods) { // 메소드 갯수만큼 반복 Annotation annotation = method.getDeclaredAnnotation(RequestMapping.class); RequestMapping requestMapping = (RequestMapping) annotation; - System.out.println(requestMapping.value()); +// System.out.println(requestMapping.value()); if(requestMapping.value().equals(endPoint)) { try { - String path = (String) method.invoke(userController); + Parameter[] parameters = method.getParameters(); + String path = null; + if(parameters.length != 0) { +// System.out.println("parameters[0].getType() : " + parameters[0].getType()); + Object dtoInstance = parameters[0].getType().getConstructor().newInstance(); +// String username = request.getParameter("username"); +// String password = request.getParameter("password"); +// System.out.println(username + ", " + password); + Enumeration keys = request.getParameterNames(); // username, password + // keys 값을 parameterName -> setParameterName 으로 변경 - RequestDispatcher dis = request.getRequestDispatcher(path); - // 내부에서 실행하기 때문에 필터 안탐 + path = "/"; + } else { + path = (String) method.invoke(userController); + } + RequestDispatcher dis = request.getRequestDispatcher(path); // 내부에서 실행하기 때문에 필터 안탐 dis.forward(request, response); } catch (Exception e) { e.printStackTrace(); diff --git a/reflect/src/main/java/com/example/reflect/model/User.java b/reflect/src/main/java/com/example/reflect/model/User.java new file mode 100644 index 00000000..266c55dd --- /dev/null +++ b/reflect/src/main/java/com/example/reflect/model/User.java @@ -0,0 +1,51 @@ +package com.example.reflect.model; + +public class User { + + private int id; + private String username; + private String password; + private String email; + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + ", email='" + email + '\'' + + '}'; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/reflect/target/classes/com/example/reflect/controller/UserController.class b/reflect/target/classes/com/example/reflect/controller/UserController.class index 6b202f1de45fc5d6728a067b844b4bdaea20df8f..b67e37248bcb3a8b6eb6f341912f48eeaf7cf4eb 100644 GIT binary patch delta 480 zcmaivyH3ME6hvp&BwlPs5QK3I#DVY%Cb1!yheU%#Dn!RG1R)T@5(yOrJrc#r9lt<9 zK}UgXHFM|eZcjXE-s9WdJ%9jf8Z^xGV-|A)H4XD{1r`MA z0u2FAg|A{!dgpwzCZA1tp&RXPG_f3?F*_d^Si$P;6>}L= z;|E^JZGnTwuiR!itAZaE`5{@az9`31;706w95IapI-SQ9~ z!5fG}yPwVZot%?T&iM>y#(w;~y#vP#Lqax6Y|=Gsg>2I^>=m^@&PTIk`K<)qK6UfadUbN0g zXqutX?@OD8x*sLeoN{Aqn#4w>F)#k)7~Ayp7U@wch_Mv3im@8LCqc-o5Udp00_}A2 zf_$QO4)N7bE0Rt6K?SR{)`A3F#TxAdu3??*zs27W`w}WnM;32jb6k8(WHJ6!ZSOl` zvrlLI=mPyBi~bG8AZz@2M&rJidMgq{34<(0f?SUVQNkbv0x4bs!oo60DH0?e23d;) z*^UN@he0+8Wa|5*zY*TzpI-kc+uPmQ3~XiVgCwp>gKBmNR@n`(xAdJ}7q}kbP)5mVY9U zZZyvYGN)=ls*SGY$Y+yLPr5J7o*m>-ebYWSU5n%SV#a@Gc>NQw z#8L4~P29eGYH=&;A<7Y3qd~`}z}~V=k0+KrkgmX1c>Gi7>Z7`bHV!qc;|k9@0@`6M z^ptlucw-M0f%bn`BcR6=&wCf-B3+O<9!rOAs*}|BiWPHga=F?#UG+BH#sPga8hv3Y zdZ>+HM$|NBK^)kmcbOuCMnU6R>k{H?aBORS2uNd_=GyE4cCbqkS&0h0S^S2Qv-tQY zQm-$OE@!5c=o_*$==CXb<@{`+5H9GSX?2R?7gD7VS1K%2I*uw`jVi^MlzmyOFNoJ7 z@iknZW1a*qQ0J}ocVy!x`JV!5S;LL)261+tft_OK*q>@5NMRYIk_fV&3{qGIsS?Qk OKS22E801Fa+s(gc!OE)u literal 0 HcmV?d00001 diff --git a/reflect/target/classes/com/example/reflect/filter/Dispatcher.class b/reflect/target/classes/com/example/reflect/filter/Dispatcher.class index a4dc24713d8595ae3de3bcba253a43759fbe465a..bf64270f1b7eac2425ede911f41481d219e46bfe 100644 GIT binary patch delta 1689 zcmai!-*Zz{5XV0!NqcT?PMb8L*bB6@RB0+mrKLqu6y$dW1ude0KS)a`#gdjZP!KhM zDEWNJW_QoIyWidY?%5o6 zzAMXI{^Q(5UoP*7Hu|_Z1mI4Ce33uep)O#T)o*9Nt;f(G+S(f zw73{48;5R9+GaId14P*7LiD)D?KV4jT(i^lc|!AKgUwT9Eb85CyDVl}?6%nB`aZ4M z>)t*S;92%*p0kAL<;0PV_JETj)=X{|Eja(12q&a0cO~2twzEXImmMc_^ zA;+12cn@=CILm@4iJp;{ zRu#>DYehq5bYF_e*&@G_-KmXg>_2UlsN$%sf}&b>%OhIGE^=!2NB`KmTjVZZPRPbg z6KRI*JZiXAPKxQ&O3YO7HsGaLuBx+9dtK(T<1Y@>#*AaaksM=U1x~>wBC$fJaDZZk zlb>Vk5so<~#|^QdiiMou#Ure8g5KI3CEg1-ImU?^pJPI-$nk|s2PpFp3yV2%*o>UU zI*)(#8EhwQ<>sBuHOR84fXH15)rVuHwGp=&Ji z;3rT)DUFn|fGX~xj*arqwS{`Na~u1JaX`NIGFvw44%ve_3^12(xRall$1lw1H;Me6 zMJkWQD#TJLVTmfHNsSYG5_Kxd@}Zdsu@XN^GR&YzP^M9zp@Fb~RWehoh@{#hNoUCr zd&x-Z20{WGkOF2?B%pcRE=2^Tyi-!hTnePf6H>}N3Z?9GQp^Gwy$tuS!MoN%7P*f> zti>#mN8nmb+$C(}t4t+JStisOA?R-DK934zNxcn1&jNmC1^1%m{s-=(8H<%d-BI)) zYcQIq=6=m8%>x>b#;d8+1T_!JPf5-}4pMYIw|3W0vs$x86Va>{1bM=Pl(;b0hrb$z eAWUx3Jah%$73tt%sWD#~eS}A)@pW?Y5dRZ9AzK9i delta 1021 zcmaKr*>ej4VkohJ=h5i8?L> z7gWTK0$Tb+RUT82a;#8Bd9aGo(ibToeDuHI$@uk1m2Xyco$a3c-S0bn?;mZagYqwb zU;F`B!b4y$ z9w~N?6h{X;2TF&BM+dv-v+gE$)nQ}8C>g!RE5;GyRR?d&r6S|^9FAkWuLcr+aVwJr1Ig)L_YTp@A@2L%9!>!&U;~BqAT-0 z9~d9{oZuse)!|p}>a5SleByI5g8Y$!t*~O2Okvq9 zHOJD*Zb=p@%;XX|{s;#4-IVbr| zbk<9;FIgKzB_RUlo;YDv5{7qaxt&xQ=#t;ve)1r;z{v diff --git a/reflect/target/classes/com/example/reflect/model/User.class b/reflect/target/classes/com/example/reflect/model/User.class new file mode 100644 index 0000000000000000000000000000000000000000..294948972822daa47109fbce638b357e2c403d4f GIT binary patch literal 1527 zcmaKrYflqV5Qg7VdfAp0N~NH3u|=^LE-Q#vC@4geCXF>gN&L8NkGN!e$+q_kuy2pBa1Q4~~xAb=VW7DGTAz9ZAQy{!!G>p!!z*shSBoI7k)~I^2WHjW#dha4ulndIjC@8fHyeG#qdJV$=#McCn`-fvdcFDxj{Wx-NDhqhcCKPCT;{ z=Xb%086@e%)s%fH9GK;uH<1!pyj)v>_<*ZiIU(igQuS6#Hb~4hKW#3^y zv{s!BSimBAf|a2!7k{QhxVZcqfwyNEO9Xq==qJKGL=uX#j*^LIdWa>)oq*a8TyX*u z=YjZF+SbG5cWN2H07D(ZDEBeaSaLB2GtklBJjKbO;!wZ%7H+%6yL425YQp)sQ-lW! z@J|ksDMXX93Ny|ww*xE0GP8KgeLaRjqTVSMd_nFYa{*-K6j3ionn0FDfbcytNY)ob z^@1$>g5>-`R4+)5K=LC%_@OaK-WO!T3$o@5vf>Xi;RV?skj)Vw{L&d@)qV_X{{d^> B^Y8!w literal 0 HcmV?d00001 diff --git a/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/controller/UserController.class b/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/controller/UserController.class index 6b202f1de45fc5d6728a067b844b4bdaea20df8f..b67e37248bcb3a8b6eb6f341912f48eeaf7cf4eb 100644 GIT binary patch delta 480 zcmaivyH3ME6hvp&BwlPs5QK3I#DVY%Cb1!yheU%#Dn!RG1R)T@5(yOrJrc#r9lt<9 zK}UgXHFM|eZcjXE-s9WdJ%9jf8Z^xGV-|A)H4XD{1r`MA z0u2FAg|A{!dgpwzCZA1tp&RXPG_f3?F*_d^Si$P;6>}L= z;|E^JZGnTwuiR!itAZaE`5{@az9`31;706w95IapI-SQ9~ z!5fG}yPwVZot%?T&iM>y#(w;~y#vP#Lqax6Y|=Gsg>2I^>=m^@&PTIk`K<)qK6UfadUbN0g zXqutX?@OD8x*sLeoN{Aqn#4w>F)#k)7~Ayp7U@wch_Mv3im@8LCqc-o5Udp00_}A2 zf_$QO4)N7bE0Rt6K?SR{)`A3F#TxAdu3??*zs27W`w}WnM;32jb6k8(WHJ6!ZSOl` zvrlLI=mPyBi~bG8AZz@2M&rJidMgq{34<(0f?SUVQNkbv0x4bs!oo60DH0?e23d;) z*^UN@he0+8Wa|5*zY*TzpI-kc+uPmQ3~XiVgCwp>gKBmNR@n`(xAdJ}7q}kbP)5mVY9U zZZyvYGN)=ls*SGY$Y+yLPr5J7o*m>-ebYWSU5n%SV#a@Gc>NQw z#8L4~P29eGYH=&;A<7Y3qd~`}z}~V=k0+KrkgmX1c>Gi7>Z7`bHV!qc;|k9@0@`6M z^ptlucw-M0f%bn`BcR6=&wCf-B3+O<9!rOAs*}|BiWPHga=F?#UG+BH#sPga8hv3Y zdZ>+HM$|NBK^)kmcbOuCMnU6R>k{H?aBORS2uNd_=GyE4cCbqkS&0h0S^S2Qv-tQY zQm-$OE@!5c=o_*$==CXb<@{`+5H9GSX?2R?7gD7VS1K%2I*uw`jVi^MlzmyOFNoJ7 z@iknZW1a*qQ0J}ocVy!x`JV!5S;LL)261+tft_OK*q>@5NMRYIk_fV&3{qGIsS?Qk OKS22E801Fa+s(gc!OE)u literal 0 HcmV?d00001 diff --git a/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/filter/Dispatcher.class b/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/filter/Dispatcher.class index a4dc24713d8595ae3de3bcba253a43759fbe465a..bf64270f1b7eac2425ede911f41481d219e46bfe 100644 GIT binary patch delta 1689 zcmai!-*Zz{5XV0!NqcT?PMb8L*bB6@RB0+mrKLqu6y$dW1ude0KS)a`#gdjZP!KhM zDEWNJW_QoIyWidY?%5o6 zzAMXI{^Q(5UoP*7Hu|_Z1mI4Ce33uep)O#T)o*9Nt;f(G+S(f zw73{48;5R9+GaId14P*7LiD)D?KV4jT(i^lc|!AKgUwT9Eb85CyDVl}?6%nB`aZ4M z>)t*S;92%*p0kAL<;0PV_JETj)=X{|Eja(12q&a0cO~2twzEXImmMc_^ zA;+12cn@=CILm@4iJp;{ zRu#>DYehq5bYF_e*&@G_-KmXg>_2UlsN$%sf}&b>%OhIGE^=!2NB`KmTjVZZPRPbg z6KRI*JZiXAPKxQ&O3YO7HsGaLuBx+9dtK(T<1Y@>#*AaaksM=U1x~>wBC$fJaDZZk zlb>Vk5so<~#|^QdiiMou#Ure8g5KI3CEg1-ImU?^pJPI-$nk|s2PpFp3yV2%*o>UU zI*)(#8EhwQ<>sBuHOR84fXH15)rVuHwGp=&Ji z;3rT)DUFn|fGX~xj*arqwS{`Na~u1JaX`NIGFvw44%ve_3^12(xRall$1lw1H;Me6 zMJkWQD#TJLVTmfHNsSYG5_Kxd@}Zdsu@XN^GR&YzP^M9zp@Fb~RWehoh@{#hNoUCr zd&x-Z20{WGkOF2?B%pcRE=2^Tyi-!hTnePf6H>}N3Z?9GQp^Gwy$tuS!MoN%7P*f> zti>#mN8nmb+$C(}t4t+JStisOA?R-DK934zNxcn1&jNmC1^1%m{s-=(8H<%d-BI)) zYcQIq=6=m8%>x>b#;d8+1T_!JPf5-}4pMYIw|3W0vs$x86Va>{1bM=Pl(;b0hrb$z eAWUx3Jah%$73tt%sWD#~eS}A)@pW?Y5dRZ9AzK9i delta 1021 zcmaKr*>ej4VkohJ=h5i8?L> z7gWTK0$Tb+RUT82a;#8Bd9aGo(ibToeDuHI$@uk1m2Xyco$a3c-S0bn?;mZagYqwb zU;F`B!b4y$ z9w~N?6h{X;2TF&BM+dv-v+gE$)nQ}8C>g!RE5;GyRR?d&r6S|^9FAkWuLcr+aVwJr1Ig)L_YTp@A@2L%9!>!&U;~BqAT-0 z9~d9{oZuse)!|p}>a5SleByI5g8Y$!t*~O2Okvq9 zHOJD*Zb=p@%;XX|{s;#4-IVbr| zbk<9;FIgKzB_RUlo;YDv5{7qaxt&xQ=#t;ve)1r;z{v diff --git a/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/model/User.class b/reflect/target/reflect-1.0-SNAPSHOT/WEB-INF/classes/com/example/reflect/model/User.class new file mode 100644 index 0000000000000000000000000000000000000000..294948972822daa47109fbce638b357e2c403d4f GIT binary patch literal 1527 zcmaKrYflqV5Qg7VdfAp0N~NH3u|=^LE-Q#vC@4geCXF>gN&L8NkGN!e$+q_kuy2pBa1Q4~~xAb=VW7DGTAz9ZAQy{!!G>p!!z*shSBoI7k)~I^2WHjW#dha4ulndIjC@8fHyeG#qdJV$=#McCn`-fvdcFDxj{Wx-NDhqhcCKPCT;{ z=Xb%086@e%)s%fH9GK;uH<1!pyj)v>_<*ZiIU(igQuS6#Hb~4hKW#3^y zv{s!BSimBAf|a2!7k{QhxVZcqfwyNEO9Xq==qJKGL=uX#j*^LIdWa>)oq*a8TyX*u z=YjZF+SbG5cWN2H07D(ZDEBeaSaLB2GtklBJjKbO;!wZ%7H+%6yL425YQp)sQ-lW! z@J|ksDMXX93Ny|ww*xE0GP8KgeLaRjqTVSMd_nFYa{*-K6j3ionn0FDfbcytNY)ob z^@1$>g5>-`R4+)5K=LC%_@OaK-WO!T3$o@5vf>Xi;RV?skj)Vw{L&d@)qV_X{{d^> B^Y8!w literal 0 HcmV?d00001