Java 如何从命令提示符编译servlet?

Java 如何从命令提示符编译servlet?,java,servlets,compiler-construction,classpath,Java,Servlets,Compiler Construction,Classpath,我想从命令提示符编译一个非常基本的servlet,但它总是不成功,编译器告诉我: error: package javax.servlet does not exist. %JAVA_HOME%\bin;C:\apache-tomcat-7.0.23\lib\servlet-api.jar\ 我在谷歌上搜索解决方案,发现我需要在路径中包含servlet.jar库。 我相信我做到了。 我坚信这些库在我的计算机中的位置是: C:\apache-tomcat-7.0.23\lib\servlet

我想从命令提示符编译一个非常基本的
servlet
,但它总是不成功,编译器告诉我:

 error: package javax.servlet does not exist.
%JAVA_HOME%\bin;C:\apache-tomcat-7.0.23\lib\servlet-api.jar\
我在谷歌上搜索解决方案,发现我需要在路径中包含
servlet.jar
库。 我相信我做到了。 我坚信这些库在我的计算机中的位置是:

C:\apache-tomcat-7.0.23\lib\servlet-api.jar\ 
我的道路的终点(相关部分)如下所示:

 error: package javax.servlet does not exist.
%JAVA_HOME%\bin;C:\apache-tomcat-7.0.23\lib\servlet-api.jar\

对我来说,这看起来不错,但显然不是。有谁能告诉我问题出在哪里吗?

类路径不是路径。。。你不需要它作为环境变量。 您可以使用-cp或-classpath选项为javac设置类路径(也可以使用其他几种方法)。 javac使用环境变量CLASSPATH查找类,这些类可能很有用,也可能是难以追踪的问题的来源

编译使用库(即标准JavaSE之外的类)的java文件的示例如下:

javac -classpath C:\apache-tomcat-7.0.23\lib\servlet-api.jar MyTestServlet.java
如果您的环境变量CLASSPATH包含您需要的库,您可能需要执行以下操作:

javac -classpath %CLASSPATH%;C:\apache-tomcat-7.0.23\lib\servlet-api.jar MyTestServlet.java
(请注意,我没有访问windows计算机的权限,因此没有测试上述语法的特殊部分) (还要注意,在本例中,“C:\apache-tomcat-7.0.23\lib\servlet api.jar”是一个jar文件,而不是一个可能来自您机器上的问题的目录) 对于windows操作系统上的命令行编译,最好正确设置环境变量JAVA_HOME,并在路径中设置JDK的bin目录

不过,我确实建议先通过/在用于servlet开发的IDE中编写编译执行部署,然后再从命令行了解如何使用JDK来完成。
Java servlet不是独立的可执行类,但需要部署到例如tomcat中进行测试/使用。

首先从以下路径复制servlet-api.jar文件

C:\apache-tomcat-7.0.23\lib\servlet-api.jar

然后按照路径将其粘贴到java软件的bin文件夹中

C:\java\jdk1.6\bin


希望现在您可以成功编译servlet程序。

1。您可以将javax.servlet.jar复制到jdk1.6\lib文件夹中。 2.您可以转到控制面板\系统\高级系统属性\环境变量

在CLASSPATH变量中输入jar的位置,如下所示:


然后编译并运行servlet。

路径和类路径是不同的。+1用于避免类路径环境变量,这可能导致意外行为。为了完整起见,最好包括一个例子。我同意一个例子,但我已经十年左右没有在java中看到windows路径了。我会尝试更新,但这是一个类路径的例子;唯一的区别是分隔符,
在Windows中,
在真实操作系统中。用空格引用路径,虽然``可能也能用——我也不记得Windows的东西了——这太棒了:Djavac-classpath C:\apache-tomcat-7.0.23\lib\servlet-api.jar MyServlet.java在-classpath后面不需要“=”符号。但这是一个很好的回答,救了我一天。ThanksThanks(是一个bluder,我指责我通常通过-D发送命令行类路径更改)