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

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

随笔分类 -  JVM&tomcat&jetty

上一页 1 2 3 4 下一页

摘要:本系列转载自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 刺猬的温驯 阅读(280) 评论(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 刺猬的温驯 阅读(529) 评论(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 刺猬的温驯 阅读(765) 评论(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 刺猬的温驯 阅读(305) 评论(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 刺猬的温驯 阅读(336) 评论(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 刺猬的温驯 阅读(262) 评论(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 刺猬的温驯 阅读(243) 评论(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 刺猬的温驯 阅读(261) 评论(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 刺猬的温驯 阅读(284) 评论(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 刺猬的温驯 阅读(335) 评论(0) 推荐(0)

摘要:运行tomcat很奇怪的问题在本机上运行正常,移植到服务器上出现异常The CATALINA_HOME environment variable is not defined correctly我部署的服务器是win2003 64bit操作系统 ,本机是win2003 32bit操作系统在本机catalina.bat文件设置setJAVA_OPTS=-Xms512m-Xmx640msetJAVA_OPTS=%JAVA_OPTS%-server-XX:PermSize=512M-XX:MaxPermSize=1024m在服务器上 将上面两行rem注释掉,并添加下面一行后,运行正常remsetJA 阅读全文
posted @ 2012-09-21 14:54 刺猬的温驯 阅读(4521) 评论(0) 推荐(0)

摘要:在tomcat源代码中,有这样一个实用类:org.apache.catalina.util.StringManager,基本上每个tomcat组件(如:connector, container, realm, loader, logger等)都会用到它。这是一个管理异常消息的helper class。像tomcat这样的Servlet容器,异常消息无论是对系统管理员或者程序员都非常重要。管理员可以通过异常消息,快速定位错误。而对于程序异常,tomcat将异常消息封装到ServletException,来告知程序员Servlet中的错误。Tomcat如何管理这些异常消息呢?第一个要排除的是硬编码 阅读全文
posted @ 2012-09-05 00:15 刺猬的温驯 阅读(1303) 评论(0) 推荐(0)

摘要:本文主要结合观察者模式,讲述Tomcat的生命周期管理。Tomcat的生命周期管理机制设计的非常优雅,在Tomcat启动时,只需要启动一个Server组件,就会启动所有的容器及对应的组件,并且触发这些容器的监听者,完成启动过程的设置。可以说是“一键式”启动的。停止过程也是一样。本文首先简单介绍Tomcat中容器,组件及监听类的功能。因为Tomcat的生命周期管理应用了观察者模式,所以接下来会分析观察者模式,最后结合观察者模式及Tomcat源代码,详细说明Tomcat的生命周期管理。一、几种基本的容器,组件及事件监听类(Listener)1.Tomcat中有四种不同的容器:Engine:代表整个 阅读全文
posted @ 2012-09-05 00:14 刺猬的温驯 阅读(4432) 评论(0) 推荐(0)

摘要:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述:对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。对于Java程序员来说,不需要在为每一个new操作去写配对的delete/free,不容易出现内容泄漏和内存溢出错误,看起来由JVM管理内存一切都很美好。不过,也正是因为Java程序员把内存控制的权力交给了JVM,一旦出现泄漏和溢出,如果不了解JVM是怎样使用内存的,那排查错误将会是一件非常困难的事 阅读全文
posted @ 2012-06-21 09:10 刺猬的温驯 阅读(264) 评论(0) 推荐(0)

摘要:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项技术当做Java语言的伴生产物。事实上GC的历史远远比Java来得久远,在1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期,人们就在思考GC需要完成的3件事情:哪些内存需要回收?什么时候回收?怎么样回收? 经过半个世纪的发展,目前的内存分配策略与垃圾回收技术已经相当成熟,一切看起来都进入“自动化”的时代,那为什么我们还要去了解GC和内存分配.. 阅读全文
posted @ 2012-06-21 09:09 刺猬的温驯 阅读(203) 评论(0) 推荐(0)

摘要:1 Java技术与Java虚拟机说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成: Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:图1 Java四个方面的关系运行期环境代表着Java... 阅读全文
posted @ 2012-06-21 09:06 刺猬的温驯 阅读(351) 评论(0) 推荐(0)

摘要:下面是使用JXM协议配置的简单的操作步骤,详细内容可以阅读文章后的参考资料。1.远程主机(1)修改JMX服务的配置文件: 在JDK的根目录/jre/lib/management中,将jmxremote.password.template另存为jmxremote.password。用文件编辑软件按编辑jmxremote.password去掉 # monitorRole QED # controlRole R&D 前面的#注释,保存。 如果当前系统属于AIX、Linux或者Solaris系统还需要更改jmxremote.access和jmxremote.password的权限为只读写,命. 阅读全文
posted @ 2012-06-21 08:53 刺猬的温驯 阅读(7629) 评论(0) 推荐(0)

摘要:Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况: 1.OutOfMemoryError: Java heap space 2.OutOfMemoryError: PermGen space 3.OutOfMemoryError: unable to create new native thread. Tomcat内存溢出解决方案 对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx 阅读全文
posted @ 2012-04-18 04:07 刺猬的温驯 阅读(391) 评论(0) 推荐(0)

摘要:最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle的时候,tomcat就连续抛java.lang.OutOfMemoryError的错误,上网google了一下,了解了一下tomcat的运行机制,也解决了问题,share出来,以备查。 1、首先是:java.lang.OutOfMemoryError: Java heap space 解释: Heap size 设置 JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM 阅读全文
posted @ 2012-04-18 04:04 刺猬的温驯 阅读(234) 评论(0) 推荐(0)

摘要:Eclipse崩溃,错误提示:MyEclipse has detected that less than 5% of the 64MB of PermGen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase this memory. Failure to do so can result indata loss. The recommended Ecl 阅读全文
posted @ 2012-04-18 03:27 刺猬的温驯 阅读(300) 评论(0) 推荐(0)

上一页 1 2 3 4 下一页