特定文件夹中的java.lang.ClassNotFoundException

时间:2014-09-30 22:12:07

标签: linux jsp tomcat

几个月前,我正在为客户端更改此Web应用程序。它是一个使用tomcat作为Web服务器的JSP Web应用程序。我做了改动,测试了(当然),并将应用程序留给了客户。他们回到我身边并提到该网站的某个特定区域无法正常工作。我进去检查一下这个区域,确实它没有工作,但几个月前我做了改动时它正在工作。

这个问题遇到了一个非常不寻常的问题。相关目录中的每个页面(/ tomcat / webapps / website / english / login)都会抛出java.lang.ClassNotFoundException。

要解决这个问题,我尝试使用" hello world"创建一个空白的JSP。并且没有编码,仍然抛出java.lang.ClassNotFoundException。我在这个目录之外创建了相同的JSP页面,它很好

复制此问题的步骤:

  1. 我进入相关目录(tomcat / webapps / website / english / login)
  2. 创建一个名为test.jsp的JSP页面,其字面上包含" hello world"只(没有编码)
  3. 在浏览器上,我导航到test.jsp。它抛出java.lang.ClassNotFoundException
  4. 我从登录(tomcat / webapps / website / english)
  5. 进入目录
  6. 创建一个名为test2.jsp的JSP页面,其字面上包含" hello world"只(没有编码)
  7. 在浏览器中,我导航到test2.jsp页面。它的工作原理
  8. 我做过其他测试,但找不到问题。请参阅下面的一些方法

    • 将Web应用程序移动到其他目录(tomcat / webapps / website2)。包括/ english / login目录在内的所有内容都可以使用
    • 删除了网络应用程序目录并重新创建了目录路径,仍然给了我例外
    • 已检查的权限。有问题的目录与Web应用程序中的所有其他内容(包括文件)具有相同的权限

    根据测试结果,我认为问题是目录本身(/ tomcat / webapps / english / login)。每次我移动目录,一切正常。

    请注意,我正在使用文本编辑器(notepad ++)更改Web应用程序而不是在eclipse上,使用TeamCity构建应用程序(编译得很好),服务器在linux下运行,我无法访问构建脚本但我相信ANT被用作建设者

    所以我的问题是,是什么导致了这个问题?要使特定目录中的所有文件都能查找类?

    非常感谢任何线索/帮助。我已经在这个问题上工作了几天。它令人难以置信

    干杯!

2 个答案:

答案 0 :(得分:0)

我会检查与PS -ef一起使用的类路径并查找该过程。错误日志应指向特定的类。这两条线索可以帮助确定是配置还是战争问题。

我看到的一种可能性是在tomcat配置文件中,显式定义了允许的路径。此外,配置文件可以将特定路径映射到java类。

答案 1 :(得分:0)

找到我自己问题的答案。问题起源于Tomcat。 Web服务器将JSP文件转换为.java文件,然后编译它。由于一些奇怪的原因,Tomcat没有为特定文件夹中的所有文件执行此操作。

解决方案是进入Tomcat的工作文件夹,向下钻取,直到看到您的webapp的名称并删除该文件夹。这将迫使Tomcat重建所有访问过的页面。

更安全的方式(对我不起作用。没有删除工作文件夹中的webapp)是登录Tomcat并取消部署webapp。这应该删除tomcat工作文件夹中的webapp文件夹。

希望这对遇到类似问题的人有帮助