过去一直不理解,为什么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中扮演着至关重要的角色,因为它们负责加载并管理运行时所需的Java类。这个"DevLoader.zip"文件可能包含与Tomcat自定义类加载器相关的资料,特别是名为"DevLoader"的类加载器,这可能是Tomcat为...
具体来说,它创建了一个名为`SpringContextClassLoader`的自定义类加载器,该加载器继承自Tomcat的标准类加载器,并实现了`LoadTimeWeaver`接口,从而使得在Tomcat中运行的Spring应用可以利用这个特性。 当我们解压...
Tomcat是一款开源的Java Servlet容器,主要用于运行Java Web应用程序,包括JSP和Servlet。阿里巴巴作为中国最大的电商平台,对基础软件如Tomcat的定制优化,是为了满足其大规模并发、高可用性和性能的需求。 【描述...
这可能包括对Java EE 9的支持,因为Java EE已经被更名为Jakarta EE,并且在Tomcat 10中,API包名也进行了调整,以遵循新的Jakarta EE规范。 3. **Servlet和JSP支持**: - Tomcat的核心功能之一就是作为Servlet容器...
Tomcat作为Servlet容器,它会加载Servlet类,处理HTTP请求,并将结果返回给客户端。 2. **JavaServer Pages (JSP)**:JSP是Java Servlet的一种简化形式,允许开发人员将静态HTML与动态Java代码结合在一起,使网页...
JVM中的类加载器包括Bootstrap类加载器、Extension类加载器和Application类加载器。 2. **JVM的类加载策略** JVM采用**父类委托机制**来加载类,这意味着当一个类加载器接收到加载请求时,它首先会委托给其父类...
Tomcat支持EL,使得开发者能够轻松地在JSP页面中嵌入Java代码片段。 4. **JSTL(JavaServer Pages Standard Tag Library)支持**:JSTL是一套用于JSP的标签库,提供了一种标准化的方法来处理常见的Web开发任务,如...
然后,你需要编辑`bin/catalina.sh`文件,添加或修改以下两行,确保Tomcat能找到Java解释器: ```bash CATALINA_HOME="/opt/tomcat" # 替换为你的Tomcat安装目录 CATALINA_BASE="$CATALINA_HOME" ``` 配置完成后,...
Apache Tomcat是一个开源的软件应用服务器,主要用于运行Java Servlets和JavaServer Pages(JSP)。在本案例中,我们讨论的是其版本10.0.12,它被打包成一个`.tar.gz`文件,这种格式是Linux系统中常见的归档和压缩...
- Tomcat使用自定义的类加载器,包括Catalina类加载器、Shared类加载器和Web应用类加载器,实现不同级别的隔离和加载策略。 5. **连接器(Connector)和容器(Container)**: - 连接器负责接收和发送HTTP请求,...
Tomcat作为Servlet容器,负责加载、实例化和管理Servlet,使得开发者可以用Java编写服务器端逻辑。 2. **JSP (JavaServer Pages)**: JSP是Java Servlet的一种简化方式,允许开发者将HTML代码与Java代码混合,使页面...
5. **Common, Server, and Shared Libraries**: 这些库包含了一系列可供所有Tomcat组件使用的Java类。Common库对所有组件可见,Server库只对服务器端组件可见,而Shared库可以被Web应用程序和服务器组件共同使用。 ...
在Java的运行环境中,类加载器扮演着至关重要的角色,它负责加载运行时所需的类文件。在Tomcat这样的应用服务器中,类加载器的组织结构和工作原理更是复杂且关键。Tomcat的类加载器设计遵循了Java的双亲委派模型,但...
Apache Tomcat是一款开源的Java Servlet...总之,Apache Tomcat是一个强大的、轻量级的Java Web应用服务器,广泛应用于各种规模的企业和项目中。理解和掌握如何配置、管理及优化Tomcat对于Java Web开发者来说至关重要。
Apache Tomcat是一个开源的软件应用服务器,主要用于部署和运行Java Servlet和JavaServer Pages(JSP)应用程序。在本文中,我们将深入探讨与"apache-tomcat-7.0.59-x64.rar"相关的知识,包括Tomcat的版本、体系结构...
8. **endorsed目录**:这个目录用于放置那些需要覆盖Java标准库中的类的JAR文件,按照Java API的设计,这是通过在`endorsed`目录下的类优先级高于系统类加载器加载的类。 对于64位Windows用户,这个版本的Tomcat是...
总体来说,Apache Tomcat 8.5.73是一个强大且可靠的Web服务器,适用于开发和部署Java Web应用,无论是在小型项目还是大型企业环境中。其开源特性、丰富的功能集和庞大的社区支持使其成为许多开发者的首选。
8. **类加载器**:Tomcat有自己独特的类加载机制,以解决不同应用之间的类冲突。源码中的`classloader`目录揭示了这一机制。 9. **错误处理与日志系统**:Tomcat使用自定义的日志框架,源码中`logging`目录下的类...
在Tomcat 5.5.26中,这可能包括Web管理界面,允许用户通过浏览器进行各种操作,如启动、停止和重新加载应用,查看服务器状态,管理用户角色和权限,以及部署新的Web应用。这个模块对于系统管理员来说非常有用,因为...