Tôi muốn phát triển với Servlets trong Eclipse, nhưng nó nói rằng gói javax.servlet
không thể được giải quyết. Làm cách nào để thêm javax.servlet
gói vào dự án Eclipse của tôi?
Tôi muốn phát triển với Servlets trong Eclipse, nhưng nó nói rằng gói javax.servlet
không thể được giải quyết. Làm cách nào để thêm javax.servlet
gói vào dự án Eclipse của tôi?
Câu trả lời:
Đảm bảo rằng bạn đang sử dụng ít nhất IDE Eclipse cho các nhà phát triển Java dành cho doanh nghiệp (với Enterprise ). Nó chứa các công cụ phát triển để tạo các dự án web động và dễ dàng tích hợp các bộ điều khiển dịch vụ (những công cụ này là một phần của Nền tảng công cụ web, WTP). Trong trường hợp bạn đã có IDE Eclipse cho Java (không có Enterprise) và đã cài đặt thủ công một số plugin có liên quan, thì rất có thể nó đã không được thực hiện đúng cách. Bạn muốn dọn rác tốt nhất và lấy IDE Eclipse thực sự cho Java doanh nghiệp.
Bạn cũng cần đảm bảo rằng bạn đã cài đặt một trình điều khiển dịch vụ trên máy của mình, nó thực hiện ít nhất phiên bản API của Servlet giống như trình phục vụ trong môi trường sản xuất, ví dụ như Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly , v.v. tải tập tin ZIP và giải nén nó là đủ. Trong trường hợp Tomcat, không tải xuống định dạng EXE, chỉ dành cho môi trường sản xuất dựa trên Windows. Xem thêm áo Một số cổng (8005, 8080, 8009) được yêu cầu bởi Tomcat Server tại localhost đã được sử dụng .
Một servletcontainer là một triển khai cụ thể của API Servlet. Lưu ý rằng tải xuống Java EE SDK tại Oracle.com về cơ bản có chứa GlassFish. Vì vậy, nếu bạn tình cờ đã tải xuống Java EE SDK, thì về cơ bản bạn đã có GlassFish. Cũng lưu ý rằng ví dụ GlassFish và JBoss AS / WildFly là nhiều hơn chỉ là một servletcontainer, họ cũng hỗ trợ JSF, EJB, JPA và tất cả fanciness Java EE khác. Xem thêm áo chính xác Java EE là gì?
Sau khi đã cài đặt cả Eclipse cho Enterprise Java và một trình điều khiển dịch vụ trên máy của bạn, hãy thực hiện các bước sau trong Eclipse:
Tích hợp trình điều khiển servlet trong Eclipse
a. Xem qua máy chủ
Chọn phiên bản và phiên bản servletcontainer thích hợp và đi qua trình hướng dẫn.
b. Hoặc, thông qua các tùy chọn Eclipse
Liên kết máy chủ với dự án
a. Trong dự án mới
Trong trình hướng dẫn, đặt Target Runtime cho máy chủ tích hợp.
b. Hoặc, trong dự án hiện có
Trong phần Runtimes được nhắm mục tiêu , chọn máy chủ tích hợp.
Dù bằng cách nào, Eclipse sau đó sẽ tự động đưa các thư viện của người phục vụ trong đường dẫn xây dựng. Bằng cách này, bạn sẽ có thể nhập và sử dụng API Servlet.
Trong mọi trường hợp, bạn không cần phải loay hoay trong thuộc tính Build Path của dự án. Bạn nên trên hết là không bao giờ bằng tay copy / download / di chuyển / bao gồm các cá nhân servletcontainer cụ thể các thư viện thích servlet-api.jar
, jsp-api.jar
, el-api.jar
, j2ee.jar
, javaee.jar
, vv Nó sẽ chỉ dẫn đến tính di động trong tương lai, khả năng tương thích, classpath và bảo trì khó khăn, bởi vì webapp của bạn sẽ không hoạt động khi nó được triển khai cho một bộ điều khiển dịch vụ của một phiên bản / phiên bản khác với nơi mà các thư viện ban đầu được lấy từ đó.
Trong trường hợp bạn đang sử dụng Maven, bạn cần chắc chắn rằng các thư viện dành riêng cho người phục vụ đã được cung cấp bởi thời gian chạy đích được đánh dấu là <scope>provided</scope>
.
Dưới đây là một số trường hợp ngoại lệ điển hình mà bạn có thể nhận được khi bạn xả rác /WEB-INF/lib
hoặc thậm chí /JRE/lib
, /JRE/lib/ext
, vv với các thư viện servletcontainer cụ thể trong một nỗ lực bất cẩn để sửa chữa các lỗi biên dịch:
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
vv
maven-archetype-webapp
không bao gồm JAR servlet-api như một phụ thuộc? Dự án có một index.jsp với lỗi biên dịch. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse)
servlet-api
phụ thuộc @arun được cung cấp bởi các môi trường thời gian chạy Servlet như Tomcat, Wildfly, Glassfish, v.v.,. Đừng bao giờ đưa nó vào như một phần của ứng dụng của bạn, vì có khả năng nó sẽ đụng độ với môi trường.
Chuyển đến các thuộc tính của dự án của bạn (với Alt+ Enterhoặc nhấp chuột phải)
kiểm tra Apache Tomcat v7.0 trong Targeted Runtime và nó hoạt động.
The import javax.servlet cannot be resolved
.
Một chút khác biệt từ Hari:
Nhấp chuột phải vào dự án ---> Thuộc tính ---> Đường dẫn xây dựng Java ---> Thêm thư viện ... ---> Thời gian chạy máy chủ ---> Tomcat Apache ----> Kết thúc.
Bao gồm servlet-api.jar từ thư mục lib máy chủ của bạn.
Làm bước này
Thêm phụ thuộc javax.servlet trong pom.xml. Vấn đề của bạn sẽ được giải quyết.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Khắc phục nhanh - Điều này hoạt động trong Eclipse - Nhấp chuột phải vào dự án -> Thuộc tính -> Đường dẫn xây dựng Java (Tab) -> Thêm JAR bên ngoài -> xác định vị trí triển khai api jar của servlet (nếu Tomcat - tên là servlet-api.jar) -> nhấn OK Đó là nó !!
servlet-api.jar
, jsp-api.jar
, el-api.ja
r, j2ee.jar
, javaee.jar
, vv Nó sẽ chỉ dẫn đến tính di động trong tương lai, khả năng tương thích, classpath, phiền hà bảo trì.
bạn có thể chỉ cần sao chép servlet-api.jar
và sao chép các tệp jar đó vào thư mục lib, trong WEB-INF. sau đó chỉ cần dọn dẹp và xây dựng dự án của bạn, lỗi của bạn sẽ được giải quyết.
**OR**
bạn có thể trực tiếp thêm tệp jar vào thư viện bằng cách sử dụng các bước sau.
servlet-api.jar
tập tin của bạn .servlet-api.jar
, jsp-api.jar
, javaee.jar
, vv Nó sẽ chỉ dẫn đến tính di động trong tương lai, khả năng tương thích, classpath và bảo trì khó khăn.
Tôi biết đây là một bài viết cũ. Tuy nhiên, tôi đã quan sát một trường hợp khác trong đó trong dự án đã có Tomcat được thêm vào nhưng chúng tôi vẫn gặp lỗi này. Đã làm điều này để giải quyết rằng:
Alt + Enter
Facets Project
Bên phải, bên cạnh chi tiết, là một tab khác "Runtimes". Máy chủ tomcat được cài đặt sẽ được liệt kê ở đó. Chọn nó
Lưu cấu hình và làm!
Hy vọng điều này sẽ giúp được ai đó.
Từ wikipedia .
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>");
}
}
Tất nhiên, điều này chỉ hoạt động nếu bạn đã thêm servlet-api.jar
đường dẫn xây dựng Eclipse. Thông thường, máy chủ ứng dụng của bạn (ví dụ Tomcat ) sẽ có tệp jar đúng.
Đối với các dự án maven thêm phụ thuộc sau:
<!-- 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>
Đối với các dự án lớp:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
hoặc tải về javax.servlet.jar
và thêm vào dự án của bạn.
Tôi đã nhận được một ngoại lệ con trỏ null trong quá trình tạo dự án liên quan đến "Mô-đun Web động".
Để biên dịch dự án (nghĩa là javax.servlet
để nhập thành công) tôi đã phải truy cập vào Thuộc tính của dự án , chọn Facets Project trong thanh bên, đánh dấu Mô-đun Web động và bấm Áp dụng .
Đáng ngạc nhiên, lần này khía cạnh "Mô-đun Web động" được cài đặt chính xác và quá trình nhập bắt đầu hoạt động.
Trong trường hợp của tôi, khi tôi đến Targetted Runtimes , màn hình, Tomcat 7 không được liệt kê (bị vô hiệu hóa) mặc dù đã được cài đặt.
Để khắc phục, tôi phải truy cập Preferences-> Server-> Runtime Envirments sau đó gỡ cài đặt và cài đặt lại Tomcat 7.
Nhiều người trong chúng ta phát triển trong Eclipse thông qua một dự án Maven. Nếu vậy, bạn có thể bao gồm các phụ thuộc Tomcat trong Maven thông qua tomcat-servlet-api
và tomcat-jsp-api
các tệp. Một tồn tại cho mỗi phiên bản của Tomcat. Thông thường thêm những thứ này với phạm vi provided
vào POM của bạn là đủ. Điều này sẽ giữ cho bản dựng của bạn di động hơn.
Nếu bạn nâng cấp Tomcat trong tương lai, bạn chỉ cần cập nhật phiên bản của những chiếc lọ này.
Trên hết, bạn không bao giờ nên sao chép / tải xuống / di chuyển / bao gồm các thư viện dành riêng cho người phục vụ riêng lẻ như servlet-api.jar
@BalusC,
Tôi thích sử dụng các lớp chính xác mà ứng dụng của tôi sẽ sử dụng thay vì một lớp do Eclipse cung cấp (khi tôi cảm thấy như một nhà phát triển hoang tưởng).
Một giải pháp khác là sử dụng "Cấu hình đường dẫn xây dựng" của Eclipse> Thư viện> Thêm các tệp bên ngoài và thêm api của servlet vào bất cứ thứ gì mà Container mà người dùng chọn sử dụng.
Và theo dõi giải pháp của @kaustav datta khi sử dụng kiến để xây dựng - có một thuộc tính như tomcat.home hoặc weblogic.home. Tuy nhiên, nó đưa ra một ràng buộc khác là nhà phát triển phải cài đặt Weblogic trên máy cục bộ của mình nếu weblogic đang được sử dụng! Bất kỳ giải pháp sạch hơn?
Đây cũng có thể là lý do. tôi đã đưa ra sau đây 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>
Vấn đề chưa được giải quyết là do loại trừ spring-boot-starter-tomcat
. Chỉ cần loại bỏ <exclusions>...</exclusions>
sự phụ thuộc, nó sẽ giải quyết vấn đề, nhưng hãy đảm bảo rằng việc này cũng sẽ loại trừ máy chủ tomcat được nhúng.
Nếu bạn cần máy chủ tomcat nhúng quá, bạn có thể thêm phụ thuộc tương tự với compile scope
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>