关于这个servlet + tomcat的例子,无法使用javac编译servlet

时间:2015-10-20 23:07:23

标签: java jsp tomcat servlets

我目前正在关注Head First Servlets和JSP这本书,我在第81页上提到了作者要求使用javac编译servlet。

我遇到了执行该行代码的问题。我认为我的JAVA_HOME等必须正确设置,因为我创建了一个示例HelloWorld.java和  编译它使用javac并创建了相应的.class文件。

我没有看到这个命令的逻辑,你指定了一个servlet-api.jar文件的类路径,然后给它另一个路径,以便它可以执行.java文件?  我想摆脱我现在所处的这个洞。这些是我的文件的路径:

C:\ Users \ Carlos L \ Tomcat \ apache-tomcat-8.0.28 \ bin \ servlet-api.jar  这是我的BeerSelect.java文件的位置:  C:\ Users \ Carlos L \ Tomcat \ My Tomcat Projects \ beer-v1 \ src \ com \ example \ web \ BeerSelect.java

到目前为止我一直在估算:  javac -classpath C:\ Users \ Carlos L \ Tomcat \ apache-tomcat-8.0.28 \ bin \ servlet-api.jar;类:。 d-classes src \ com \ example \ web \ BeerSelect.java

我收到此错误:

javac:无效标志:d-classes  用法:javac

这应该不是这么难。

1 个答案:

答案 0 :(得分:0)

首先,是对一个jar进行编译然后针对另一个jar运行是有效的。特别是一个名为 -api .jar的jar通常只包含 构成应用程序接口即API的类,并且足以编译想要调用某些东西的程序,但实际上执行这些调用需要额外的内部类,这些类使用各种名称打包在罐子里,例如something-impl,something-body,plain something,或者多个jar,例如某些东西 - 基本的东西 - 核心东西 - 插件 - 选项等等。< / p>

其次,你的书显然是使用通用的(但不是必需的或通用的)方案,其中java源代码文件和编译的类文件在单独的,并行子树这里命名为srcclasses。您的特定源文件显然是src\com\example\web\BeerSelect.java。在这种情况下,运行java编译器的语法是:

javac -classpath (classpath) -d classes src\com\example\web\BeerSelect.java
# or abbreviate -classpath as -cp, or use envvar CLASSPATH instead 

那个连字符然后是d,然后是空格,然后是目录名classes,然后是另一个空格和源路径(或多个源路径)。

您最初不需要在类路径中指定classes,只需指定servlet-api.jar文件。如果您以后编译某些而不是src子树的所有源文件,并且其他源文件的先前编译的类文件已经在classes子树中,你确实需要servlet-api.jarclasses目录。在Windows上,您使用分号;分隔类路径条目,在Unix上使用冒号:,但不要混用它们。所以你的情况包括:

javac -classpath \path\to\servlet-api.jar;classes (rest as above) 

除了您的路径名称显然包含空格C:\users\Carlos L\...,因此您必须将该值放在引号中:

javac -classpath "C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes" (rest as above)`

作为多次输入的替代方法,您可以将值放在envvar CLASSPATH

set CLASSPATH="C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes"

然后简单地做

javac -d classes src\com\example\web\BeerSelect.java 

并且类似于项目中的任何其他类,当你来到他们时。