君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

2012年12月2日 #

摘要: 转载http://www.infoq.com/cn/articles/zh-tomcat-http-request-2?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。本文首先从应用层次分析了tomcat所 阅读全文
posted @ 2012-12-02 23:52 刺猬的温驯 阅读(246) 评论(0) 推荐(1) 编辑

摘要: 转载http://www.infoq.com/cn/articles/zh-tomcat-http-request-1很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动。这样,这些应用服务器的性能基本上就取决于Tomcat处理HTTP请求的connector模块的性能。本文首先从应用层次分析了tomcat所有的connector种类及用法,接着从架构上分析了connector模块在整个tomcat中所处的位置,最后对connector做了详细的源代码分析。并且我们以Http11NioProtocol 阅读全文
posted @ 2012-12-02 23:49 刺猬的温驯 阅读(339) 评论(0) 推荐(1) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996 我们知道,在Tomcat的世界里,一个Host容器代表一个虚机器资源,Context容器代表一个应用,所谓的部署器就是能够把Context容器添加进Host容器中去的一个组件。显然,一个Host容器应该拥有一个部署器组件。简单的部署代码应该是下面这样的:[java]view plaincopyprint?Contextcontext=newStandardContext();Hosthost=newStandardHost();host.addChild(conte 阅读全文
posted @ 2012-12-02 17:18 刺猬的温驯 阅读(262) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在明白Tomcat的Session机制之前,先要了解Session,Cookie,JSESSIONID这几个概念。JSESSIONID是一个唯一标识号,用来标识服务器端的Session,也用来标识客户端的Cookie,客户端和服务器端通过这个JSESSIONID来一一对应。这里需要说明的是Cookie已经包含JSESSIONID了,可以理解为JSESSIONID是Cookie里的一个属性。让我假设一次客户端连接来说明我对个这三个概念的理解: Http连接本身是无状态. 阅读全文
posted @ 2012-12-02 17:16 刺猬的温驯 阅读(511) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在讲Tomcat的载入器之前,先要了解一下java的类加载机制,这里就不具体说了,仅仅写一点我认为比较重要的东西: 1:一般实现自己的类加载器是重写ClassLoader的findClass方法,然后在这个方法里面读取class文件为byte[]数组,传入defineClass方法,defineClass方法返回我们加载的类。这样便实现了我们自己的简单的类加载器。下面是一个简单的自定义类加载器的findClass方法:[java]view plaincopyprin. 阅读全文
posted @ 2012-12-02 17:15 刺猬的温驯 阅读(753) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996在前面的大部分文章都是讲连接器和容器的,以后的内容会偏向写一些Tomcat的其他组件以及一些细节的东西。 Tomcat有很多组件,要一个一个启动组件难免有点麻烦。由于Tomcat的包含关系是Catalina->Server->Service->容器/连接器/日志器等,于是可通过父组件负责启动/关闭它的子组件,这样只要启动Catalina,其他的都自动启动了。这种单一启动和关闭的机制是通过实现Lifecycle接口来实现的。下面是Lifecycle接口 阅读全文
posted @ 2012-12-02 17:13 刺猬的温驯 阅读(295) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996日志记录器挺简单的,没有很多东西,最主要的就是一个Logger接口: [java]view plaincopyprint?publicinterfaceLogger{publicstaticfinalintFATAL=Integer.MIN_VALUE;publicstaticfinalintERROR=1;publicstaticfinalintWARNING=2;publicstaticfinalintINFORMATION=3;publicstaticfin.. 阅读全文
posted @ 2012-12-02 17:11 刺猬的温驯 阅读(323) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996目标:在这篇文章希望搞明白connector.getContainer().invoke(request,response);调用容器的invoke后是怎么传递到 servlet或者jsp的? 由上篇文章Tomcat源码分析(三)--连接器是如何与容器关联的?可知,connector.getContainer()得到的容器应该是StandardEngine(其实应该是由server.xml文件配置得到的,这里先假定是StandardEngine),StandardEn 阅读全文
posted @ 2012-12-02 17:10 刺猬的温驯 阅读(250) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996本文所要解决的问题:一个http请求过来,容器是怎么知道选择哪个具体servlet? 我们知道,一个Context容器表示一个web应用,一个Wrapper容器表示一个servlet,所以上面的问题可以转换为怎么由Context容器选择servlet,答案是映射器。映射器是实现了Mapper接口的类,作用就是根据请求连接(主要是协议和路径)来选择下一个容器,可以看做是一个哈希表,根据关键字段来选择具体的值,Mapper接口的定义为:[java]view plainco 阅读全文
posted @ 2012-12-02 17:10 刺猬的温驯 阅读(230) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996这篇文章要弄懂一个问题,我们知道,一个链接器是跟一个容器关联的,容器跟链接器是在什么时候关联上的? 在明白这个问题前要先了解一下Digester库,这个库简单的说就是解析xml文件,这里有两个概念:模式和规则,所谓模式就是一个xml的标签,规则就是遇到一个xml标签需要做什么,看一下他主要的三个方法: 1:addObjectCreate(String pattern, String className, String attributeName) 根据模式pa... 阅读全文
posted @ 2012-12-02 17:08 刺猬的温驯 阅读(247) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996目标:在这篇文章希望搞明白http请求到tomcat后是怎么由连接器转交到容器的? 在上一节里已经启动了一个HttpConnector线程,并且也启动了固定数量的HttpProcessor线程。HttpConnector用来等待http连接,得到http连接后交给其中的一个HttpProcessor线程来处理。接下里具体看一下HttpConnector是怎么得到连接得,以及HttpProcessor是怎么处理的。当启动了HttpConnector线程后(在上一节已.. 阅读全文
posted @ 2012-12-02 17:05 刺猬的温驯 阅读(268) 评论(0) 推荐(0) 编辑

摘要: 转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1283376.htmlSpring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务。Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义。后者更加实用,只需指定要运行的类,和该类中要运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。在上一篇文章《Quartz框架快速入门(三)》中我们将示例迁移到W 阅读全文
posted @ 2012-12-02 16:51 刺猬的温驯 阅读(312) 评论(0) 推荐(0) 编辑

摘要: 转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1283103.html在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Scheduler,其步骤如下:首先创建一个Web项目,将quartz-1.6.0.jar,以及lib目录下面core下所有jar,optional目录下的所有commons-beanutils.jar和commons-digester-1.7.jar,build目录下的jta.ja 阅读全文
posted @ 2012-12-02 16:50 刺猬的温驯 阅读(275) 评论(0) 推荐(0) 编辑

摘要: 转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1282982.html 尽可能的用声明式处理软件配置,其次才考虑编程式的方式。在上一篇《Quartz框架快速入门(一)》中,如果我们要在Job启动之后改变它的执行时间和频度,必须去修改源代码重新编译。这种方式只适用于小的例子程序,但是对于一个大且复杂的系统,这就成了一个问题了。因此,假如能以声明式部署Quart Job时,并且也是需求允许的情况下,你应该每次都选择这种方式·配置quartz.properties文件文件quartz.properties定义了Quartz应用运行 阅读全文
posted @ 2012-12-02 16:48 刺猬的温驯 阅读(367) 评论(0) 推荐(0) 编辑

摘要: 转载http://www.cnblogs.com/phinecos/archive/2008/09/03/1282747.html 创建一个Java工程,引入几个JAR到工程中才能成功构建它们。首先,你需要Quartz的二进制版本,包的名字是quartz-<version>.jar。Quartz还需要几个第三方库;这依赖于你要用到框架的什么功能而定,Commons Digester库可以在<QUARTZ_HOME>/lib/core和<QUARTZ_HOME>/lib/optional目录中找到。如果出现java.lang.NoClassDefFoundEr 阅读全文
posted @ 2012-12-02 16:38 刺猬的温驯 阅读(326) 评论(0) 推荐(0) 编辑

摘要: 摘自:http://www.blogjava.net/Jay2009/archive/2009/03/25/259176.htmlSpring为创建Quartz的Scheduler、Trigger和JobDetail提供了便利的FactoryBean类,以便能够在Spring 容器中享受注入的好处。此外Spring还提供了一些便利工具类直接将Spring中的Bean包装成合法的任务。Spring进一步降低了使用Quartz的难度,能以更具Spring风格的方式使用Quartz。概括来说它提供了两方面的支持:1)为Quartz的重要组件类提供更具Bean风格的扩展类;2)提供创建Schedule 阅读全文
posted @ 2012-12-02 16:36 刺猬的温驯 阅读(784) 评论(0) 推荐(0) 编辑

摘要: 在开发时我们会常常遇到定时任务可以由客户进行管理在什么时候去执行或者甚至不再执行该定时任务。而Spring中所提供的定时任务组件却只能够通过修改trigger的配置才能够控制定时的时间以及是否启用定时任务,为此我搜索了网上的一些解决方法,发现还是不能够很好的解决这个问题。所以干脆仔仔细细的研究了一把Quartz和Spring中相关的源码,我们发现当我们在Spring通过如下声明定时任务时:Java代码<beanid="yourJobDetail"class="org.springframework.scheduling.quartz.MethodInvoki 阅读全文
posted @ 2012-12-02 16:33 刺猬的温驯 阅读(8874) 评论(0) 推荐(1) 编辑

摘要: Quartz 是一个强大的企业级 Schedule 工具,也是目前最好的开源 Schedule 工具。Spring中也集成了quartz的应用,下面就讲一下如何在spring中使用quartz。spring的配置:xml 代码<beanid="schedulerFactoryBean"class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><propertyname="triggers"><list><refbean 阅读全文
posted @ 2012-12-02 16:31 刺猬的温驯 阅读(457) 评论(0) 推荐(0) 编辑

摘要: http://code.google.com/p/google-enterprise-connector-manager/http://code.google.com/p/googlesearchapplianceconnectors/Connector developper guidehttps:... 阅读全文
posted @ 2012-12-02 15:55 刺猬的温驯 阅读(690) 评论(0) 推荐(0) 编辑

摘要: 本系列转载自http://blog.csdn.net/haitao111313/article/category/1179996对Tomcat感兴趣是由于《深入理解Tomcat》这本书,之前仅仅是使用到了Tomcat,这本书却让我对Tomcat的实现理解的更加透彻了,在这里希望记录一些自己对Tomcat的理解。由于这本书是基于tomcat4的,所以我的文章也是基于tomcat4的,但是tomcat的核心思想应该是没有变的,最主要的两个组件还是连接器和容器。主要为了学习,就不管是新版本还是旧版本了。 为了后面的理解,先大致说一下Tomcat的整体架构,Tomcat主要有两个组件,连接器和容器.. 阅读全文
posted @ 2012-12-02 12:07 刺猬的温驯 阅读(323) 评论(0) 推荐(0) 编辑