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

问题由来:根目录为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类加载详情再补上。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值