我有我導入的javax.servlet包*和javax.servlet.http包* 當我嘗試編譯它,在命令提示符我得到的錯誤編譯錯誤:包的javax.servlet不存在
。package javax.servlet does not exist
我使用JDK 1.7.0和Tomcat 6.0。
我有我導入的javax.servlet包*和javax.servlet.http包* 當我嘗試編譯它,在命令提示符我得到的錯誤編譯錯誤:包的javax.servlet不存在
。package javax.servlet does not exist
我使用JDK 1.7.0和Tomcat 6.0。
您需要將Tomcat的/lib/servlet-api.jar
文件的路徑添加到編譯時類路徑。
javac -cp .;/path/to/Tomcat/lib/servlet-api.jar com/example/MyServletClass.java
類路徑是Java需要查找導入依賴項的地方。否則,它將默認爲在上面的示例中包含爲.
的當前文件夾。 ;
是Windows的路徑分隔符;如果您使用的是基於Unix的操作系統,則需要使用:
。
它是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
我應該在我編譯一個文件的時候這麼做嗎?我的意思是有一種方法可以在我編譯一個文件的時候設置classpath。 – Karadous 2012-02-08 12:46:59
要編譯文件即* .java,必須確保servlet.jar位於類路徑中。請注意,JSP最終會被轉換爲當然是Java文件的servlet。 – Frankline 2012-02-08 13:22:32
有人建議:*「如果您使用的Windows添加d:\ Program Files \ Apache Group \ jakarta-tomcat-3.2.3 \ lib \ servlet.jar;到JAVA_HOME變量也可以做到這一點」* – Pubby 2012-04-29 16:21:13
添加的servlet-api.jar文件到您的類路徑中。它將在Tomcat的lib文件夾中可用。
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;
在Linux環境中的軟鏈接顯然是行不通的。你必須使用物理路徑。例如在我的機器上,我有一個軟鏈接/usr/share/tomacat7/lib/servlet-api.jar
並將其用作我的類路徑參數,導致編譯失敗時出現相同的錯誤。相反,我不得不使用/usr/share/java/tomcat-servlet-api-3.0.jar
這是軟鏈接指向的文件。
如果您正在使用maven項目,然後添加以下依賴項到您的pom。xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Gradle等效是'依賴關係'編譯組:'javax.servlet',名稱:'servlet-api',版本:'2.4'}' – MarkHu 2016-12-15 01:47:09
仍然不適用於我 – 2017-04-25 01:23:26
這適用於我,非常感謝 – 2018-01-09 09:45:47
這就是我發現的。在我的環境變量中添加/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) 或一個可以重新啓動計算機它適用於當前用戶。
這正是解決了這個問題對我來說:
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
真實的,但在未來考慮使用Maven來解決這類問題你 – Kris 2012-02-08 12:44:15
或者只是像Eclipse的IDE。不過,我建議繼續深入學習,直到你幾乎可以夢想成真。否則,很難理解IDE如何在封面下工作。 – BalusC 2012-02-08 12:46:00
感謝BalusC。它解決了這個問題。 – Karadous 2012-02-08 12:55:25