developer tip

컴파일 오류 : 패키지 javax.servlet이 없습니다.

optionbox 2020. 12. 4. 08:08
반응형

컴파일 오류 : 패키지 javax.servlet이 없습니다.


javax.servlet. * 및 javax.servlet.http. *를 가져 오는 패키지가 있습니다. 명령 프롬프트에서 컴파일하려고하면 오류가 발생합니다.

패키지 javax.servlet이 없습니다.

JDK 1.7.0과 Tomcat 6.0을 사용합니다.


/lib/servlet-api.jar컴파일 시간 클래스 경로에 Tomcat의 파일 경로를 추가해야합니다 .

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

클래스 경로는 Java가 가져온 종속성을 찾아야하는 곳입니다. 그렇지 않으면 .위의 예에서와 같이 포함 된 현재 폴더가 기본값 입니다. ;윈도우 경로 분리이고; Unix 기반 OS를 사용 :하는 경우 대신 사용해야 합니다.


maven 프로젝트로 작업하는 경우 pom.xml에 다음 종속성을 추가하십시오.

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

JSP 또는 Servlet입니까?

글쎄,이 두 패키지는 실제로 java.io처럼 Java에 내장되어 있지 않습니다. 대신 서블릿 가능 웹 서버 (예 : Tomcat)와 함께 제공됩니다. 따라서 Java 컴파일러가 서블릿을 컴파일하기 전에이 두 패키지에서 클래스를 찾을 위치를 알려야합니다.

필요한 클래스는 일반적으로 servlet.jar라는 파일에 저장됩니다. 이 파일의 정확한 위치는 사용하는 특정 웹 서버 소프트웨어에 따라 다르지만 Tomcat의 경우 기본 Tomcat 설치 디렉토리 (예 : d : \ Program Files \ Apache Group \ jakarta-)의 lib 하위 디렉토리에서 찾을 수 있습니다. tomcat-3.2.3 \ lib \ servlet.jar). Java 컴파일러가 Servlet을 컴파일 할 수 있으려면이 파일을 Java 클래스 경로에 추가해야합니다. 기본적으로 Java는 현재 디렉토리 ( ".")에서만 클래스를 찾습니다. 따라서 "." 기본 클래스 경로입니다. Windows에서는 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


Linux 환경에서 소프트 링크는 분명히 작동하지 않습니다. 실제 경로를 사용해야합니다. 예를 들어 내 컴퓨터에는 소프트 링크가 /usr/share/tomacat7/lib/servlet-api.jar있으며 이것을 클래스 경로 인수로 사용하면 동일한 오류로 컴파일이 실패했습니다. 대신 /usr/share/java/tomcat-servlet-api-3.0.jar소프트 링크가 가리키는 파일 을 사용해야 했습니다.


이것이 나를 위해 문제를 해결 한 것입니다.

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

YOUR_INSTILLATION_PATH \ tomcat \ lib \ servlet-api.jar 위치에서 " servlet-api.jar " 파일을 복사 하여 Java 디렉토리 YOUR_INSTILLATION_PATH \ Java \ jdk1.8.0_121 \ jre \ lib \ ext에 붙여 넣으십시오.

작동합니다 (테스트 됨).


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;

이것이 내가 찾은 것입니다. 내 환경 변수에 CLASSPATH로 /usr/local/apache-tomcat-7.0.64/lib/servlet-api.jar 추가. OS는 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) 컴퓨터를 다시 시작할 수 있으며 현재 사용자에 대해 작동합니다.


제안 된 솔루션을 시도한 후에도 Java 경로의 인스턴스가 많이 입력되어 문제가 해결되지 않았습니다.

  1. "Path, JAVA_HOME, JRE_HOME"에서 모든 Java 관련 경로 (다른 버전의 java)를 제거하고 새로 만들었습니다.

  2. i have set (path may changes as per different installation)
    a. JAVA_HOME as C:\Program Files\Java\jdk1.8.0_191
    b. JRE_HOME as C:\Program Files\Java\jdk1.8.0_191\jre\lib
    c. add binary file path in path: C:\Program Files\Java\jdk1.8.0_191\bin
    d. CLASSPATH as C:\apache-tomcat-7.0.93\lib

  3. never try in the same command prompt if its already open while doing changes/creting system/user variables. close it and open new one.

Reference Image: enter image description here


The possible solution (Tested on ubuntu)

  1. Open Terminal type geany .bashrc
  2. Go to the top and paste this
    export CLASSPATH=$CLASSPATH:/web/apache-tomcat-8.5.39/lib/servlet-api.jar
  3. Now save and close
  4. Try running the program now.

참고URL : https://stackoverflow.com/questions/9193228/compile-error-package-javax-servlet-does-not-exist

반응형