问题由来:根目录为java,直接在包下新建类:TestServlet,页面上请求改servlet时,抛出
ClassNotFoundException ...
网上一搜,大家都说是<servlet-class>没有配包名...,很尴尬...老司机会犯这种错误?高斯要咧
如图啦,发现不管怎么修改web.xml文件,tomcat配置,都不能访问。
一番瞎搞之后,发现: package 命名中java放在中间是可以,但是是不能放开头。
如果你也是觉得你的配置文件没有配错,jsp页面可以访问,但是自己写的那个servlet不能访问,
那么恭喜你,问题就是:以java作为包首,Application ClassLoader在加载这个java.TestServlet
时,请求上级类加载器,扩展加载器Extension ClassLoader,然后同样的Extension ClassLoader
请求核心加载器Bootstrap ClassLoader,这里,由于核心加载器负责加载java核心类(所有java.开头的package)
所以这里就加载java.TestServlet,但是,rt.jar中肯定不会有这个类。。。于是说找不到这个类。
其实问题并没有结束,按理说,找不到这个类之后抛出异常,被捕获了,然后给下一级的类加载器加载,
下一级再给下一级,于是又到了application ClassLoader这里加载,应该是可以发现的。
那没有给下一级加载就是说,可能所有的java开头的包都会直接发到启动类加载器,没找到就直接抛出异常。
这个,后面有机会了解jvm类加载详情再补上。
转载请注明原文地址: https://ju.6miu.com/read-1125860.html