如何在命令提示符下编译Servlet?

4

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

 error: package javax.servlet does not exist.

我在Google上搜索了解决方案,发现我需要将servlet.jar库包含到我的路径中。 我相信我已经这样做了。 我强烈相信这些库在我的电脑上的位置是:

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

我的PATH环境变量的结尾(相关部分)如下:

%JAVA_HOME%\bin;C:\apache-tomcat-7.0.23\lib\servlet-api.jar\

对我来说,它看起来很好,但显然不是。有人能告诉我可能有什么问题吗?


2
路径和类路径是不同的东西。 - Dave Newton
3个回答

10

classpath不是路径……你也不需要将其设置为环境变量。 你可以使用-cp或-classpath选项(还有其他几种方式)来为javac设置classpath。 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目录添加到PATH中。

然而,我建议在通过IDE编写-编译-执行-部署Servlet之前,先弄清楚如何使用JDK从命令行实现这一过程。 Java Servlets不是独立的可执行类,需要部署到例如Tomcat中才能进行测试/使用。


避免使用CLASSPATH环境变量,因为它可能导致意外行为。最好包含一个示例以确保完整性。 - Dave Newton
同意这个例子,但我已经十多年没有在Java中看到Windows路径了。我会尝试更新。 - esej
但这将是一个类路径的示例;唯一的区别是分隔符,在Windows中为;,在真正的操作系统中为:。并且需要在路径周围加上引号以处理空格,尽管\也可能有效--我也不太记得Windows的东西--这很棒 :D - Dave Newton
javac -classpath C:\apache-tomcat-7.0.23\lib\servlet-api.jar MyServlet.java在-classpath后面不需要加上"="号。但是这是一个很好的答案,它救了我的一天。谢谢。 - Sanyifejű
谢谢(这是一个错误,我把它归咎于我通常通过“-D”发送命令行类路径更改) - esej
嘿,pr123,你能否将这个答案标记为被接受的答案呢?这是 stackoverflow 应该运作的方式 :p 。在此 faq 条目的末尾有如何操作的说明。http://stackoverflow.com/faq#howtoask - esej

1

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

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

将其复制并按照路径粘贴到Java软件的bin文件夹中。

C:\java\jdk1.6\bin;

希望现在您能够成功编译您的Servlet程序。

1

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

enter image description here

请将jar包的位置输入到CLASSPATH变量中,方法如下:

enter image description here

然后编译并运行servlet。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接