`

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等实现中,大量使用。

 

  笔者知识和时间有限,请大家添加、讨论和指正,谢谢。

分享到:
评论
7 楼 cutesource 2010-07-19  
<p>可以参见以下几篇博文:</p>
<p><span style="font-family: verdana, sans-serif; line-height: 18px;">
<h1 class="title_txt" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0.5em; padding-left: 1.5em; font-size: 15px; font-family: 'Microsoft yahei', verdana, sans-serif; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #dcdcdc; margin: 0px;"><a style="text-decoration: none; color: #006bad;" href="http://blog.csdn.net/cutesource/archive/2009/12/14/5006062.aspx">Tomcat源码分析(一)------ 架构</a></h1>
<p>
</p>
<h1 class="title_txt" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0.5em; padding-left: 1.5em; font-size: 15px; font-family: 'Microsoft yahei', verdana, sans-serif; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #dcdcdc; margin: 0px;"><a style="text-decoration: none; color: #006bad;" href="http://blog.csdn.net/cutesource/archive/2009/12/19/5040417.aspx">Tomcat源码分析(二)------ 一次完整请求的里里外外</a></h1>
<p>
</p>
<h1 class="title_txt" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0.5em; padding-left: 1.5em; font-size: 15px; font-family: 'Microsoft yahei', verdana, sans-serif; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #dcdcdc; margin: 0px;"><a style="text-decoration: none; color: #336699;" href="http://blog.csdn.net/cutesource/archive/2009/12/26/5081916.aspx">Tomcat源码分析(三)------ 可携带状态的线程池</a></h1>
<p>
</p>
<h1 class="title_txt" style="padding-top: 0px; padding-right: 0px; padding-bottom: 0.5em; padding-left: 1.5em; font-size: 15px; font-family: 'Microsoft yahei', verdana, sans-serif; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: #dcdcdc; margin: 0px;"><a style="text-decoration: none; color: #006bad;" href="http://blog.csdn.net/cutesource/archive/2009/12/28/5091732.aspx">Tomcat源码分析(四)------ Request和Response处理的全过程</a></h1>
</span></p>


6 楼 mercyblitz 2010-07-16  
xgj1988 写道
linliangyi2007 写道
楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了


呵呵,,我觉得LZ已经不出了,我们也不能太懒,,自己去研究一下不是更好。



为什么说Tomcat的UML不太理想,正如我前面所说,它的接口改动不小,即使在小版本发布。在我们系统中,本人实现了一些扩展,又来遇到了源代码不兼容问题,后来规定所有开发和生产系统环境必须统一Tomcat版本。
5 楼 xgj1988 2010-07-16  
linliangyi2007 写道
楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了


呵呵,,我觉得LZ已经不出了,我们也不能太懒,,自己去研究一下不是更好。
4 楼 mercyblitz 2010-07-16  
yizhilong28 写道
由于工作需要,学习了一点tomcat源码,版本是6.0.18
楼主有兴趣,可以参考
http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/


当时写这文章的员工所在的公司面试本人咯,呵呵,文章看了。

Tomcat的后兼容性并不好,尤其是利用它的接口。扩展起来还必须针对固定的版本(包括小版本号)。

3 楼 yizhilong28 2010-07-16  
由于工作需要,学习了一点tomcat源码,版本是6.0.18
楼主有兴趣,可以参考
http://www.ibm.com/developerworks/cn/java/j-lo-tomcat2/
2 楼 linliangyi2007 2010-07-16  
楼主可以将这些类的关系做个整理,如果能整理出UML图,就功德无量了
1 楼 mercyblitz 2010-06-02  
Java EE模式中,还有一些Tag方面的,ViewHelper模式等等。

相关推荐

    tomcat与java web开发技术详解关盘内容

    通过这些源码,学习者可以动手实践,加深对理论知识的理解,并且能够学习到实际项目中常用的设计模式和最佳实践。 详细知识点: 1. **Tomcat的安装与配置**:包括下载Tomcat,配置环境变量,启动和关闭服务,以及...

    基于linux的J2EE超市收银网站课程设计

    在J2EE框架下,通常会使用MVC(Model-View-Controller)设计模式,将业务逻辑、视图展示和数据处理分离,提高代码的可维护性和可扩展性。 此外,项目中提到,开发者需要在原有的Java基础上学习如何在Linux环境中...

    Apress.Pro.Java.EE.Spring.Patterns.Aug.2008.rar

    《Apress.Pro.Java.EE.Spring.Patterns.Aug.2008》这本书是关于Java企业级应用和Spring框架设计模式的深度探讨。该压缩包包含了2008年8月出版的完整电子书版本,主要文件为"Apress.Pro.Java.EE.Spring.Patterns.Aug....

    java高手真经_系统架构卷:java.web系统设计与架构

    接着,书中可能涵盖了MVC(Model-View-Controller)设计模式,这是Java Web开发中常见的架构模式。通过分离模型、视图和控制器,开发者可以更好地组织代码,提高可维护性和可扩展性。Spring框架,作为Java领域中最受...

    《Java-web程序设计》教案.doc

    教学过程首先涉及配置JSP运行环境,主要任务是安装Tomcat服务器并展示欢迎页面。正确安装JDK是基础,因为Tomcat依赖JDK。Tomcat服务器是Apache软件基金会的一个开源项目,广泛用于部署Java Web应用程序。 2. **...

    [毕设论文模板例子]java家教平台毕业设计论文.doc

    在设计模式上,论文采用了MVC(Model-View-Controller)模式,将数据处理、用户界面和控制逻辑分离,提高了代码的可维护性和可扩展性。 2. **技术选型**:选用Java作为后台开发语言,Java以其强大的跨平台能力和...

    javaBBS系统forum.zip

    在JavaBBS系统的实现过程中,开发者通常会遵循MVC(Model-View-Controller)设计模式,将业务逻辑(Model)、用户界面(View)和控制逻辑(Controller)分离,使得代码结构清晰,易于维护。Model层通常由JavaBeans或...

    计算机课程毕设-基于java的家教平台系统设计与实现.doc

    本毕设项目基于B/S(Browser/Server,浏览器/服务器)架构,采用经典的MVC(Model-View-Controller,模型-视图-控制器)设计模式进行开发,利用Java语言的强大功能和灵活性,以及Oracle数据库的高效稳定存储能力。...

    基于ssm企业员工岗前培训管理系统的设计与实现(部署视频)-kaic.zip

    SpringMVC是Spring的一个模块,主要负责处理HTTP请求,实现了Model-View-Controller(MVC)设计模式,使得业务逻辑与视图层分离,提高了代码的可维护性。MyBatis则是一个优秀的持久层框架,它简化了数据库操作,将...

    水木清华站∶Java版精华区 含jsp及js等集合.chm

    [目录]EJB 的设计模式 6. [目录]Servlet Container 和 应用服务器 3. [目录]TOMCAT 9. [目录]纪念光盘精华区精选目录 1. [目录]Java编程 1. [目录]Java简单问题 2. [目录]为什么...

    基于SpringBoot+Mybatis的个人博客系统设计与实现.docx

    SpringBoot作为一款快速开发框架,以其简洁的配置、自动化特性以及丰富的生态系统在Java开发领域广受欢迎。而Mybatis则是一款优秀的持久层框架,它简化了SQL操作,使数据访问更为直观。 首先,论文从研究背景出发,...

    基于SpringBoot和Vue框架的刹车片工厂流程再造系统的设计与实现.docx

    论文详细阐述了从需求分析、系统设计到实现与测试的全过程,涵盖了SpringBoot的MVC设计模式、配置管理、数据库连接池配置、安全配置以及Vue的路由管理、组件通信、状态管理等内容。同时,论文还讨论了在实际开发中...

    毕业设计(论文)-基于Strust2的停车场管理系统设计与实现(21页).doc

    - **MVC(Model-View-Controller)模式**:MVC是一种广泛使用的软件架构模式,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种分层架构有助于代码的重用和维护,同时也使得开发...

    以登陆例子讲解Jsp+servlet+javaBean框架实现MVC模式.docx

    MVC(Model-View-Controller)模式是一种广泛应用于软件工程的设计模式,尤其在Web应用开发中非常常见。它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种分离有助于提高系统的可...

    基于java的高校学生选课系统项目源码.zip

    2. **MVC设计模式**:通常在Web应用开发中,Model-View-Controller(MVC)模式被广泛应用。模型负责数据处理和业务逻辑,视图负责展示数据,控制器协调模型和视图的交互。学生选课系统可能采用这种架构,以提高代码...

    基于springboot+vue的地方美食分享系统源码.zip

    在MVC(Model-View-Controller)设计模式下,SpringBoot的Spring MVC模块负责处理视图和控制器之间的交互。控制器接收来自前端的请求,处理业务逻辑,然后将数据模型返回给视图层进行展示。在此项目中,可能使用了...

    北大青鸟3.0 J2ee PPT

    9. **MVC模式与Struts**:Model-View-Controller模式是Web开发中的常用设计模式,Struts是J2EE下实现MVC的框架之一。PPT可能会解释如何使用Struts构建基于MVC的应用。 10. **部署与服务器**:最后,教程可能介绍了...

Global site tag (gtag.js) - Google Analytics