호기심에서 HttpServlet 클래스의 코드를보고 부모 클래스 "GenericServlet"이 인터페이스 "ServletConfig"에 선언 된 getServletName() 메소드를 정의한다는 것을 알았습니다. 그러나 ServletConfig의 객체 "sc"가 null이 아닌 경우 GenericServlet의 getServletName() 메소드는 "sc.getServletName()"을 호출합니다. 방법의 구현을 보려면 이클립스에서 Ctrl + 클릭을 할 때 스스로를 호출하는 것처럼 보이기 때문에이 함수가 어떻게 작동하는지 이해할 수 없습니다! HttpServlet 클래스에도 오버라이드 된 구현이 없습니다! 여기 getServletName()은 Java에서 어떻게 작동합니까?
는 GenericServlet의 구현의 스냅 샷입니다 :public String getServletName() {
ServletConfig sc = getServletConfig();
if (sc == null) {
throw new IllegalStateException(
lStrings.getString("err.servlet_config_not_initialized"));
}
return sc.getServletName();
}
사람이 날 계몽 수 ..
스스로 부르는 것이 아닙니다. GenericServlet이 this.getServletName()이 아닌 servletConfig.getServletName()을 호출 중입니다. GenericServlet은 ServletConfig 인터페이스를 쉽게 구현하지만, servletConfig는 아닙니다. 그것은 init (ServletConfig config) 메소드를 통해 serveltConfig 객체를 얻고 있습니다.그런 다음 getServletName() 메서드에서이 호출을 config.getServletName() 메서드에 전달하는 프록시 역할을합니다. 여기서 이해하지 못하는 부분은 무엇입니까 ?? – Gas
네가 맞다. @Gas하지만 ServletConfig의 getServletName()이 단지 추상적 인 메소드이기 때문에 서블릿의 이름을 반환하는 방법은 내가 얻지 못하는 것이다. 또한 GenericServlet 클래스에서 "sc.getServletName()"을 Ctrl + 클릭하여 구현을 확인하면 다시 같은 방법으로 우리를 데려 갈 것입니다! 나는 String (Servlet의 이름)이 어디에서 본질적으로 반환되는지 알고 싶다. –