`
cfan_haifeng
  • 浏览: 122112 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

java类加载器-tomcat中的类加载器

    博客分类:
  • jvm
 
阅读更多

      过去一直不理解,为什么java为什么搞那么多类加载器,还为什么允许自定义类加载器,总是感觉很多余。今天重读《深入体验Java_Web开发内幕-核心基础》时,明白了,两字“安全”!!!。先看看“类加载器的示意图”,据说是tomcat4.x,但这不影响我们。

 

 

 

 

现在这中情况下:

1.应用webaap1被加载到webaapLoader1中,应用webaap2被加载到webaapLoader2中,由于webaap1中的类和webaap2中的类没有加载到一个类加载器中,所以他们之间无法互相反问。不用担心webaap1个调用webaap2中的对象,从而……。(要是我直接在webaap1中写代码覆盖原来webaap2中的class对象呢,呵呵)

2.ShareLoader中加载的类是可以让所有webapp使用的,这到可以减少多余的lib。

 

另外,关于tomcat类加载器的结构,我们同时可以通过代码去理解,servlet代码如下:

 

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=GB2312"); 
		PrintWriter out = response.getWriter();
		 
		out.println("<html>");
		out.println("<font size=30 color=red>测试喽</font><br>");
		out.println("<marquee>" + new java.util.Date() + "</marquee>");
		ClassLoader currLoader=this.getClass().getClassLoader();
		out.println("加载当前类"+this.getClass().getName()+"的类加载器:<b>"+currLoader.getClass().getName()+"</b>");
		out.println("<br/>");
		
		while(null!=currLoader.getParent()){
			ClassLoader parentLoader=currLoader.getParent();
			out.println(" 类加载器:"+currLoader.getClass().getName()+"的父加载器为:<b>"+parentLoader.getClass().getName()+"</b>");
			out.println("<br/>");
			currLoader=parentLoader;
		}
		
		out.println("</html>");
	}
}
 

 

tomcat-6.0.29下的运行生成效果:

 

 

      由此次可见,“类加载器的示意图”基本是正确的。但貌似少了CommonLoader,在“类加载器的示意图”这可是个分支节点啊。

 

 

 

tomcat-5.5.26下的运行生成效果:

 

  奇怪,关于“org.apache.catalina.loader.StandardClassLoader”出现两次的情况,很迷茫

****

  • 大小: 29.6 KB
  • 大小: 7.6 KB
  • 大小: 9.2 KB
分享到:
评论

相关推荐

    tomcat类加载器

    类加载器在Tomcat中扮演着至关重要的角色,因为它们负责加载并管理运行时所需的Java类。这个"DevLoader.zip"文件可能包含与Tomcat自定义类加载器相关的资料,特别是名为"DevLoader"的类加载器,这可能是Tomcat为...

    spring-instrument-tomcat源码

    具体来说,它创建了一个名为`SpringContextClassLoader`的自定义类加载器,该加载器继承自Tomcat的标准类加载器,并实现了`LoadTimeWeaver`接口,从而使得在Tomcat中运行的Spring应用可以利用这个特性。 当我们解压...

    taobao-tomcat-7.0.59

    Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序,包括JSP和Servlet。阿里巴巴作为中国最大的电商平台,对基础软件如Tomcat的定制优化,是为了满足其大规模并发、高可用性和性能的需求。 【描述...

    最新版windows apache-tomcat-10.0.0-windows-x64.zip

    这可能包括对Java EE 9的支持,因为Java EE已经被更名为Jakarta EE,并且在Tomcat 10中,API包名也进行了调整,以遵循新的Jakarta EE规范。 3. **Servlet和JSP支持**: - Tomcat的核心功能之一就是作为Servlet容器...

    apache-tomcat-6.0.29.zip

    Tomcat作为Servlet容器,它会加载Servlet类,处理HTTP请求,并将结果返回给客户端。 2. **JavaServer Pages (JSP)**:JSP是Java Servlet的一种简化形式,允许开发人员将静态HTML与动态Java代码结合在一起,使网页...

    Java 类在 Tomcat 中是如何加载的(过程分析)

    JVM中的类加载器包括Bootstrap类加载器、Extension类加载器和Application类加载器。 2. **JVM的类加载策略** JVM采用**父类委托机制**来加载类,这意味着当一个类加载器接收到加载请求时,它首先会委托给其父类...

    apache-tomcat-8.0.30 linux 64位

    然后,你需要编辑`bin/catalina.sh`文件,添加或修改以下两行,确保Tomcat能找到Java解释器: ```bash CATALINA_HOME="/opt/tomcat" # 替换为你的Tomcat安装目录 CATALINA_BASE="$CATALINA_HOME" ``` 配置完成后,...

    apache-tomcat-10.0.12.tar.gz

    Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlets和JavaServer Pages(JSP)。在本案例中,我们讨论的是其版本10.0.12,它被打包成一个`.tar.gz`文件,这种格式是Linux系统中常见的归档和压缩...

    apache-tomcat-7.0.57-src

    - Tomcat使用自定义的类加载器,包括Catalina类加载器、Shared类加载器和Web应用类加载器,实现不同级别的隔离和加载策略。 5. **连接器(Connector)和容器(Container)**: - 连接器负责接收和发送HTTP请求,...

    apache-tomcat-8.5.81.tar.gz

    Tomcat作为Servlet容器,负责加载、实例化和管理Servlet,使得开发者可以用Java编写服务器端逻辑。 2. **JSP (JavaServer Pages)**: JSP是Java Servlet的一种简化方式,允许开发者将HTML代码与Java代码混合,使页面...

    apache-tomcat-8.5.45-windows-x64.zip

    5. **Common, Server, and Shared Libraries**: 这些库包含了一系列可供所有Tomcat组件使用的Java类。Common库对所有组件可见,Server库只对服务器端组件可见,而Shared库可以被Web应用程序和服务器组件共同使用。 ...

    类加载器与Tomcat

    在Java的运行环境中,类加载器扮演着至关重要的角色,它负责加载运行时所需的类文件。在Tomcat这样的应用服务器中,类加载器的组织结构和工作原理更是复杂且关键。Tomcat的类加载器设计遵循了Java的双亲委派模型,但...

    apache-tomcat-9.0.52-linux.zip

    Apache Tomcat是一款开源的Java Servlet...总之,Apache Tomcat是一个强大的、轻量级的Java Web应用服务器,广泛应用于各种规模的企业和项目中。理解和掌握如何配置、管理及优化Tomcat对于Java Web开发者来说至关重要。

    apache-tomcat-7.0.59-x64.rar

    Apache Tomcat是一个开源的软件应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本文中,我们将深入探讨与"apache-tomcat-7.0.59-x64.rar"相关的知识,包括Tomcat的版本、体系结构...

    apache-tomcat-7.0.81-src 源码免费下载

    8. **类加载器**:Tomcat有自己独特的类加载机制,以解决不同应用之间的类冲突。源码中的`classloader`目录揭示了这一机制。 9. **错误处理与日志系统**:Tomcat使用自定义的日志框架,源码中`logging`目录下的类...

    apache-tomcat-5.5.26+apache-tomcat-5.5.26-admin.zip

    在Tomcat 5.5.26中,这可能包括Web管理界面,允许用户通过浏览器进行各种操作,如启动、停止和重新加载应用,查看服务器状态,管理用户角色和权限,以及部署新的Web应用。这个模块对于系统管理员来说非常有用,因为...

    apache-tomcat-8.5.73

    总体来说,Apache Tomcat 8.5.73是一个强大且可靠的Web服务器,适用于开发和部署Java Web应用,无论是在小型项目还是大型企业环境中。其开源特性、丰富的功能集和庞大的社区支持使其成为许多开发者的首选。

    apache-tomcat-7.0.39

    - `endorsed`:用于存放官方API的JAR文件,优先级高于系统类加载器。 总结来说,Apache Tomcat 7.0.39是Java Web开发的重要组成部分,尤其在Eclipse这样的开发环境中,它提供了便捷的开发、测试和部署环境。理解其...

    apache-tomcat-8.0.47-windows-x64.zip 【Tomcat服务器,Tomcat8 windows 64位版】

    2. **Jasper**:Tomcat的Jasper组件负责编译JSP文件为Servlet类,使它们能够在Java虚拟机(JVM)上运行。 3. **Connector**:也称为Protocol Handler,负责接收和发送网络请求。Tomcat支持多种连接器,如HTTP/1.1、...

Global site tag (gtag.js) - Google Analytics