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类加载详情再补上。
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类加载详情再补上。
相关文章推荐
- java.lang.ClassNotFoundException: package com.xiangang.qq_client.Prototal 常见异常处理方法
- java.lang.ClassNotFoundException: javax.xml.parsers.SAXParserFactory
- ROSE 2003安装完后启动提示"java.lang.ClassNotFoundException"。
- ROSE 2003 提示 java.lang.ClassNotFoundException
- Java初学笔记:连接SQL Server 2005总是提示java.lang.ClassNotFoundException
- Tomcat 启动报java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 异常
- ClassNotFoundException!! the class name likes "XX_noch**_**Impl.java"
- 在eclipse下用java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource定义data-source Tomcat无法启动的解决方法
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
- MyEclipse 或者Eclipse运行main函数,报java.lang.ClassNotFoundException
- RMI Stub class java.lang.ClassNotFoundException
- java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource的解决方法
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- eclipse 连接 sqlserver2005错误信息:"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver"
- java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
- java.lang.ClassNotFoundException: org.apache.jasper.servlet.JspServlet.
- EJB3 Exception:java.lang.ClassNotFoundException: org.hibernate.collection.PersistentSet
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver Eclipse3.1 数据库连接测试程序(SQL Server 2000 Driver for JDBC Service Pack 3 安装测试)
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver