Jbulder2005太“智能”,导致Class.fromName()出错

原创 2005年02月26日 11:54:00

Jbulder2005太“智能”,导致Class.fromName()出错

 

用不熟悉的语言和开发工具做开发,会遇到很多意思不到的难题。

虽然以前对javaJSP有所了解,但一直没有深入去学习。这次因为项目的需要,不得不从.net转到java行列上来。从过了元旦接到任务开始,就闭门苦读J2EE的书和资料,过了年一开就项目就正式开始了。

从这2个多月对java平台的了解来看,java平台在易操作性方面跟.net平台还是有几个量级的差别。

以前用javaBean都是直接在jsp文件中这样调用
<jsp:useBean id="xx" scope="application" class="web.testBean"></jsp:useBean>
或是显式的声明一个testBean对象
web.testBean test = new web.testBean();
这样使用是没什么问题的。

昨晚看到一篇Command模式的贴(http://www.cnjbb.org/thread.jsp?boardid=3&threadid=43224&pageno=last),想尝试一下,问题就出现了:老是抛出ClassNotFoundException异常!贴出Servlet的主要代码

    String className = request.getParameter("className");

    if (className == null)

    {

      throw new ServletException("No 'className' parameter![?className=]");

    }

    Class c = null;

    try

    {

      c = Class.forName(className);

      web.Controller.IController ctl = (IController) c.newInstance();

      ctl.execute(request, response);

    }

    catch (ClassNotFoundException ex)

    {

      request.setAttribute(appConfig.ControllerExecuteError,

                           "ClassNotFoundException:"+className);

    }

    catch (IllegalAccessException ex)

    {

      request.setAttribute(appConfig.ControllerExecuteError,

                           "IllegalAccessException");

    }

    catch (InstantiationException ex)

    {

      request.setAttribute(appConfig.ControllerExecuteError,

                           "IllegalAccessException");

    }

开始以为是packe或类名写错,在确认过NclassName没错后问题还是不能解决。

突然想到去看一下WEB-INF/classes目录,发现问题了!

WEB-INF/classes/web/Controller目录下没有login.class。我代码包如下图

WEB-INF/classes/web/Controller目录下却找不到login.class,项目的src目录下的确有login.java,在项目的class目录下也找到到了login.class,但为什么在发布目录中去没有login.class呢?这个文件跑哪儿去了?

googlebaidu搜索了很久也没有找到答案。

问了周围几个用java的朋友也说没见过这种问题,他们用的是jBuilderX,我还以为是jBuilder2005BUG。拿到另一台机上用jBbuilderX来编译也不行!

难道真的要我每次rebuild之后手动把class目录下的.class文件拷贝到WEB-INF/classes目录中?!

翻遍了jBilder的所有配置,终于找到了答案。右键点web->Properties

web模块的属性中content的选项,borland对这页配置的作用这样说的

The Content page of the Module Properties dialog box is where you choose which packages, classes, and resources to include in the archive file. You can accept the default which includes everything in the project, or you can choose specific packages, classes, files, and resources. You can also create custom filters that include or exclude specific items.

在这页里可以配置哪些文件包含在发布包(.war)里。这里有几个先项

Include All Classes And Resources

All classes and resources are included in the archive.

Include Specified Filtered Files And Their Dependencies

Only the files you specify using the Required Filters and Files list box and the Only Include Module Specific Java Classes option, and the dependencies of those files, are included in the archive.

Include Specified Filters And Files Only

Only the filters and files you specify using the Required Filters and Files list and the Only Include Module Specific Java Classes option are included in the archive

可以选择第一个Include All Classes And Resources或是选第二个Include Specified Filtered Files And Their Dependencies然后再Add files,加入你需要的文件就OK了。

有一点不知道为什么如果是<jsp:usebean/>的话就会自动把相应的.class拷贝到WEB-INF/classes目录下,但如果在所有的.jsp.java文件中都没有显式使用过某个类的话就不会拷贝过去。如果我刚才说的login是实现了Icontroller接口,而在代码中只有这样使用

      c = Class.forName(className);

      web.Controller.IController ctl = (IController) c.newInstance();

      ctl.execute(request, response);

JB就认为我没有使用过login这个类,就“智能”把这个类从war文件中排除掉了。就是这个“智能”把这给害惨了。

战斗才刚刚开始,不知做到后面还会有什么大麻烦。

 

相关文章推荐

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: SQL 网络接口, err...

org.apache.jasper.JasperException: Unable to compile class for JSP.JSP文件过大,导致文件编译出错

报错log: Caused by: org.apache.jasper.JasperException: Unable to compile class for JSP: An error occ...
  • Jay821
  • Jay821
  • 2015年08月23日 14:43
  • 1362

SQL Server 2005附件数据库出错

  • 2008年04月12日 10:39
  • 49KB
  • 下载

sql2005 执行安装向导期间出错解决方法

转自 风中的叶伯伯 sql2005 执行安装向导期间出错吐血处理过程 http://7-blog.cn/bobcnc/archive/2009/02/25/2297.aspx 由于...

sql server2005卸载重装出错

  • 2009年05月16日 12:08
  • 25KB
  • 下载

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下...

可能1:估计装的是Express版,服务器名称原来是:Server=.把服务器名改为:Server=./SqlExpress试一下。   可能2:远程连接的外围配置没有配置好。1. 数据库引擎没有启动...

安装SQL Server 2005 出错

  • 2011年07月27日 09:01
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jbulder2005太“智能”,导致Class.fromName()出错
举报原因:
原因补充:

(最多只允许输入30个字)