วิธีการเปลี่ยนรูทบริบทของโปรเจ็กต์เว็บแบบไดนามิกใน Eclipse


205

ฉันพัฒนาโครงการเว็บแบบไดนามิกใน Eclipse ฉันสามารถเข้าถึงแอพผ่านเบราว์เซอร์ของฉันโดยใช้ URL ต่อไปนี้:

http://localhost:8080/MyDynamicWebApp

ฉันต้องการเปลี่ยน URL การเข้าถึงเป็น:

http://localhost:8080/app

หากต้องการทำเช่นนั้นฉันเปลี่ยนรูทบริบทจากโปรเจ็กต์ "Properties | การตั้งค่าโปรเจ็กต์เว็บ | รูทบริบท" อย่างไรก็ตามเว็บแอปยังคงมี URL การเข้าถึงเดียวกัน ฉันได้ติดตั้งแอปพลิเคชั่นใหม่บน Tomcat และเริ่มต้น Tomcat ใหม่ แต่ URL การเข้าใช้นั้นเหมือนกันกับก่อนหน้านี้

ฉันพบว่าไม่มีserver.xmlไฟล์ที่แนบมากับWARไฟล์ โดยไม่ต้องserver.xmlไฟล์ที่แนบมาเป็นวิธีโพงระบุว่ารากบริบทของ app เว็บของฉันคือ/MyDynamicWebAppและช่วยให้ผมในการเข้าถึงแอพลิเคชันผ่านทาง URL รากบริบทนี้?

คำตอบ:


331

ฉันแน่ใจว่าคุณได้ย้ายไปแล้วในตอนนี้

บางคำตอบเหล่านี้ให้วิธีแก้ปัญหา สิ่งที่ต้องเกิดขึ้นจริงคือคุณล้างและเผยแพร่โครงการของคุณใหม่เพื่อ "เปิดใช้งาน" URI ใหม่ สิ่งนี้ทำได้โดยคลิกขวาที่เซิร์ฟเวอร์ของคุณ (ในมุมมองเซิร์ฟเวอร์) และเลือกล้าง จากนั้นคุณเริ่มต้น (หรือรีสตาร์ท) คำตอบอื่น ๆ ส่วนใหญ่ที่นี่แนะนำให้คุณทำสิ่งต่าง ๆ ที่ทำให้สำเร็จ

ไฟล์ที่กำลังเปลี่ยนแปลงคือworkspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.datคุณกำลังมีเซิร์ฟเวอร์มากกว่าหนึ่งเครื่องในเวิร์กสเปซของคุณซึ่งในกรณีนี้ไฟล์นั้นจะอยู่publishN.datในเส้นทางเดียวกัน

หวังว่านี่จะช่วยใครซักคน


ไม่แน่ใจว่าเป็นมารยาทที่เหมาะสมหรือไม่ - ฉันกำลังแก้ไขคำตอบนี้เพื่อให้ขั้นตอนที่แน่นอนสำหรับ Eclipse Indigo

  1. ในโครงการของคุณคุณสมบัติให้เลือกการตั้งค่าเว็บโครงการ

  2. เปลี่ยนบริบทรากไปยังแอป

    สกรีนช็อตของคุณสมบัติโครงการ Eclipse การตั้งค่าโครงการเว็บ

  3. เลือกหน้าต่าง> แสดงมุมมอง> เซิร์ฟเวอร์

  4. หยุดเซิร์ฟเวอร์โดยคลิกที่กล่องสี่เหลี่ยมสีแดง (คำแนะนำเครื่องมือ "หยุดเซิร์ฟเวอร์") หรือคลิกบริบทที่รายชื่อเซิร์ฟเวอร์เพื่อเลือก "หยุด"

  5. บนเซิร์ฟเวอร์ที่คุณต้องการใช้ให้คลิกบริบทเพื่อเลือก "ล้าง ... "

    ป้อนคำอธิบายรูปภาพที่นี่

  6. คลิกตกลงในกล่องโต้ตอบการยืนยันนี้

    สกรีนช็อตของไดอะล็อกที่ขอให้อัพเดตการกำหนดค่าเซิร์ฟเวอร์เพื่อให้ตรงกับรูทบริบทที่เปลี่ยนแปลง

ตอนนี้คุณสามารถเรียกใช้แอปด้วย URL "แอพ" ใหม่เช่น:

http://localhost:8080/app/

การทำสิ่งนี้นอก Eclipse บนเซิร์ฟเวอร์ที่ใช้งานจริงของคุณนั้นง่ายกว่า -> เปลี่ยนชื่อไฟล์ war ส่งออกแอป Vaadin ของคุณเป็นไฟล์ WAR ( ไฟล์> ส่งออก> เว็บ> ไฟล์ WAR ) ย้ายไฟล์ WAR ไปยังคอนเทนเนอร์เซิร์ฟเล็ตของเว็บเซิร์ฟเวอร์ของคุณเช่น Tomcat เปลี่ยนชื่อไฟล์ WAR ของคุณในกรณีนี้เพื่อapp.war เมื่อคุณเริ่มต้น servlet container ส่วนใหญ่เช่น Tomcat จะปรับใช้แอพโดยอัตโนมัติซึ่งรวมถึงการขยายไฟล์ war ไปยังโฟลเดอร์ ในกรณีนี้เราจะเห็นโฟลเดอร์ชื่อแอพ คุณควรจะไปดี ทดสอบ URL ของคุณ สำหรับโดเมนเช่น * example.com "นี่จะเป็น:

http://www.example.com/app/

โปรแกรมเมอร์ Vaadin toolkit อาจจำเป็นต้องสร้างชุดเครื่องมือของพวกเขาใหม่หากใช้โปรแกรมเสริมการแสดงผล


คำตอบที่ดี !!! คุณช่วยชีวิตฉันได้จากคำตอบอื่น ๆ ที่นี่แนะนำให้คุณทำสิ่งต่าง ๆ ให้บรรลุผลสำเร็จ
AndreaNobili

นี่คืออัจฉริยะของคำตอบนี้: ฉันไปที่หน้านี้ของฉันและไม่ได้อ่านแท็ก (ฉันกำลังสร้างเว็บไซต์ ASP.NET โดยใช้ Visual Studio) แต่วิธีการแก้ปัญหาทำงานอยู่แล้ว!
Curt

ฉันไม่มีตัวเลือกดังกล่าวและตัวเลือก "การตั้งค่าโครงการเว็บ"
IntoTheDeep

แค่บอกว่าworkspace/.metadata/.plugins/org.eclipse.wst.server.core/publish/publish.datมันเป็นไฟล์ไบนารี่ฉันไม่เข้าใจว่าทำไมคุณถึงพูดถึงมันตรงนั้นมันให้ความประทับใจว่ามันเป็นทางออกสำหรับปัญหา
aliopi

แต่ถ้าเราไม่ใช้ Eclipse .. หรือ IDE ใด ๆ .. ฉันต้องการตั้งค่ารูทพา ธ ของบริบท servlet โดยทางโปรแกรม ฉันจะทำอย่างไร ใน web.xml อาจ .. ?
Giorgi Tsiklauri

32

หลังจากเปลี่ยนรูทบริบทในคุณสมบัติโครงการคุณต้องลบเว็บแอ็พพลิเคชันของคุณออกจาก Tomcat (โดยใช้ Add and Remove ... บนเมนูบริบทของเซิร์ฟเวอร์) ปรับใช้ใหม่จากนั้นเพิ่มแอปพลิเคชันของคุณอีกครั้งและปรับใช้ใหม่ มันใช้งานได้สำหรับฉัน

หากคุณหลงคุณมีทางเลือกอื่น: เลือกเซิร์ฟเวอร์ Tomcat ในมุมมองเซิร์ฟเวอร์ ดับเบิลคลิกที่เซิร์ฟเวอร์นั้น (หรือเลือกเปิดในเมนูบริบท) นำตัวแก้ไขหลายรายการที่มีหน้าโมดูล ที่นี่คุณสามารถเปลี่ยนบริบทรูทของโมดูลของคุณ (เรียกว่า Path ในหน้านี้)


ขอบคุณ! นี้ได้เคล็ดลับสำหรับฉัน. อย่างไรก็ตามมันยังทำงานได้โดยไม่ต้องเปลี่ยนรูทบริบทในคุณสมบัติโครงการ ฉันทำอะไรบางอย่างหายไปหรือเปล่า
Chris

นอกจากนี้ยังใช้ในการทำงานกับฉันในการสร้าง Eclipse ก่อนหน้านี้ แต่ในการสร้างปัจจุบัน (Luna) เฉพาะตัวเลือกที่สะอาดตอนนี้ใช้ได้
Griknok

namasety, dhanywaada :) เมื่อฉันเริ่มเปลี่ยนบริบทของฉันมันไม่ทำงานแม้หลังจากรีสตาร์ทเซิร์ฟเวอร์และทำความสะอาด มันทำงานเฉพาะโพสต์ฉันลบโครงการและอ่านแล้ว
โยเกชซานชิฮาร์

24

หากคุณใช้ Tomcat จาก Eclipse จะไม่ใช้การกำหนดค่าจากการติดตั้ง Tomcat จริงของคุณ จะใช้การกำหนดค่า Tomcat ที่มันสร้างและจัดเก็บภายใต้โครงการ "เซิร์ฟเวอร์" หากคุณดูเวิร์กสเปซ Eclipse ของคุณคุณควรเห็นโครงการชื่อ "เซิร์ฟเวอร์" ขยายโครงการ "เซิร์ฟเวอร์" และคุณจะเจอ server.xml เปิดไฟล์นี้และเลื่อนไปจนสุดและคุณจะเห็นสิ่งนี้: -

<Context docBase="abc" path="/abc" reloadable="true" source="org.eclipse.jst.jee.server:abc"/>

ที่นี่คุณสามารถเปลี่ยนเส้นทางบริบทโครงการเป็นอย่างอื่น

หวังว่านี่จะช่วยได้


ฉันไม่แน่ใจว่าคุณต้องการเปลี่ยนค่าทั้ง 3 วิธีแก้ปัญหาของ Csaba_H ใช้งานได้สำหรับฉันและนั่นเปลี่ยนเฉพาะแอตทริบิวต์ "path" ...
Chris

อันนี้ใช้ไม่ได้สำหรับฉัน - ไฟล์ในไดเรกทอรีนั้นถูกเขียนทับเมื่อคุณรีสตาร์ทเซิร์ฟเวอร์ Csaba_H เวอร์ชันสองแท็บ Modules ภายใต้ Tomcat Server ดูเหมือนว่า "ถูกต้อง"
idarwin

17

ฉันลองวิธีแก้ปัญหาที่แนะนำโดย Russ Bateman ที่นี่ในโพสต์

http://localhost:8080/Myapp ถึง http://localhost:8080/somepath/Myapp

แต่ไม่ได้ผลสำหรับฉันเนื่องจากฉันต้องการไฟล์ * .war ที่สามารถเก็บการตั้งค่าและไม่ใช่อินสแตนซ์ของเซิร์ฟเวอร์แต่ละตัวในเครื่องของฉัน

การอ้างอิง

ในการที่จะทำเช่นนั้นฉันจำเป็นต้องวาง jboss-web.xml ใน WEB-INF

<?xml version="1.0" encoding="UTF-8"?>
 <!--
Copyright (c) 2008 Object Computing, Inc.
All rights reserved.
-->
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 4.2//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_4_2.dtd">

  <jboss-web>
  <context-root>somepath/Myapp</context-root>
  </jboss-web>

สิ่งนี้ใช้ได้สำหรับฉัน Environment = Eclipse + m2e + m2e-wtp + กำลังปรับใช้กับ JBoss จากมุมมองเซิร์ฟเวอร์ จำเป็นต้องปรับใช้โครงการเว็บหลักเป็น ROOT และการตั้งค่า Eclipse ไม่ได้ทำเคล็ดลับ ฉันคัดลอกไฟล์ของ Tosha (ด้านบน) และวาง "ROOT" คำพูดเป็นค่ารูทบริบท เสร็จแล้ว ขอบคุณ @Tosha!
Steven Francolla

ใช้งานได้ แต่ฉันสงสัยว่าทำไมมันไม่สนใจการตั้งค่าในคุณสมบัติของโครงการ
Vedran

4
ทำงานร่วมกับ JBoss WildFly 8.1.0 รอบชิงชนะเลิศ
อเล็กซานเดอร์

ฉันย้ายจาก MyEclipse 8.6 ไปยัง Eclipse และไม่สามารถปรับใช้กับบริบทรูท '/' การเพิ่ม jboss-web.xml ทำงานได้สำเร็จ เซิร์ฟเวอร์: Jboss AS 5.1 Eclipse Luna
สายม

9

การตั้งค่าพา ธ เป็นอะไรในกล่องโต้ตอบแก้ไขโมดูลเว็บของ Eclipse ทำให้ฉันสามารถเข้าถึงโครงการโดยไม่มีส่วนประกอบของพา ธ ใน URL (เช่น ROOT)

คุณสามารถเข้าถึงกล่องโต้ตอบแก้ไขเว็บโมดูลได้โดยกด F3 หากคุณเลือก Tomcat ในมุมมอง "เซิร์ฟเวอร์" หรือโดยดับเบิลคลิก

ภาพหน้าจอบางส่วน:


ขออภัยคุณสามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ไหม
smonff

โอ้ขอบคุณ! บน Eclipse Luna บน GNU / Linux /จำเป็นต้องมี
smonff

1
ฉันใช้ Eclipse Mars (4.5) กับ Win7
Ray Hulha

6

Apache tomcat เก็บเส้นทางบริบทของโครงการในเส้นทาง server.xml สำหรับแต่ละโครงการเว็บบน Eclipse มีแท็กจากที่นั่นคุณสามารถเปลี่ยนได้
สมมติว่ามีสองหรือสามโครงการปรับใช้บนเซิร์ฟเวอร์ สำหรับแต่ละเส้นทางบริบทจะถูกเก็บไว้ใน แท็กนี้อยู่ในไฟล์ server.xml ภายในเซิร์ฟเวอร์ที่สร้างบน eclipse

ฉันมีหนึ่งโครงการเพื่อให้มีบนเส้นทางรูทบริบทในเซิร์ฟเวอร์คือ:

<Context docBase="Test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:Test1"/>

พา ธ นี้แทนพา ธ บริบทของเว็บแอปพลิเคชันของคุณ เมื่อเปลี่ยนเส้นทางนี้เส้นทางบริบทเว็บแอปของคุณจะเปลี่ยนไป


6

ฉันรู้คำตอบที่ได้รับการยอมรับแล้ว แต่ในกรณีที่ทุกคนที่ใช้ Maven ต้องการทำสิ่งเดียวกันให้ตั้งค่าfinalNameใน maven buildเป็นชื่ออะไรก็ตามที่คุณต้องการให้และทำ maven -> update project

<build>
    <finalName><any-name></finalName>
    <plugins><provide-plugins-needed></plugins>
<build>

4

หากโครงการคือ maven ให้เปลี่ยน "finalName" ใน pom.xml และอัปเดตโครงการเป็น Maven ซึ่งทำงานได้สำหรับฉัน


2

ใน Glassfish คุณต้องเปลี่ยนไฟล์ WEB-INF / glassfish-web.xml

<glassfish-web-app>
    <context-root>/myapp</context-root>
</glassfish-web-app>

ดังนั้นเมื่อคุณคลิกที่"Run as> Run on server"มันจะเปิดอย่างถูกต้อง


ใช่เราต้อง การแบ่งปันที่ดี
Dinath

2

ฉันแค่อยากจะเพิ่มว่าถ้าคุณไม่ต้องการชื่อแอปพลิเคชันของคุณในบริบทรูทเลยคุณก็แค่ใส่ "/" (ไม่มีเครื่องหมายคำพูดเพียงแค่สแลชฟอร์เวิร์ด) ใน Eclipse -> การตั้งค่าโครงการเว็บ -> รายการรูทบริบท

ที่จะปรับใช้ webapp เพื่อhttp: // localhost: 8080 /

แน่นอนว่านี่จะทำให้เกิดปัญหากับเว็บแอปพลิเคชันอื่น ๆ ที่คุณพยายามเรียกใช้บนเซิร์ฟเวอร์

พาฉันไปด้วยกันตลอดไปเพื่อรวมเข้าด้วยกัน ... ดังนั้นแม้ว่าโพสต์นี้จะอายุ 8 ปีหวังว่านี่จะยังช่วยใครซักคน!


0

ในโครงการ java เปิดโฟลเดอร์. setset ค้นหาไฟล์ชื่อ "org.eclipse.wst.common.component" เปลี่ยนแท็ก <wb-module deploy-name = "NEW_NAME">

นอกจากนี้คุณอาจต้องการเปลี่ยนรูทบริบทในคุณสมบัติโครงการ


สิ่งที่ดูดีในโครงการของฉันและมันทำงานภายใน eclipse ได้ดี มันคือเมื่อฉันแปลงเป็นไฟล์สงครามโดยใช้ maven ว่ามันเป็นบริบทของรูทและแทนที่จะเป็น localhost / events / มันทำงานบน localhost / ซึ่งแบ่งลิงก์ทั้งหมดของฉัน
JesseBoyd

0

หากใช้ eclipse เพื่อปรับใช้แอปพลิเคชันของคุณ เราสามารถใช้ปลั๊กอิน maven นี้

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.10</version>
    <configuration>
        <wtpversion>2.0</wtpversion>
        <wtpContextName>newContextroot</wtpContextName>
    </configuration>
</plugin>

ตอนนี้ไปที่โฟลเดอร์รูทโปรเจคของคุณและเปิดพรอมต์คำสั่งที่ประเภทตำแหน่งคำสั่งนี้:

mvn eclipse: eclipse -Dwtpversion = 2.0

คุณอาจต้องรีสตาร์ท eclipse หรือในมุมมองเซิร์ฟเวอร์ลบเซิร์ฟเวอร์และสร้าง agian เพื่อดูผลกระทบ ฉันสงสัยว่าการออกกำลังกายนี้สมเหตุสมผลในชีวิตจริง แต่ใช้งานได้


0

หากใช้แอปพลิเคชันองค์กร maven java ee 7/8 ต้องแก้ไข pom.xml ของโครงการ EAR

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <webModule>
                        <groupId>com.sample</groupId>
                        <artifactId>ProjectName-web</artifactId>
                        <contextRoot>/myproject</contextRoot>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
        ...
    </plugins>
</build>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.