how2j.cn

下载区
文件名 文件大小
请先登录 602b
增值内容 602b
602b
请先登录 1k
增值内容 1k
1k
请先登录 10m
增值内容 10m
10m

32分22秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器

步骤 1 : 拓扑图点亮   
步骤 2 : 为什么要讲类加载器   
步骤 3 : 什么是类对象   
步骤 4 : 什么是类加载器   
步骤 5 : 类加载器分类   
步骤 6 : 举例说明   
步骤 7 : 自定义类准备工作   
步骤 8 : 自定义类加载器   
步骤 9 : URLClassLoader 准备工作   
步骤 10 : URLClassLoader   
步骤 11 : 类的唯一性   
步骤 12 : 双亲委派机制   
步骤 13 : 双亲委派机制的意义   
步骤 14 : 双亲委派机制里的”双“ 是什么意思   
步骤 15 : 比较可运行项目,快速定位问题   

增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
拓扑图点亮
步骤 2 :

为什么要讲类加载器

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
步骤 3 :

什么是类对象

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package cn.how2j.diytomcat.test; public class TestClassLoader { public static void main(String[] args) { Object o = new Object(); System.out.println(o); Class<?> clazz = o.getClass(); System.out.println(clazz); } }
package cn.how2j.diytomcat.test;
 
public class TestClassLoader {
 
    public static void main(String[] args) {
        Object o = new Object();
         
        System.out.println(o);
         
        Class<?> clazz = o.getClass();
         
        System.out.println(clazz);
         
    }
}
步骤 4 :

什么是类加载器

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
步骤 5 :

类加载器分类

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
类加载器分类
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
举例说明
package cn.how2j.diytomcat.test; public class TestClassLoader { public static void main(String[] args) { System.out.println(Object.class.getClassLoader()); System.out.println(TestClassLoader.class.getClassLoader()); } }
package cn.how2j.diytomcat.test;

public class TestClassLoader {

	public static void main(String[] args) {

		System.out.println(Object.class.getClassLoader());
		
		System.out.println(TestClassLoader.class.getClassLoader());
		
	}
}
步骤 7 :

自定义类准备工作

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
自定义类准备工作
步骤 8 :

自定义类加载器

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
自定义类加载器
package cn.how2j.diytomcat.test; import java.io.File; import java.lang.reflect.Method; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; public class CustomizedClassLoader extends ClassLoader { private File classesFolder = new File(System.getProperty("user.dir"),"classes_4_test"); protected Class<?> findClass(String QualifiedName) throws ClassNotFoundException { byte[] data = loadClassData(QualifiedName); return defineClass(QualifiedName, data, 0, data.length); } private byte[] loadClassData(String fullQualifiedName) throws ClassNotFoundException { String fileName = StrUtil.replace(fullQualifiedName, ".", "/") + ".class"; File classFile = new File(classesFolder, fileName); if(!classFile.exists()) throw new ClassNotFoundException(fullQualifiedName); return FileUtil.readBytes(classFile); } public static void main(String[] args) throws Exception { CustomizedClassLoader loader = new CustomizedClassLoader(); Class<?> how2jClass = loader.loadClass("cn.how2j.diytomcat.test.HOW2J"); Object o = how2jClass.newInstance(); Method m = how2jClass.getMethod("hello"); m.invoke(o); System.out.println(how2jClass.getClassLoader()); } }
步骤 9 :

URLClassLoader 准备工作

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
URLClassLoader 准备工作
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
URLClassLoader
package cn.how2j.diytomcat.test; import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; public class CustomizedURLClassLoader extends URLClassLoader { public CustomizedURLClassLoader(URL[] urls) { super(urls); } public static void main(String[] args) throws Exception { URL url = new URL("file:d:/project/diytomcat/jar_4_test/test.jar"); URL[] urls = new URL[] {url}; CustomizedURLClassLoader loader = new CustomizedURLClassLoader(urls); Class<?> how2jClass = loader.loadClass("cn.how2j.diytomcat.test.HOW2J"); Object o = how2jClass.newInstance(); Method m = how2jClass.getMethod("hello"); m.invoke(o); System.out.println(how2jClass.getClassLoader()); } }
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
package cn.how2j.diytomcat.test; import java.net.URL; import java.net.URLClassLoader; public class CustomizedURLClassLoader extends URLClassLoader { public CustomizedURLClassLoader(URL[] urls) { super(urls); } public static void main(String[] args) throws Exception { URL url = new URL("file:d:/project/diytomcat/jar_4_test/test.jar"); URL[] urls = new URL[] {url}; CustomizedURLClassLoader loader1 = new CustomizedURLClassLoader(urls); Class<?> how2jClass1 = loader1.loadClass("cn.how2j.diytomcat.test.HOW2J"); CustomizedURLClassLoader loader2 = new CustomizedURLClassLoader(urls); Class<?> how2jClass2 = loader2.loadClass("cn.how2j.diytomcat.test.HOW2J"); System.out.println(how2jClass1==how2jClass2); } }
步骤 12 :

双亲委派机制

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
双亲委派机制
package cn.how2j.diytomcat.test; public class HOW2J { public void hello() { System.out.println("hello, this is how2j saying \"Hello!\""); } }
package cn.how2j.diytomcat.test;
 
public class HOW2J {
    public void hello() {
        System.out.println("hello, this is how2j saying \"Hello!\"");
    }
}
步骤 13 :

双亲委派机制的意义

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
步骤 14 :

双亲委派机制里的”双“ 是什么意思

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢
双亲委派机制里的”双“ 是什么意思
步骤 15 :

比较可运行项目,快速定位问题

edit
增值内容,请先登录
自己写一个Tomcat, 几乎使用到了除开框架外的所有Java 技术,如多线程,Socket, J2EE, 反射,Log4j, JSoup, JUnit, Html 等一整套技术栈, 从无到有,循序渐进涵盖全部74个知识点,549个开发步骤, 为竞争高薪资职位加上一个有吸引力的砝码.
增值内容,点击购买
使用爬虫已经被系统记录,请勿使用爬虫,增大封号风险。 如果是误封 ,请联系站长,谢谢


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2022-05-21 diytomcat实现的webappclassloader破坏了双亲委派机制吗?
Ruthless

我在网上搜到的tomcat的思路是重写了loadClass方法,从而破坏了双亲委派机制。 但是咱们的diytomcat没有重写loadClass方法呀,是不是没有破坏双亲委派机制?如果没有破坏的话是如何做到和tomcat一样的效果的。




1 个答案

how2j
答案时间:2022-06-02
我也看了,但是我无法理解网上说的为什么要 破坏了双亲委派,所以就没有特别处理这个。



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2021-09-01 站长为什么没办法调试 加了多端口和多线程之后?????
vcaml

打了断点 没效果 程序停不下来




2 个答案

ssz
答案时间:2022-08-29
右键断点, 选thread模式

how2j
答案时间:2021-09-15
不可能嘛,你是不是没用debug模式启动~



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2020-07-14 和tomcat的区别
2020-06-16 那我把rt.jar这个里面的String类给替换了总可以了吧
2020-06-16 那我把rt.jar这个里面的String类给替换了总可以了吧




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 实践项目-DiyTomcat-类加载器 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 578362961
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图