Tomcat的設計模式 (歡迎大家討論)

   同上篇文章(JDBC設計模式)類似,也是談設計模式,不過這次要談的是Tomcat。

 

   在面試中,如題。 我當時回答的是Mediator模式,好比調制解調器,就是常說的“貓”,通過模擬信號到電子信號。那麼Tomcat也是如此,接收和解析的HTTP請求,封裝成HttpServletRequest對象。

 

   當時比較緊張,可能沒有把題目吃透,那麼這裏我解釋一下。

 

  Tomcat是Servlet/JSP規範的RI,那也就說Servlet裏面用到哪些設計模式?同時也有其特殊功能性。

 

  責任鏈模式:java.servlet.FilterChain是典型責任鏈模式應用。所有的javax.servlet.Filter接口實現,都會被加入到條鏈子,在鏈子末尾就是URL mapping的資源,可能是您的Servlet或JSP類,或者是org.apache.catalina.servlets.DefaultServlet。

 

  事件監聽模式:所有的Listener的註冊,在Tomcat的實現中,比如org.apache.catalina.core.StandardContext(ServletContext的實現) ,當你的ServletContext(也就是WebApp)fire所有的ServletContextListener的contextInitialized方法。

 

  解釋器模式:大家都知道,所有的JSP頁面都需要進行translate成Servlet的Java Code。

 

  Service Locator:Tomcat支持JDNI,那麼通過命名空間能夠得到相應的服務,比如JDBC連接池。 觀察者模式:Tomcat支持Session複製,把Session信息複製到其他節點,也稱爲發佈-訂閱模式。 攔截器模式:javax.servlet.Filter就是一種URL的攔截。

 

  模板方法:java.servlet.GenericServlet定義了模板方法,同時,javax.servlet.http.HttpServlet提供了默認的模板實現,HttpServlet的子類,不直接實現或者override了service方法,類似於doGet,doPost等等。

 

  單例模式:所有的Filter,Servlet和Listener的實現類,其對象均被ClassLoader加載後,放入對應的WebApp,這裏不是說Tomcat的JVM只有一個實例。因爲N個WebApp可以加載同一個類,那麼就有N個對應的實例,這個是由於Tomcat的ClassLoader機制決定的-WebApp的Classloader相對獨立。

 

  裝飾器模式:javax.servlet.http.HttpServletRequestWrapper類。

 

  訪問者模式:JSP的解析器,Jasper框架利用的Visitor模式來解析HTML和XML格式的JSP文件。其中org.apache.jasper.compiler.Node.Visitor是Visitor類,那麼org.apache.jasper.compiler.Node是Visitable類。

 

  策略模式:通過web.xml配置、JSP文件指令或者擴張名,Jasper選擇不同的算法,選擇採用HTML方式,還是XML的解釋方式,生成Java源代碼。

 

  組合模式:HttpServletRequest實現類中,組合了org.apache.catalina.Context 的實現類(org.apache.catalina.core.StandardContext)。

 

  代理模式:ServletContext的實現類-org.apache.catalina.core.ApplicationContext,其是一個代理類,其處理交給了org.apache.catalina.core.StandardContext。

 

  門面模式:在ServletContext等實現中,大量使用。

 

  筆者知識和時間有限,請大家添加、討論和指正,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章