锁定老帖子 主题:Tomcat的设计模式 (欢迎大家讨论)
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (18)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-02
最后修改:2010-06-02
同上篇文章(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等实现中,大量使用。
笔者知识和时间有限,请大家添加、讨论和指正,谢谢。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-06-02
最后修改:2010-06-02
Java EE模式中,还有一些Tag方面的,ViewHelper模式等等。
|
|
返回顶楼 | |
发表时间:2010-07-16
楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了
|
|
返回顶楼 | |
发表时间:2010-07-16
由于工作需要,学习了一点tomcat源码,版本是6.0.18
楼主有兴趣,可以参考 http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/ |
|
返回顶楼 | |
发表时间:2010-07-16
yizhilong28 写道 由于工作需要,学习了一点tomcat源码,版本是6.0.18
楼主有兴趣,可以参考 http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/ 当时写这文章的员工所在的公司面试本人咯,呵呵,文章看了。 Tomcat的后兼容性并不好,尤其是利用它的接口。扩展起来还必须针对固定的版本(包括小版本号)。 |
|
返回顶楼 | |
发表时间:2010-07-16
linliangyi2007 写道 楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了
呵呵,,我觉得LZ已经不出了,我们也不能太懒,,自己去研究一下不是更好。 |
|
返回顶楼 | |
发表时间:2010-07-16
xgj1988 写道 linliangyi2007 写道 楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了
呵呵,,我觉得LZ已经不出了,我们也不能太懒,,自己去研究一下不是更好。 为什么说Tomcat的UML不太理想,正如我前面所说,它的接口改动不小,即使在小版本发布。在我们系统中,本人实现了一些扩展,又来遇到了源代码不兼容问题,后来规定所有开发和生产系统环境必须统一Tomcat版本。 |
|
返回顶楼 | |
发表时间:2010-07-19
|
|
返回顶楼 | |
浏览 8466 次