【问题标题】:Tomcat can't find class that is placed directly under classes folderTomcat找不到直接放在类文件夹下的类
【发布时间】:2011-10-06 12:54:41
【问题描述】:

我有以下 JSP:

<%@ page import="foo.*" %>
<html>
    <body>
        The page count is:
        <%=Counter.getCount()%>
    </body>
    </html>

我在包foo 中有一个Counter 类,它存储在:

C:\apache-tomcat-6.0.32\webapps\God\WEB-INF\classes

容器可以从它的包foo中找到类。

但是当我尝试直接在\WEB-INF\classes 下添加一些其他类文件而不是在任何特定包中,例如foo,然后容器找不到该类。

这是怎么引起的,我该如何解决?

【问题讨论】:

  • 您是否在“导入”指令中指定了其他类?
  • 两个禁忌:a) 永远不要使用默认包,b) 不要在 JSP 中使用 java 代码
  • 顺便说一句,您的 JSP 中有一个 HTML 语法错误。
  • @AVD 先生,我重新启动了 tomcat 但它没有帮助
  • @Sean Patrick Floyd,BalusC 先生,当我使用此代码时,它适用于 foo 包

标签: java jsp


【解决方案1】:

默认包中的类对包中的类不可见。您必须将这个类放在一个包中,只要你想将它导入另一个单独的包中的类。从技术上讲,当 JSP 文件被编译时,容器将自动生成一个 .class 文件,该文件本身位于一个包中。所以你不能从 JSP 中的默认包中导入类。

因此,无论何时您希望能够在任何地方重用一个类,都必须将它放在一个具体的包中,而不是放在默认包中。作为练习,自己创建两个类,一个在包内,另一个不在包内。现在,在有包装的里面,尝试import 并使用没有包装的那个。你会发现这是不可能的,代码也不会编译。 servlet 容器“在幕后”遇到了完全相同的问题。

另见:


与具体问题无关:在 JSP 文件中编写原始 Java 代码是 poor practice。考虑学习和使用servlets

【讨论】:

  • 非常感谢先生!祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多