在JSP中没有看到彼此的类

时间:2011-01-02 04:01:05

标签: java jsp compilation web-inf

在tomcat JSP应用程序中,我有这个目录布局:

webapps/
    myProjectName/
        index.jsp
        WEB-INF/
            classes/
                mypackage/
                    class1.java
                    class2.java

我正在尝试编译引用class2.java的class1.java。它的编码形式如下:

package mypackage;

public class class1 extends class2 {}

和class2看起来像这样:

package mypackage;

public class class2 {}

然而,我在class1上收到错误,说无法找到class2。首先我编译了class2,编译得很好,但是当我尝试编译class1时失败了,说找不到class2。我尝试将目录添加到我的类路径(ubuntu)中,方法是将其添加到/ etc / enviornment:

/usr/local/tomcat/webapps/myProjectName/WEB-INF/classes

但它仍然无法编译。

知道什么是错的吗?

确切的错误输出是:

javac "Page.java" (in directory: /usr/local/tomcat/webapps/developers/WEB-INF/classes/library)
Page.java:20: cannot find symbol
symbol  : class DynamicPage
location: class library.Page
        DynamicPage dynamicClasses = {new registerPage()};
        ^
Page.java:20: illegal initializer for <none>
        DynamicPage dynamicClasses = {new registerPage()};
                                     ^
Page.java:20: cannot find symbol
symbol  : class registerPage
location: class library.Page
        DynamicPage dynamicClasses = {new registerPage()};
                                      ^
Page.java:34: cannot find symbol
symbol  : class DynamicPage
location: class library.Page
            DynamicPage selected = null;
            ^
Page.java:35: cannot find symbol
symbol  : class DynamicPage
location: class library.Page
            for (DynamicPage dp: dynamicClasses) {
                 ^
5 errors
Compilation failed.

4 个答案:

答案 0 :(得分:1)

我不明白为什么有些人反对使用Eclipse或Netbeans(或任何IDE)。我意识到有些人更喜欢手动驾驶到自动驾驶,因为你倾向于感受到发动机的原始动力。我学会了使用自动驾驶,然后习惯了驾驶手册。我精通手动驾驶员现在通过自动学习驾驶。我现在甚至可以处理挖掘机,而且非常熟练(我为我正在建造的房子挖洞)。

与Java相同。您让Netbeans或Eclipse为您构建整个Web应用程序结构,然后检查结构。玩蚂蚁构建。通过思考来学习IDE。

我知道有些人认为如果没有IDE,你会让自己暴露在原始编译过程中,因此会对构建过程有一个“更深入”的理解。真?不要浪费你的时间。让IDE为您完成。如果您愿意检查IDE生成的文件和结构,您将更快地学习构建过程。

答案 1 :(得分:0)

在您的classes文件夹中运行:

javac -cp /usr/local/tomcat/webapps/myProjectName/WEB-INF/classes *.java

您需要在编译期间包含类路径。

答案 2 :(得分:0)

在WEB-INF下的任何地方都不应该有.java源文件。将编译和包装分开。

答案 3 :(得分:0)

除了不识别课程之外还有其他一些错误,但是当涉及到你的问题时:

  • 不要向classpath添加任何内容,这是无关紧要的,
  • 不要更改任何系统设置,它们无关紧要,
  • 不要担心包装 - 你还在学习基础知识,
  • 不使用Zeki的javac行,它不起作用(* .java只会编译classes /目录中的文件,你想在mypackage下编译类)。

最重要的是:不要认为这很难或需要复杂的设置。这真的很容易,一旦你开始学习Java就很重要。

当javac编译一个类并且它发现它使用了一些其他类时,它会在两个地方查找它,称为classpath(对于编译版本)和sourcepath(对于源代码)。默认情况下,它们都包含当前工作目录。请注意,它与包含.java文件的目录不同。

类路径中.java或.class文件的确切位置总是取决于包(但你已经知道了)。在你的情况下,如果你这样做:

cd WEB-INF/classes/mypackage
javac class1.java

你的sourcepath是WEB-INF / classes / mypackage,所需的类是mypackage.class2,因此,对于直觉,javac会查找文件WEB-INF / classes / mypackage / mypackage / class2.java。此类文件不存在,您收到错误。

另一方面,想象一下:

cd WEB-INF/classes
javac mypackage/class1.java

现在你的sourcepath是WEB-INF / classes,所需的类是mypackage.class2,javac将查找文件WEB-INF / classes / mypackage / class2.java - 它会毫无问题地找到它。

道德:编译时,总是在源代码的顶层目录中编写javac,在所有包之上。这样你的包就可以与目录一致,如javac所见,编译完美无缺。

在你设法完全理解发生的一切之后,一定要切换到Netbeans(并且,在并行线程中,学习ant,然后maven)。它安装了自己的tomcat 6副本,您可以使用它来开发您的应用程序; tomcat 7向下兼容,因此将应用程序安装到它只需将war文件(由netbeans构建)复制到tomcat 7 webapps。