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

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

Jbulder2005太“智能”,导致Class.fromName()出错<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

虽然以前对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文件中排除掉了。就是这个“智能”把这给害惨了。

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

 

太坊开发的程序

太坊爱好者 · 1 分钟前 翻译:Toya 声明:转载须附本文链接,违者必究 原文链接:https://medium.com/bitcorps-blog/the-hitchhikers-guid...
  • DDFFR
  • DDFFR
  • 2016年12月06日 22:40
  • 1658

C#会重蹈覆辙吗?系列之1:论C#性能不能承受之慢

C#会重蹈覆辙吗?系列之1:论C#性能不能承受之慢
  • shuanghusun
  • shuanghusun
  • 2010年09月26日 16:27
  • 756

共享单车上的智能锁,做出来有多难?

最早共享单车运营品牌之一的摩拜单车,传闻仅仅开发其独立自主品牌的单车智能锁就使用了半年时间,那么问题来了,共享单车上的智能锁,做出来有多难? 共享单车作为现阶段的资本风口,媒体对共享单车...
  • anseccsx
  • anseccsx
  • 2017年06月14日 22:04
  • 436

MyEclipse 的智能提示设置 使开发写代码的速度更快

MyEclipse 是学习java 的人 最常用的IDE ,常常看到很多人写代码的速度很快,其实他们大多数都使用了代码提示功能,代码提示有好有坏,好的方面就是使在项目开发中速度更快,不用去记那些较长的...
  • jsjliuyun
  • jsjliuyun
  • 2014年07月16日 18:48
  • 1322

受不了!Windows太智能了

昨天晚上刻了张盘,结果无法用光驱读取,放到一边了事可是今天进入系统,发现光驱读盘的时候,整个系统卡的要命,晕了!我以为是中毒了,结果,杀毒没有无辙,到网上一搜,娘亲!原来是windows发现读取数据的...
  • zhmnsw
  • zhmnsw
  • 2006年04月17日 18:27
  • 787

修改环境变量导致命令出错

切换到root账户: root@ubuntu:/# /usr/bin/sudo -i 用nano编辑器打开 .bashrc文件: root@ubuntu:~# /usr/bin/nano ~/....
  • a379039233
  • a379039233
  • 2017年04月20日 16:27
  • 210

汇编程序(MASM)常见错误信息

汇编程序在对源程序的汇编过程中,若检查出某语句有语法错误,随时在屏幕上给出出错信息.如操作人员指定的列表文件名(即.LST),汇编程序亦将在列表文件中出错的下面给出出错信息,以便操作人员即时查找错误,...
  • hengfanz
  • hengfanz
  • 2015年03月12日 16:10
  • 560

控制VS的智能提示(禁用Intellisense)

本文译自: http://blogs.msdn.com/b/vcblog/archive/2007/11/19/controlling-intellisense-through-macros.as...
  • great3779
  • great3779
  • 2013年01月22日 15:20
  • 9728

mysql(四)Innodb的聚簇索引

聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。具体的细节依赖于其实现方式,但InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行。 当表有聚簇索引时,它的数据行实际上存...
  • lz710117239
  • lz710117239
  • 2017年05月12日 00:11
  • 245

web_custom_request--性能测试学习中的问题与解答7

录制了一个登陆的脚本(V1)。录制的时候使用的是英文的账户名,然后对脚本进行了参数化。参数化列表中使用了中文。 脚本回放时发现test result结果中提示账户名或密码错误。 很奇怪,因为中文的账...
  • elain0606
  • elain0606
  • 2014年03月20日 16:51
  • 1081
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jbulder2005太“智能”,导致Class.fromName()出错
举报原因:
原因补充:

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