2014-04-30 59 views
1

所以我有這個小小的代碼:何時/如何Tomcat選擇ServletContext接口的具體類?

public class TestServlet extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) 
      throws ServletException, IOException { 
     final ServletContext servletContext = getServletContext(); 
     System.out.println(servletContext.getClass()); 
    } 
} 

打印出:

class org.apache.catalina.core.ApplicationContextFacade 

所以ServletContext的是一個接口,這意味着的getServletContext()方法返回一個接口。所以Tomcat的不知道怎麼樣什麼具體類(ApplicationContextFacade在這種情況下)使用?它如何或何時決定?

+0

從來沒有想過,但我確信,tomcat將在部署web-app時簡單創建一個ServletContect實例。具體實現是在org.apache.catalina.core.ApplicationContextFacade –

+1

+1內使用'final'本地。 –

+0

@ErikAllik我只鍵入sout並按下「TAB」,它自動轉換爲System.out.println(「」);我的光標已經在雙引號之間了。 :) 謝謝。 –

回答

3

Tomcat將在每個webapp的Context實例上創建,以便它可以知道哪個請求轉到哪個servlet。我相信ApplicationContextFacade是Tomcat在內部用來實現此目的的ServletContext的實現。可以理解Tomcat中的上下文是如何工作的,這將有助於更好地理解這一點。 Check here for starters

+1

是的,我猜ServletContext接口的實現取決於創建Container的人,即Tomcat。另一個容器(如jboss)上的相同代碼可能會提供不同的輸出。 –