这几天看个BBS小项目,自己开始写不巧包的命名为java.bbs,后面jsp页面里要引用数据库的封装类DB.java  。这样就老出现下面的问题:
 
root cause 
javax.servlet.ServletException: java/bbs/DB 
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841) 
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774) 
org.apache.jsp.article_jsp._jspService(article_jsp.java:322) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
root cause 
java.lang.NoClassDefFoundError: java/bbs/DB 
org.apache.jsp.article_jsp._jspService(article_jsp.java:78) 
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 检查classpath,驱动等都觉得没有问题。左后一点点调试改了个包名,就正确了。想请高手解答一下为什么?

解决方案 »

  1.   

    一般来说 这样命名包..        如果域名是  saito.javaeye.com那么就把包名倒过来写. 防止别人的报名跟你的一样.    所以 报名就写成  com.javaeye.saito  当然不一定每个人都这么写.    最好还是规范一点. 
      

  2.   

    java.lang.NoClassDefFoundError: java/bbs/DB 
    再仔细看了一下啊..发现你的问题题目跟你的问题不相干?
            很明显是没找到 java/bbs/DB这个类. 路径需要改一下..jsp下面的路径挺烦的..
      

  3.   

    问:就上面所说的,为什么包名是com.bbs就可以找的DB类(程序运行正确),而包名是java.bbs就出异常.(其他什么都不该,只是rename了包)
      

  4.   

    找找在你的workspace下面有没有还叫java.bbs的包..                  你的包可能重名了/
      

  5.   

    java.lang.ClassLoader 类加载器不允许用户定义以 java 开头的包名。可以在这个类 preDefineClass 方法的源代码中找到这项检查。
      

  6.   

     private ProtectionDomain preDefineClass(String name,
        ProtectionDomain protectionDomain)
        {
    if (!checkName(name))
        throw new NoClassDefFoundError("IllegalName: " + name); if ((name != null) && name.startsWith("java.")) {//受教了..
        throw new SecurityException("Prohibited package name: " +
    name.substring(0, name.lastIndexOf('.')));
    }
    if (protectionDomain == null) {
        protectionDomain = getDefaultDomain();
    }