ฉันต้องการพัฒนาด้วย Servlets ใน Eclipse แต่มันบอกว่าjavax.servlet
ไม่สามารถแก้ไขแพ็คเกจได้ ฉันจะเพิ่มjavax.servlet
แพ็คเกจในโปรเจ็กต์ Eclipse ของฉันได้อย่างไร
ฉันต้องการพัฒนาด้วย Servlets ใน Eclipse แต่มันบอกว่าjavax.servlet
ไม่สามารถแก้ไขแพ็คเกจได้ ฉันจะเพิ่มjavax.servlet
แพ็คเกจในโปรเจ็กต์ Eclipse ของฉันได้อย่างไร
คำตอบ:
ตรวจสอบให้แน่ใจว่าคุณใช้Eclipse IDEอย่างน้อยสำหรับนักพัฒนาEnterprise Java (กับEnterprise ) ประกอบด้วยเครื่องมือในการพัฒนาเพื่อสร้างโครงการเว็บแบบไดนามิกและรวม servletcontainers ได้อย่างง่ายดาย (เครื่องมือเหล่านี้เป็นส่วนหนึ่งของ Web Tools Platform, WTP) ในกรณีที่คุณมี Eclipse IDE สำหรับ Java (ไม่มี Enterprise) อยู่แล้วและติดตั้งปลั๊กอินที่เกี่ยวข้องด้วยตนเองมีโอกาสที่จะทำไม่ถูกต้อง คุณควรทิ้งมันให้ดีที่สุดและคว้า Eclipse IDE จริงสำหรับ Enterprise Java one
คุณต้องตรวจสอบให้แน่ใจว่าคุณมี servletcontainer ที่ติดตั้งอยู่ในเครื่องของคุณแล้วซึ่งใช้อย่างน้อย Servlet API เวอร์ชันเดียวกับ servletcontainer ในสภาพแวดล้อมการผลิตเช่นApache Tomcat , Oracle GlassFish , JBoss AS / WildFlyเป็นต้นโดยปกติแล้วเพียง ดาวน์โหลดไฟล์ ZIP และแตกไฟล์ก็เพียงพอแล้ว ในกรณีของ Tomcat ไม่ได้ดาวน์โหลดรูปแบบ EXE ที่เป็นเพียงสำหรับ Windows ตามสภาพแวดล้อมการผลิต ดูเพิ่มเติมอ่าวหลายพอร์ต (8005, 8080, 8009) ที่จำเป็นโดย Tomcat เซิร์ฟเวอร์ที่ localhost มีอยู่แล้วในการใช้งาน
servletcontainer คือการนำ Servlet API มาใช้อย่างเป็นรูปธรรม โปรดทราบว่าการดาวน์โหลดJava EE SDKที่ Oracle.com โดยทั่วไปจะมี GlassFish ดังนั้นหากคุณเคยดาวน์โหลด Java EE SDK แล้วแสดงว่าคุณมี GlassFish อยู่แล้ว นอกจากนี้ยังทราบว่าตัวอย่างเช่น GlassFish และ JBoss AS / WildFly มีมากขึ้นกว่าเพียงแค่ servletcontainer ที่พวกเขายังสนับสนุน JSF, EJB, JPA และอื่น ๆ ทั้งหมด Java EE ความพอใจ ดูเพิ่มเติมที่ Java EE คืออะไร?
เมื่อติดตั้งทั้ง Eclipse for Enterprise Java และ servletcontainer บนเครื่องของคุณแล้วให้ทำตามขั้นตอนต่อไปนี้ใน Eclipse:
รวม servletcontainer ใน Eclipse
ก. ผ่านมุมมองเซิร์ฟเวอร์
เปิดมุมมองเซิร์ฟเวอร์ในกล่องด้านล่าง
คลิ๊กขวาและมีการเลือกใหม่> เซิร์ฟเวอร์
เลือกยี่ห้อและเวอร์ชันของ servletcontainer ที่เหมาะสมและดำเนินการตามวิซาร์ด
ข. หรือผ่านการตั้งค่า Eclipse
เชื่อมโยงเซิร์ฟเวอร์กับโปรเจ็กต์
ก. ในโครงการใหม่
เปิดProject Navigator / Explorerทางด้านซ้ายมือ
คลิ๊กขวาและมีการเลือกใหม่> โครงการและจากนั้นในเมนูเว็บ> โครงการเว็บแบบไดนามิก
ในวิซาร์ดตั้งค่ารันไทม์เป้าหมายเป็นเซิร์ฟเวอร์รวม
ข. หรือในโครงการที่มีอยู่
ไม่ว่าจะด้วยวิธีใด Eclipse จะนำไลบรารีของ servletcontainer ในพา ธ การสร้างโดยอัตโนมัติ ด้วยวิธีนี้คุณจะสามารถนำเข้าและใช้ Servlet API
ไม่ว่าในกรณีใดคุณไม่จำเป็นต้องเล่นซอในคุณสมบัติBuild Pathของโครงการ คุณควรข้างต้นทั้งหมดไม่เคยคัดลอก / download / ย้าย / รวมถึงบุคคล servletcontainer เฉพาะห้องสมุดชอบservlet-api.jar
, jsp-api.jar
, el-api.jar
, j2ee.jar
, javaee.jar
ฯลฯ มันจะนำไปสู่การพกพาในอนาคตการทำงานร่วมกันปัญหา classpath และการบำรุงรักษาเพราะ webapp ของคุณจะไม่ทำงานเมื่อมัน ปรับใช้กับ servletcontainer ของยี่ห้อ / เวอร์ชันที่แตกต่างจากที่ที่เคยได้รับไลบรารีเหล่านั้นมา
ในกรณีที่คุณกำลังใช้ Maven, คุณต้องให้แน่ใจจริงๆหรือว่าห้องสมุด servletcontainer <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"/>
etc
maven-archetype-webapp
ไม่รวมถึง servlet-api JAR เป็นการอ้างอิง โครงการมี index.jsp ที่มีข้อผิดพลาดในการคอมไพล์ (รหัส Eclipse Luna Build: 20140612-0600, JDK 8, M2eclipse)
servlet-api
dependencies จัดทำโดยสภาพแวดล้อมรันไทม์ของ Servlet เช่น Tomcat, Wildfly, Glassfish เป็นต้น อย่ารวมไว้เป็นส่วนหนึ่งของแอปของคุณเนื่องจากมีความเป็นไปได้ที่ดีที่จะปะทะกับสภาพแวดล้อม
ไปที่คุณสมบัติของโครงการของคุณ (ด้วยAlt+ Enterหรือคลิกขวา)
ตรวจสอบApache Tomcat v7.0ภายใต้Targeted Runtimeและใช้งานได้
The import javax.servlet cannot be resolved
ไม่ได้ช่วยให้ฉันเพื่อแก้ปัญหาด้วย
ความแตกต่างเล็กน้อยจาก Hari:
คลิกขวาที่ project ---> Properties ---> Java Build Path ---> Add Library ... ---> Server Runtime ---> Apache Tomcat ----> Finish
รวม servlet-api.jar จากโฟลเดอร์ lib ของเซิร์ฟเวอร์ของคุณ
ทำตามขั้นตอนนี้
เพิ่มการพึ่งพา javax.servlet ใน pom.xml ปัญหาของคุณจะได้รับการแก้ไข
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Quick Fix- สิ่งนี้ใช้ได้ใน Eclipse - คลิกขวาที่โปรเจ็กต์ -> Properties -> Java Build Path (Tab) -> Add External JARs -> ค้นหาการใช้งาน servlet api jar (ถ้า Tomcat - ชื่อ servlet-api.jar) -> คลิกตกลง แค่นั้นแหละ !!
servlet-api.jar
, jsp-api.jar
, el-api.ja
R, j2ee.jar
, javaee.jar
ฯลฯ มันเท่านั้นจะนำไปสู่การพกพาในอนาคตการทำงานร่วมกัน classpath และปัญหาการบำรุงรักษา
คุณสามารถคัดลอกservlet-api.jar
และคัดลอกไฟล์ jar นั้นไปยังโฟลเดอร์ lib ซึ่งอยู่ใน WEB-INF จากนั้นทำความสะอาดและสร้างโครงการของคุณข้อผิดพลาดของคุณจะได้รับการแก้ไข
**OR**
คุณสามารถเพิ่มไฟล์ jar ลงในไลบรารีได้โดยตรงโดยใช้ขั้นตอนต่อไปนี้
servlet-api.jar
ไฟล์ของคุณservlet-api.jar
, jsp-api.jar
, javaee.jar
ฯลฯ มันเท่านั้นจะนำไปสู่การพกพาในอนาคตการทำงานร่วมกัน classpath และปัญหาการบำรุงรักษา
ฉันรู้ว่านี่เป็นโพสต์เก่า อย่างไรก็ตามฉันสังเกตเห็นอินสแตนซ์อื่นที่ในโครงการได้เพิ่ม Tomcat แล้ว แต่เรายังคงได้รับข้อผิดพลาดนี้ เพื่อแก้ปัญหานี้:
Alt + Enter
Project Facets
ทางด้านขวาถัดจากรายละเอียดคือแท็บอื่น "Runtimes" เซิร์ฟเวอร์ tomcat ที่ติดตั้งจะแสดงอยู่ที่นั่น เลือกมัน
บันทึกการกำหนดค่าและเสร็จสิ้น!
หวังว่านี่จะช่วยใครบางคนได้
สำหรับโครงการ 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
และเพิ่มลงในโครงการของคุณ
จาก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>");
}
}
แน่นอนว่าจะใช้งานได้ก็ต่อเมื่อคุณได้เพิ่มservlet-api.jar
พา ธ ในการสร้าง Eclipse โดยทั่วไปแอปพลิเคชันเซิร์ฟเวอร์ของคุณ (เช่นTomcat ) จะมีไฟล์ jar ที่ถูกต้อง
ฉันได้รับข้อยกเว้นของตัวชี้ null ระหว่างการสร้างโปรเจ็กต์ที่เกี่ยวข้องกับ "Dynamic Web Module"
เพื่อให้ได้โครงการที่จะรวบรวม (ซึ่งก็คือการjavax.servlet
ที่จะนำเข้าเรียบร้อยแล้ว) ผมต้องไปที่โครงการอสังหาริมทรัพย์เลือกแง่มุมโครงการในแถบด้านข้าง, ติ๊กเว็บแบบไดนามิกโมดูลและคลิกสมัคร
น่าแปลกที่คราวนี้ "โมดูลเว็บแบบไดนามิก" ติดตั้งอย่างถูกต้องและการนำเข้าเริ่มทำงาน
ในกรณีของฉันเมื่อฉันไปที่Targetted Runtimesหน้าจอ Tomcat 7 ไม่อยู่ในรายการ (ปิดใช้งาน) แม้ว่าจะติดตั้งแล้วก็ตาม
ในการแก้ไขฉันต้องไปที่การตั้งค่า -> เซิร์ฟเวอร์ -> สภาพแวดล้อมรันไทม์จากนั้นถอนการติดตั้งและติดตั้ง Tomcat 7 ใหม่
พวกเราหลายคนพัฒนาใน Eclipse ผ่านโครงการ Maven ในกรณีนี้คุณสามารถรวมการอ้างอิง Tomcat ใน Maven ผ่านทางtomcat-servlet-api
และtomcat-jsp-api
ขวด มีอยู่สำหรับ Tomcat แต่ละเวอร์ชัน โดยปกติแล้วการเพิ่มสิ่งเหล่านี้ด้วยขอบเขตprovided
ให้กับ POM ของคุณก็เพียงพอแล้ว สิ่งนี้จะทำให้งานสร้างของคุณพกพาได้มากขึ้น
หากคุณอัปเกรด Tomcat ในอนาคตคุณเพียงแค่อัปเดตเวอร์ชันของขวดเหล่านี้ด้วย
คุณไม่ควรคัดลอก / ดาวน์โหลด / ย้าย / รวมไลบรารีเฉพาะของ servletcontainer ด้วยตนเองเช่น servlet-api.jar
@BalusC,
ฉันต้องการใช้คลาสที่แน่นอนที่แอปพลิเคชันของฉันจะใช้มากกว่าคลาสที่ Eclipse จัดเตรียมให้ (เมื่อฉันรู้สึกเหมือนเป็นนักพัฒนาที่หวาดระแวง)
อีกวิธีหนึ่งคือใช้ Eclipse "Configure Build Path"> Libraries> Add External Jars และเพิ่ม servlet api ของ Container ที่เลือกใช้
และทำตามวิธีแก้ปัญหาของ @kaustav datta เมื่อใช้มดในการสร้าง - มีคุณสมบัติเช่น tomcat.home หรือ weblogic.home อย่างไรก็ตามมันแนะนำข้อ จำกัด อีกประการหนึ่งที่นักพัฒนาต้องติดตั้ง 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 ที่ฝังไว้ด้วย
หากคุณต้องการเซิร์ฟเวอร์ tomcat ในตัวคุณสามารถเพิ่มการอ้างอิงเดียวกันกับcompile scope
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>