【问题标题】:Use my own classes in a servlet (Java/Tomcat/Linux)在 servlet (Java/Tomcat/Linux) 中使用我自己的类
【发布时间】:2013-05-02 21:14:26
【问题描述】:

在过去的 3 天里,我找不到这个问题的单一答案。我需要能够在我的 servlet 中使用我自己的类。

我很确定我的文件层次结构是正确的:

|-WEB-INF/
|---classes/
|------com/
|---------myProject/
|------------user/
|---------------User.java
|---------------Location.java
|---------------Comment.java
|------------servlet/
|---------------DoComment.java

由于 User.java、Location.java 和 Comment.java 在一个包中定义为 com.myProject.user 我知道我应该去 java 项目的主根目录并以这种方式编译它们:

/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/Location.java
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/User.java
/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac com/myProject/user/Comment.java

但是,当我在编译中使用类路径时,javac 无法识别其他对象(cannot find symbol 错误)。

/var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac -cp /usr/share/tomcat6/lib/servlet-api.jar com/myProject/servlet/DoComment.java

请帮忙!

【问题讨论】:

    标签: java jsp tomcat servlets javac


    【解决方案1】:

    您将 java 源代码放在需要编译的 java 类的位置。尝试编译源代码,然后将类文件(.class 与 .java)添加到您当前放置的位置。

    为此,您必须确保这些类没有依赖关系,并且您的类的包声明与您放置它们的文件夹层次结构相匹配。

    即便如此,这通常不是网络项目的组合方式。您最好将这些类打包成一个 JAR 并将 JAR 放在您的 WEB-INF/lib 文件夹中。

    有关创建 JAR 的更多信息,请查看:http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

    【讨论】:

      【解决方案2】:

      来自 javac 手册页:

      -cp 类路径
      设置用户类路径,覆盖 CLASSPATH 环境中的用户类路径 多变的。如果既不是 CLASSPATH 也不是 -class- 指定路径,用户类路径由当前 目录。

      基本上,当您使用 -cp 标志时,您会覆盖类路径,因此您需要确保在类路径中指定所有必需的类。类路径条目的分隔符是 :,它需要通配符。

      【讨论】:

      • 类路径语法取决于操作系统。在类 Unix 上,分隔符是:(冒号,不是分号)。
      【解决方案3】:

      问题解决了!

      我为com.myProject.user 包创建了一个JAR 文件并将其保存在WEB-INF/lib 中。比我使用冒号分隔的两个类路径编译 servlet。

      代码如下:

      /var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo jar cvf myproject-user.jar com/myProject/user/User.class com/myProject/user/Location.class com/myProject/user/Comment.class
      /var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ mv myproject-user.jar ../lib/myproject-user.jar
      /var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo service tomcat6 restart
      /var/lib/tomcat6/webapps/ROOT/WEB-INF/classes$ sudo javac -cp /usr/share/tomcat6/lib/servlet-api.jar:../lib/myproject-user.jar com/myProject/servlet/DoComment.java
      

      谢谢durron597kwikness 你的答案加起来就是正确答案。 祝你有美好的一天。

      【讨论】:

        猜你喜欢
        • 2012-01-31
        • 1970-01-01
        • 2016-05-04
        • 2016-02-02
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        相关资源
        最近更新 更多