您的位置:首页 > 编程语言 > Java开发

package 以java开头的包名报:ClassNotFoundException真相

2016-09-14 23:03 375 查看
问题由来:根目录为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类加载详情再补上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐