在servlet中使用我自己的类(Java / Tomcat / Linux)

时间:2013-05-02 21:14:27

标签: java jsp tomcat servlets javac

在过去的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

请帮忙!

3 个答案:

答案 0 :(得分:0)

来自javac联机帮助页:

  

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

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

答案 1 :(得分:0)

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

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

即便如此,这通常也不是Web项目的组合方式。最好将类打包到JAR中并将JAR放在WEB-INF / lib文件夹中。

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

答案 2 :(得分:0)

问题解决了!

我为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您的答案是正确的答案。 祝你有愉快的一天。