2012-02-08 211 views

回答

57

您需要將Tomcat的/lib/servlet-api.jar文件的路徑添加到編譯時類路徑。

javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServletClass.java 

類路徑是Java需要查找導入依賴項的地方。否則,它將默認爲在上面的示例中包含爲.的當前文件夾。 ;是Windows的路徑分隔符;如果您使用的是基於Unix的操作系統,則需要使用:

+2

真實的,但在未來考慮使用Maven來解決這類問題你 – Kris 2012-02-08 12:44:15

+7

或者只是像Eclipse的IDE。不過,我建議繼續深入學習,直到你幾乎可以夢想成真。否則,很難理解IDE如何在封面下工作。 – BalusC 2012-02-08 12:46:00

+0

感謝BalusC。它解決了這個問題。 – Karadous 2012-02-08 12:55:25

6

它是JSP還是Servlet?那麼,這兩個包實際上並沒有像java.io那樣構建到Java中。相反,他們帶有支持Servlet的Web服務器(例如Tomcat)。因此,在Java編譯器能夠編譯我們的Servlet之前,我們需要讓它知道在哪裏找到這兩個包中的類。

所需的類通常存儲在一個名爲servlet.jar的文件中。該文件的確切位置取決於您使用的特定Web服務器軟件,但對於Tomcat,您可以在主Tomcat安裝目錄的lib子目錄中找到它(例如d:\ Program Files \ Apache Group \ jakarta- Tomcat的3.2.3 \ LIB \的servlet.jar)。爲了讓Java編譯器能夠編譯Servlet,您需要將此文件添加到Java類路徑中。默認情況下,Java僅在當前目錄(「。」)中查找類。因此,「。」是默認的類路徑。如果在Unix中將類路徑更改爲包含servlet.jar文件(「。; d:... \ lib \ servlet.jar」),則在Unix中包含「/ usr /.../ lib/servlet.jar」 ),那麼Servlet應該編譯得很好。

您可以指定一個類路徑,當你運行的javac.exe如下使用:

d:\javadev> javac -classpath ".;d:\Program Files\Apache Group\ jakarta-tomcat-3.2.3\lib\servlet.jar" MyServlet.java

或者在Linux中的javac用途:代替;

server1> javac -classpath ".:./servlet/servlet.jar" MyServlet.java

+0

我應該在我編譯一個文件的時候這麼做嗎?我的意思是有一種方法可以在我編譯一個文件的時候設置classpath。 – Karadous 2012-02-08 12:46:59

+0

要編譯文件即* .java,必須確保servlet.jar位於類路徑中。請注意,JSP最終會被轉換爲當然是Java文件的servlet。 – Frankline 2012-02-08 13:22:32

+0

有人建議:*「如果您使用的Windows添加d:\ Program Files \ Apache Group \ jakarta-tomcat-3.2.3 \ lib \ servlet.jar;到JAVA_HOME變量也可以做到這一點」* – Pubby 2012-04-29 16:21:13

1

添加的servlet-api.jar文件到您的類路徑中。它將在Tomcat的lib文件夾中可用。

1

JSP和Servlet是服務器端編程。因爲它是像Tomcat這樣的服務器內置的軟件包。 的路徑可能像明智

C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\jsp-api.jar 
C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar 

只要你想做的事就是加入這個以下列方式

Right Click> My Computer>Advanced>Environment Variables>System variables 

Do> New..> Variable name:CLASSPATH 
      Variable value:CLASSPATH=.;C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar; 
5

在Linux環境中的軟鏈接顯然是行不通的。你必須使用物理路徑。例如在我的機器上,我有一個軟鏈接/usr/share/tomacat7/lib/servlet-api.jar並將其用作我的類路徑參數,導致編譯失敗時出現相同的錯誤。相反,我不得不使用/usr/share/java/tomcat-servlet-api-3.0.jar這是軟鏈接指向的文件。

18

如果您正在使用maven項目,然後添加以下依賴項到您的pom。xml

<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.0.1</version> 
    <scope>provided</scope> 
</dependency> 
+2

Gradle等效是'依賴關係'編譯組:'javax.servlet',名稱:'servlet-api',版本:'2.4'}' – MarkHu 2016-12-15 01:47:09

+0

仍然不適用於我 – 2017-04-25 01:23:26

+0

這適用於我,非常感謝 – 2018-01-09 09:45:47

0

這就是我發現的。在我的環境變量中添加/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar作爲CLASSPATH。操作系統是iOS。如果使用bash

:〜/ .bash_profile中$CLASSPATH=/usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar

如果使用的zsh:〜/ .zshrc出口CLASSPATH="usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar"

迫使它現在的工作,運行source .bash_profile(或.zshrc) 或一個可以重新啓動計算機它適用於當前用戶。

4

這正是解決了這個問題對我來說:

<dependency> 
    <groupId>javax.servlet.jsp</groupId> 
    <artifactId>jsp-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
</dependency>