仅仅是对tomcat的测试结果,其它容器不得而知
package相同的class是先加载/web-inf/class下的呢,还是调用web-inf/lib下的jar包呢
做以下测试
package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson");
}
}
package info.frady;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo");
Person.PrintPerson();
}
}
package test;
import info.frady.Ptest;
public class PacakgeTest {
public static void main(String[] args) {
Ptest.PrintInfo();
}
}
以上代码的运行结果是
Ptest.PrintInfo
PrintPerson
将以上的代码打包成jar,放到/web-inf/lib目录下
然后修改代码为
package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson2");
}
}
package info.frady;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo2");
Person.PrintPerson();
}
}
package info.frady;
public class Person {
public static void PrintPerson(){
System.out.println("PrintPerson2");
}
}
package test;
import info.frady.Ptest;
public class PacakgeTest {
public static void main(String[] args) {
Ptest.PrintInfo();
}
}
以上代码的运行结果是
Ptest.PrintInfo2
PrintPerson2
最后一次,修改
package info.frady.m;
import info.frady.Person;
public class Ptest {
public static void PrintInfo(){
System.out.println("Ptest.PrintInfo2");
Person.PrintPerson();
}
}
运行PacakgeTest,结果是什么?
Ptest.PrintInfo
PrintPerson2
以上测试,结果证明,class里面的代码一定会被优先找到,即使是lib里jar包的代码要调用相同package的代码,只要class里重写了,那么就会执行class里的
以上顺序,方便了我们对一些现有lib包的重写,只要重新对应的class,程序就会自动加载自写的代码,而不使用lib包下的代码。
分享到:
相关推荐
在Tomcat启动过程中,类的加载顺序是非常重要的一个环节,因为这直接影响到Web应用的正常运行以及类库冲突等问题。 #### 二、类加载机制概述 在Java中,类加载器(ClassLoader)负责将.class文件加载到JVM中。Tomcat...
当Tomcat加载类时,它遵循以下顺序: - 使用Bootstrap类加载器尝试加载。 - 使用System类加载器尝试加载。 - 使用Webapp类加载器加载`WEB-INF/classes`下的类。 - 使用Webapp类加载器加载`WEB-INF/lib`中的jar...
类加载器遵循双亲委派模型,这意味着当一个类加载器尝试加载类时,它首先会将请求委托给其父类加载器,直到到达顶层的Bootstrap ClassLoader,如果父类加载器无法找到该类,子类加载器才会尝试自己加载。 在Tomcat...
Tomcat的启动顺序涉及到多个层次的加载,从Bootstrap类开始,逐步加载系统配置、公共库、共享库以及Web应用程序。 【详细知识点】: 1. Bootstrap类: Tomcat的启动始于Bootstrap类,这是Tomcat服务器的主入口点...
Tomcat的类加载器遵循特定的加载顺序,确保了不同应用间的隔离性和资源的正确加载。下面将详细解析Tomcat的类加载过程及其顺序。 #### 1. Bootstrap ClassLoader 这是JVM自带的类加载器,用于加载核心的类库,如`...
类加载遵循“双亲委托模型”,即当一个类加载器收到加载类的请求时,它会首先委托父类加载器尝试加载,只有当父类加载器无法找到对应的类时,才会自己尝试加载。这样保证了基础类库的一致性,同时也允许Web应用覆盖...
在Java Web开发中,Tomcat是一个广泛使用的应用服务器,它负责加载并运行Web应用程序。Tomcat8相较于之前的版本,确实对JAR包的加载顺序进行了调整,这在某些情况下可能会导致开发者遇到意料之外的问题。本文将深入...
在J2EE开发环境中,尤其是使用Tomcat作为应用服务器时,开发者经常遇到的一个困扰就是每次修改Java类或Servlet后,必须重新部署整个应用才能让改动生效。这无疑增加了开发过程中的时间和精力消耗。然而,通过调整...
Java 类的热重载(Hot Deployment)或热替换(Hot Swap)是开发过程中非常实用的功能,它允许开发者在不重启应用程序服务器(如Tomcat)的情况下更新已部署的类,从而提高开发效率。在这个例子中,我们将探讨如何在...
当应用在支持Servlet 3.0 的容器(如Tomcat 7及以上版本)中运行时,容器会自动寻找实现了 SC 接口的类。Spring 提供了名为 SpringServletContainerInitializer (SSCI) 的实现,它进一步查找并使用实现了 ...
5. "tomcat加载类的顺序.doc":详细说明了Tomcat加载类的具体步骤和顺序,这对于理解和调试类加载问题至关重要。 6. "Tomcat源码研究.pdf":提供了一个全面的源码分析概览,可能包括了Tomcat的主要组件、设计模式...
在Tomcat中部署JAVA应用,主要涉及到WAR文件的放置或Context配置。WAR文件通常放在`webapps`目录下,Tomcat会自动解压并启动应用。而自定义Context配置允许更精细的控制,如指定应用的根目录、加载顺序等。 4. **...
Context配置包含了应用的路径、加载顺序、session配置等。 6. **日志与错误处理**:Tomcat的日志配置在`conf/logging.properties`中,可以调整日志级别和输出位置。`conf/server.xml`中的`<Valve>`元素可以用来定制...
在Java世界中,类加载器(ClassLoader)是Java运行时环境的重要组成部分,它负责加载类的字节码到JVM中。Tomcat作为一款广泛使用的Java应用服务器,其类加载机制有着独特的设计,特别是对Java的双亲委派模型有所突破...
例如,设置工作目录、指定加载顺序等。 ```xml ``` 5. **配置Tomcat的虚拟主机**:通过`<Host>`元素配置虚拟主机,使得不同的域名指向不同的Web应用。例如,在`server.xml`中添加如下配置: ```xml ``` ...
学习者应该关注Java的核心API,掌握类和对象的概念、数据类型、控制结构、异常处理等基础知识。 ### 第二阶段:图形用户界面(GUI)开发 接下来,学习者应转向GUI开发,了解如何使用AWT(Abstract Window Toolkit...
此外,通过实现javax.servlet.Servlet接口,我们可以定义一个简单的Servlet,由Tomcat负责加载和执行。 五、结论 通过本文的分析,我们不仅深入了解了Tomcat的工作原理,还学习了其各个组件的作用和相互关系。...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Tomcat这样的Servlet容器中运行,提供了强大的控制层来处理HTTP请求和响应。理解Struts2在Tomcat中的加载过程有助于我们更好地进行...
在这个顺序中,context-param 元素将被首先加载,然后是 listener 元素,接着是 filter 元素,最后是 servlet 元素。 结论 web.xml 文件是 Tomcat 中 Web 应用的核心配置文件。通过对 web.xml 文件的配置,开发者...
3.2 配置Context:通过修改Tomcat的server.xml或使用Context元素在webapps目录外定义应用,可以自定义应用的初始化参数、加载顺序等。 3.3 负载均衡与集群:Tomcat支持通过mod_jk、mod_proxy等Apache模块实现负载...