본문 바로가기

개발

서블릿으로 Dispatchservlet 역할 구현하기-4(reflection)

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이기 때문에 바로 거기에 있는 메소드를 호출할 수 없음그래서 거기에 있는 메소드를 사용하기위해 리플렉션을 이용해서 클래스

정보를 분석해서 쓸 수 있게 만듬.