責(zé)任鏈模式:java.servlet.FilterChain是典型責(zé)任鏈模式應(yīng)用。所有的javax.servlet.Filter接口實現(xiàn),都會被加入到條鏈子,在鏈子末尾就是URL mapping的資源,可能是您的Servlet或JSP類,或者是org.apache.catalina.servlets.DefaultServlet。
事件監(jiān)聽模式:所有的Listener的注冊,在Tomcat的實現(xiàn)中,比如org.apache.catalina.core.StandardContext(ServletContext的實現(xiàn)),當(dāng)你的ServletContext(也就是WebApp)fire所有的ServletContextListener的contextInitialized方法。
解釋器模式:大家都知道,所有的JSP頁面都需要進(jìn)行translate成Servlet的Java Code。
Service Locator:Tomcat支持JDNI,那么通過命名空間能夠得到相應(yīng)的服務(wù),比如JDBC連接池。 觀察者模式:Tomcat支持Session復(fù)制,把Session信息復(fù)制到其他節(jié)點,也稱為發(fā)布-訂閱模式。 攔截器模式:javax.servlet.Filter就是一種URL的攔截。
模板方法:java.servlet.GenericServlet定義了模板方法,同時,javax.servlet.http.HttpServlet提供了默認(rèn)的模板實現(xiàn),HttpServlet的子類,不直接實現(xiàn)或者override了service方法,類似于doGet,doPost等等。
單例模式:所有的Filter,Servlet和Listener的實現(xiàn)類,其對象均被ClassLoader加載后,放入對應(yīng)的WebApp,這里不是說Tomcat的JVM只有一個實例。因為N個WebApp可以加載同一個類,那么就有N個對應(yīng)的實例,這個是由于Tomcat的ClassLoader機(jī)制決定的-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文件指令或者擴(kuò)張名,Jasper選擇不同的算法,選擇采用HTML方式,還是XML的解釋方式,生成Java源代碼。
組合模式:HttpServletRequest實現(xiàn)類中,組合了org.apache.catalina.Context 的實現(xiàn)類(org.apache.catalina.core.StandardContext)。
代理模式:ServletContext的實現(xiàn)類-org.apache.catalina.core.ApplicationContext,其是一個代理類,其處理交給了org.apache.catalina.core.StandardContext。
門面模式:在ServletContext等實現(xiàn)中,大量使用。