Servlet.java
~~~~~
String method = request.getParameter("method");
String check = request.getRequestURI();
//Reflection RF = new Reflection(method);
try {
Class cls = Class.forName("choice");
//리플렉션 할 클래스
choice c = new choice(check,method);
//
Field fld = cls.getField("method");
//불러오고 싶은값
System.out.println(c.method + "메소드 호출됨");
}
~~~~~
choice.java
import java.io.PrintWriter;
public class choice {
public String check;
public String method;
choice(String check,String method){
this.check = check;
this.method = method;
if(check.equals("/sservlet/member.do")){
MemberController mc = new MemberController(method);
System.out.println("mc call");
}
else if(check.equals("/sservlet/book.do")){
BookController bc = new BookController(method);
System.out.println("Bc call");
}
else if(check.equals("/sservlet/rental.do")){
}
else if(check.equals("/sservlet/admin.do")){
AdminController ac = new AdminController(method);
System.out.println("ac call");
}
else if(check.equals("/sservlet/guest.do")){
}
else{
}
}
}
>개선해야 할 사항
- choice.java 생성자에 로직이 있음. 클래스는 대문자 네이밍
- Class cls = Class.forName("choice");
Field fld = cls.getField("method"); 아무일도 하고 있지 않음.
- 매핑 증가할 때 마다 if문이 늘어나고 코드가 늘어 날수록 계속 수정해야함.
- 다시 소스를 봤더니 주석도 많고 쓸데없는 코드가 많음.
- 리플렉션에 대한 감이 전혀 없었고 사용법도 몰랐음.
(알아둘 것) 객체를 생성하는데 정적으로 생성하는 방법과 동적인 방법이 있음. 동적으로 사용할 때 클래스가 정말 있는지 없는지도 모르고 newInstance는 리턴타입이 Object이기 때문에 바로 거기에 있는 메소드를 호출할 수 없음. 그래서 거기에 있는 메소드를 사용하기위해 리플렉션을 이용해서 클래스
정보를 분석해서 쓸 수 있게 만듬.
'개발' 카테고리의 다른 글
서블릿으로 Dispatchservlet 역할 구현하기-6 (0) | 2016.07.04 |
---|---|
서블릿으로 Dispatchservlet 역할 구현하기-5 (0) | 2016.07.04 |
서블릿으로 Dispatchservlet 역할 구현하기-3 (reflection, method, invoke) (0) | 2016.07.04 |
서블릿으로 Dispatchservlet 역할 구현하기-2 (request.getRequestURI ,getParameter ) (0) | 2016.07.01 |
서블릿으로 Dispatchservlet 역할 구현하기-1 (0) | 2016.07.01 |