답변:
Enterprise Java 개발자 ( Enterprise 와 함께) 용 Eclipse IDE 이상을 사용하고 있는지 확인하십시오 . 여기에는 동적 웹 프로젝트를 작성하고 서블릿 컨테이너를 쉽게 통합 할 수있는 개발 도구가 포함되어 있습니다 (이 도구는 WTP 웹 도구 플랫폼의 일부 임). 이미 Java 용 Eclipse IDE (Enterprise 제외)가 있고 일부 관련 플러그인을 수동으로 설치 한 경우 제대로 수행되지 않았을 가능성이 있습니다. 그것을 버리고 가장 좋은 방법은 Enterprise Java 용 실제 Eclipse IDE를 사용하는 것입니다.
또한 프로덕션 환경에서 최소한 서블릿 컨테이너와 동일한 서블릿 API 버전 (예 : Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly 등) 을 구현하는 서블릿 컨테이너가 시스템에 이미 설치되어 있는지 확인해야합니다 . ZIP 파일을 다운로드하고 압축을 풀면 충분합니다. Tomcat의 경우 EXE 형식을 다운로드 마십시오 . 이는 Windows 기반 프로덕션 환경 전용입니다. ao localhost의 Tomcat Server에 필요한 여러 포트 (8005, 8080, 8009)가 이미 사용 중 입니다.
서블릿 컨테이너는 서블릿 API의 구체적인 구현입니다. 점을 유의 자바 EE SDK의 Oracle.com에서 다운로드가 기본적으로 글래스 피쉬가 포함되어 있습니다. 따라서 Java EE SDK를 이미 다운로드 한 경우 기본적으로 GlassFish가 있습니다. 또한 GlassFish 및 JBoss AS / WildFly는 서블릿 컨테이너 이상의 기능을 제공하며 JSF, EJB, JPA 및 기타 모든 Java EE 성능도 지원합니다. ao Java EE 란 무엇입니까?
시스템에 Enterprise Java 용 Eclipse와 서블릿 컨테이너를 모두 설치했으면 Eclipse에서 다음 단계를 수행하십시오.
Eclipse에서 서블릿 컨테이너 통합
ㅏ. 서버보기를 통해
적절한 서블릿 컨테이너 제조업체 및 버전을 선택하고 마법사를 안내하십시오.
비. 또는 Eclipse 환경 설정을 통해
서버와 프로젝트 연결
ㅏ. 새 프로젝트에서
마법사에서 대상 런타임 을 통합 서버로 설정하십시오 .
비. 또는 기존 프로젝트에서
어느 쪽이든, Eclipse는 자동으로 빌드 경로에서 서블릿 컨테이너의 라이브러리를 가져옵니다. 이 방법으로 서블릿 API를 가져오고 사용할 수 있습니다.
어떤 경우 든 프로젝트 의 빌드 경로 특성 을 피할 필요가 없습니다 . 당신은 위의 모든해야 결코 수동으로 복사 / 다운로드 / 이동이 / 라이브러리이 좋아하는 개별 servletcontainer 별을 포함 servlet-api.jar
, jsp-api.jar
, el-api.jar
, j2ee.jar
,javaee.jar
당신의 웹 애플리케이션은 그렇지 않은 일입니다 것입니다 경우 때문에, 그것은 단지 미래의 이식성, 호환성, 클래스 경로 및 유지 보수 문제로 이어질 것 등 해당 라이브러리를 원래 얻은 위치와 다른 make / version의 서블릿 컨테이너에 배포했습니다.
Maven을 사용하는 경우 대상 런타임에서 이미 제공 한 서블릿 컨테이너 특정 라이브러리가로 표시되어 있는지 확인해야합니다 <scope>provided</scope>
.
여기 때 당신에게 쓰레기 당신이 얻을 수있는 몇 가지 일반적인 예외 인 /WEB-INF/lib
또는 /JRE/lib
, /JRE/lib/ext
등 컴파일 오류를 수정 부주의 시도에서 servletcontainer 특정 라이브러리를 :
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
등
maven-archetype-webapp
서블릿 -api JAR을 의존성으로 포함하지 않는 아키 타입으로 maven 프로젝트가 생성 됩니까? 프로젝트에 컴파일 오류가있는 index.jsp가 있습니다. (이클립스 루나 빌드 ID : 20140612-0600, JDK 8, m2eclipse에)
servlet-api
종속성은 Tomcat, Wildfly, Glassfish 등과 같은 Servlet 런타임 환경에서 제공됩니다. 환경과 충돌 할 가능성이 높으므로 앱에 포함시키지 마십시오.
프로젝트의 속성 으로 이동 하십시오 ( Alt+ Enter또는 마우스 클릭으로)
확인 아파치 톰캣 7.0 에서 대상 런타임 과 작동합니다.
The import javax.servlet cannot be resolved
.
Hari와의 약간의 차이 :
프로젝트 ---> 특성 ---> Java 빌드 경로 ---> 라이브러리 추가 ... ---> 서버 런타임 ---> Apache Tomcat ----> 완료를 마우스 오른쪽 단추로 클릭하십시오.
서버 lib 폴더에서 servlet-api.jar을 포함하십시오.
이 단계를 수행
빠른 수정-Eclipse에서 작동했습니다-프로젝트-> 속성-> Java 빌드 경로 (Tab)-> 외부 JAR 추가-> 서블릿 API jar 구현 찾기 (Tomcat-이름이 servlet-api.jar 인 경우)-> 확인을 클릭하십시오. 그게 다야 !!
servlet-api.jar
, jsp-api.jar
, el-api.ja
R, j2ee.jar
, javaee.jar
, 등 그것은 단지 미래의 이식성, 호환성, 클래스 경로 및 유지 보수의 문제로 이어질 것입니다.
당신은 단순히 복사 할 수 있습니다 servlet-api.jar
및 WEB-INF에 lib 디렉토리 폴더에 그 jar 파일을 복사합니다. 그런 다음 프로젝트를 정리하고 빌드하면 오류가 해결됩니다.
**OR**
다음 단계를 사용하여 jar 파일을 라이브러리에 직접 추가 할 수 있습니다.
servlet-api.jar
파일 경로를 지정하십시오 .servlet-api.jar
, jsp-api.jar
, javaee.jar
, 등 그것은 단지 미래의 이식성, 호환성, 클래스 경로 및 유지 보수 문제로 이어질 것입니다.
에서 위키 피 디아 .
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">\n" +
"<html>\n" +
"<head><title>Hello WWW</title></head>\n" +
"<body>\n" +
"<h1>Hello WWW</h1>\n" +
"</body></html>");
}
}
물론 이것은 servlet-api.jar
Eclipse 빌드 경로에 추가 한 경우에만 작동 합니다. 일반적으로 애플리케이션 서버 (예 : Tomcat )에 올바른 jar 파일이 있습니다.
maven 프로젝트의 경우 다음 종속성을 추가하십시오.
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
gradle 프로젝트의 경우 :
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
또는 javax.servlet.jar
프로젝트에 다운로드 하여 추가하십시오.
servlet-api.jar와 같은 개별 서블릿 컨테이너 특정 라이브러리를 수동으로 복사 / 다운로드 / 이동 / 포함하지 않아야합니다.
@BalusC,
Eclipse에서 제공하는 클래스가 아닌 응용 프로그램에서 사용할 정확한 클래스를 사용하는 것을 선호합니다 (편집증 개발자처럼 느낄 때).
또 다른 해결책은 Eclipse "빌드 경로 구성"> 라이브러리> 외부 jar 추가를 사용하고 컨테이너가 사용하도록 선택한 모든 서블릿 API를 추가하는 것입니다.
antcat을 사용하여 빌드 할 때 @kaustav datta의 솔루션을 따르십시오-tomcat.home 또는 weblogic.home과 같은 속성이 있습니다. 그러나 weblogic을 사용하는 경우 개발자가 로컬 시스템에 Weblogic을 설치해야한다는 또 다른 제약이 있습니다! 다른 클리너 솔루션?
이 또한 이유가 될 수 있습니다. 나는 다음을 생각해 냈습니다 pom.xml
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
해결되지 않은 문제는의 제외로 인해 발생했습니다 spring-boot-starter-tomcat
. <exclusions>...</exclusions>
의존성을 제거 하면 문제가 해결되지만 확인하십시오. 또한 서버 바람둥이 내장 제외됩니다 이렇게.
임베디드 Tomcat 서버가 필요한 경우에도 동일한 종속성을 추가 할 수 있습니다 compile scope
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>