Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于这个servlet+;tomcat示例,无法使用javac编译servlet_Java_Jsp_Tomcat_Servlets - Fatal编程技术网

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

关于这个servlet+;tomcat示例,无法使用javac编译servlet,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我目前正在阅读《第一个servlet和JSP》一书,在第81页,作者要求使用javac编译servlet 我在执行那行代码时遇到问题。我认为我的JAVA_主页等必须正确设置,因为我创建了一个示例HelloWorld.JAVA和 使用javac编译它并创建了相应的.class文件 我看不到这个命令的逻辑,您指定了servlet-api.jar文件的类路径,然后给它另一个路径,以便它可以执行.java文件? 我想走出我现在所处的困境。以下是指向我的文件的路径: C:\Users\Carlos L\T

我目前正在阅读《第一个servlet和JSP》一书,在第81页,作者要求使用javac编译servlet

我在执行那行代码时遇到问题。我认为我的JAVA_主页等必须正确设置,因为我创建了一个示例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


这不应该这么难

首先,是的可以针对一个jar编译,然后针对另一个jar运行。特别是一个名为something-api.jar的jar通常只包含构成应用程序接口aka api的类,并且足以编译想要调用某个东西的程序,但实际上执行这些调用需要额外的内部类,这些内部类使用各种名称打包在jar中,例如something impl,一些实体,普通的东西,或者多个jar,比如一些基本的东西,一些核心的东西,一些附加的东西,选项等等

其次,您的书显然使用了通用(但不是必需的或通用的)方案,其中java源代码文件和编译的类文件位于独立的并行子树中,这里命名为
src
类。您的特定源文件显然是
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.jar
classes
目录。在Windows上,用分号分隔类路径条目
,但决不能将它们混在一起。因此,您的案例将包括:

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类路径中

set CLASSPATH="C:\users\Carlos L\tomcat-8.0.28\bin\servlet-api.jar;classes"
然后简单地做

javac -d classes src\com\example\web\BeerSelect.java 
同样,对于项目中的任何其他类,当您遇到它们时,也会遇到类似的情况