จะเปลี่ยนแอปพลิเคชัน ROOT ได้อย่างไร?


130

ฉันกำลังพยายามเปลี่ยนแอปพลิเคชันเริ่มต้นของเว็บเซิร์ฟเวอร์ Tomcat 6 เป็นแอปพลิเคชันอื่นที่ไม่ใช่ "ROOT" (ภายในโฟลเดอร์ webapps) วิธีที่ดีที่สุดในการทำคืออะไร?

คำตอบ:


129

มีสามวิธี:

  • ก่อนอื่นให้ปิด Tomcat ของคุณจากbinไดเร็กทอรี ( sh shutdown.sh) จากนั้นลบเนื้อหาทั้งหมดในwebappsโฟลเดอร์Tomcat ของคุณ( rm -fr *) จากนั้นเปลี่ยนชื่อไฟล์ WAR เป็นROOT.warและสุดท้ายเริ่ม Tomcat จากbinไดเร็กทอรี ( sh startup.sh)

  • ทิ้งไฟล์สงครามไว้ใน$CATALINA_BASE/webappsชื่อเดิม ปิด autoDeployและdeployOnStartupในองค์ประกอบโฮสต์ของคุณในserver.xmlไฟล์ กำหนดบริบทแอ็พพลิเคชันทั้งหมดอย่างชัดเจนserver.xmlโดยระบุทั้งพา ธ และแอ็ตทริบิวต์docBase คุณต้องทำเช่นนี้เนื่องจากคุณได้ปิดใช้งานกลไกการปรับใช้อัตโนมัติของ Tomcat ทั้งหมดและ Tomcat จะไม่ปรับใช้แอปพลิเคชันของคุณอีกต่อไปเว้นแต่จะพบบริบทในไฟล์server.xml.

    วิธีที่สอง: ในการเปลี่ยนแปลงแอปพลิเคชันใด ๆ คุณจะต้องหยุดและรีสตาร์ท Tomcat

  • วางไฟล์ WAR ของคุณไว้ด้านนอก$CATALINA_BASE/webapps(ต้องอยู่ภายนอกเพื่อป้องกันการใช้งานซ้ำซ้อน) วางไฟล์บริบทที่มีชื่อROOT.xmlใน$CATALINA_BASE/conf/. องค์ประกอบเดียวในไฟล์บริบทนี้ต้องมี แอตทริบิวต์docBase ที่ชี้ไปยังตำแหน่งของไฟล์ WAR ของคุณ ไม่ควรตั้งค่าองค์ประกอบเส้นทาง - มาจากชื่อของ.xmlไฟล์ในกรณีROOT.xmlนี้ ดูเอกสารสำหรับคอนเทนเนอร์บริบทสำหรับรายละเอียด

การอ้างอิง


4
ฉันลองวิธีแรกและได้ผล! Bdw - คุณไม่จำเป็นต้องลบทุกอย่าง ฉันเพิ่งลบโฟลเดอร์ ROOT และเปลี่ยนชื่อสงครามเป็น ROOT.war และมันก็ใช้งานได้ดี
hostnik

ฉันรู้ว่ามันไม่ได้ทำตามกฎที่นุ่มนวล แต่ทำผิด ..... ขอบคุณ! ฉันหวังว่าฉันจะโหวตได้มากกว่าหนึ่งครั้ง มีประโยชน์มาก BTW ฉันต้องรีสตาร์ท tomcat ก่อนจึงจะใช้งานได้ @hostnik
ขนมที่น่ารังเกียจ

วิธีที่สามของ @ danny-london ใช้ไม่ได้สำหรับฉันใน Tomcat 7 แต่จะใช้ได้ผลถ้าคุณวางไฟล์ ROOT.xml ใน$CATALINA_BASE/conf/[enginename]/[hostname]ไดเร็กทอรี (ซึ่งสำหรับการตั้งค่าพื้นฐานของฉันคือ$CATALINA_HOME/conf/Catalina/localhost) อ้างถึงเอกสารคอนเทนเนอร์บริบท
Michael Scheper

ทางเลือกที่ทันสมัยเพื่อเริ่มต้น Tomcat: sudo systemctl start tomcatxที่xย่อมาจากหมายเลขรุ่น
EarthMind

24

การเพิ่ม<Context>แท็กใน<Host>แท็กserver.xmlสำหรับ Tomcat 6 จะช่วยแก้ปัญหาได้

หากคุณใช้path=""ช่องว่างคุณสามารถใช้ URL เช่นhttp://localhost/first.do.

ในแท็กบริบทชุดแอตทริบิวต์docBase="E:\struts-ITRCbook\myStrutsbook"และreloadable="true"จากนั้นสิ้นสุดแท็กบริบท

ควรมีลักษณะดังนี้:

<Host name="localhost"  appBase="webapps" 
        unpackWARs="true" autoDeploy="true"
        xmlValidation="false" xmlNamespaceAware="false">
    <Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
    </Context>
</Host>

นี่เป็นความจริงสำหรับ tomcat 7 หรือไม่
Marcy Sutton

4
ตามเอกสารประกอบ: สำหรับ Tomcat 6 ซึ่งแตกต่างจาก Tomcat 4.x ไม่แนะนำให้วางองค์ประกอบ <Context> ลงในไฟล์ server.xml โดยตรง นี่เป็นเพราะมันทำให้การแก้ไขคอนฟิกูเรชันบริบทรุกรานมากขึ้นเนื่องจากไฟล์ conf / server.xml หลักไม่สามารถโหลดซ้ำได้โดยไม่ต้องรีสตาร์ท Tomcat

แจ้งให้ทราบวิธีนี้มีผลข้างเคียง! myStrutsbook จะปรับใช้สองครั้งหนึ่งครั้งสำหรับ localhost: 8080 และอีกครั้งสำหรับ localhost: 8080 / myStrutsbook! และอาจทำให้เกิดข้อผิดพลาดในการเชื่อมต่อฐานข้อมูลและการใช้ทรัพยากรมากขึ้น
Ali.Mojtehedy

24

ใน Tomcat 7 ที่มีการเปลี่ยนแปลงเหล่านี้ฉันสามารถเข้าถึงได้myAPPที่/และROOTเวลา/ROOT

<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>

เพิ่มด้านบนใน<Host>ส่วนใน server.xml


เพียงวิธีแก้ปัญหาที่ฉันกำลังมองหา! ขอบคุณล้าน Sudheer! ใช้งานได้เหมือนมีเสน่ห์สำหรับฉัน และเฮ้! ฉันมีคำถามอื่น เมื่อฉันเข้าถึง ROOT โดย/ROOTและลองเข้าสู่หน้าผู้จัดการโดยใช้ข้อมูลประจำตัวที่ถูกต้องฉันถูกปฏิเสธการเข้าถึง คุณจะรู้วิธีแก้ไขปัญหานี้หรือไม่?
Saturnian

@Sudheer Palyam ฉันทำเช่นเดียวกัน ฉันเปลี่ยนไฟล์ server.xml แล้วเริ่มเซิร์ฟเวอร์ แต่เมื่อฉันโหลด / เยี่ยมชม localhost: 8080 มันแสดงข้อผิดพลาดสถานะ 404 ถ้าฉันลบบรรทัดเหล่านี้ออกจาก server.xml มันจะโหลดพอร์ตด้านบน
Sachin Kumar

16

แอปเริ่มต้น ROOT มักจะเป็น Tomcat Manager ซึ่งมีประโยชน์มากดังนั้นฉันจึงรู้สึกอยากเก็บมันไว้

ดังนั้นวิธีที่ฉันทำของฉัน ROOT แอปและเก็บไว้ TCmgr เป็นเช่นนี้

เปลี่ยนชื่อ ROOT เป็นอย่างอื่น

mv ROOT TCmgr

จากนั้นสร้างลิงก์สัญลักษณ์โดย ROOT ชี้ไปที่แอพที่ฉันต้องการทำให้เป็นค่าเริ่มต้น

ln -s <your app> ROOT

ได้ผลสำหรับฉันและดูเหมือนเป็นวิธีที่ง่ายที่สุด


@Vic คุณพูดถูก แต่ windows มีลิงก์สัญลักษณ์ใน XP ขึ้นไปฉันคิดว่าคุณสามารถใช้ mklink ได้ โปรดทราบว่าฉันไม่ได้ทำสิ่งนี้และมีเหตุผลอื่นที่ไม่ใช้ลิงก์สัญลักษณ์
MichaelStoner

12

ตามเอกสาร Apache Tomcat คุณสามารถเปลี่ยนแอปพลิเคชันได้โดยสร้างไฟล์ ROOT.xml ดูข้อมูลเพิ่มเติมได้ที่:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html

"เว็บแอปพลิเคชันเริ่มต้นอาจถูกกำหนดโดยใช้ไฟล์ชื่อ ROOT.xml"


12

คุณสามารถทำได้ด้วยวิธีการแฮ็กเล็กน้อยโดย:

  1. หยุด Tomcat
  2. ย้าย ROOT.war ไปข้าง ๆ และ rm -rf webapps / ROOT
  3. คัดลอกเว็บแอปที่คุณต้องการไปยัง webapps / ROOT.war
  4. เริ่ม Tomcat

2
น่าเกลียดหรือน่าเบื่อ แต่การแฮ็กอาจเป็นคำที่ไม่ถูกต้องเนื่องจากดูเหมือนจะเป็นวิธีที่เป็นทางการ / ได้รับการสนับสนุน
Brian Knoblauch

3

อีกทางเลือกหนึ่งคือการสร้าง servlet ที่ส่งการเปลี่ยนเส้นทางไปยัง webapp เริ่มต้นที่ต้องการและแมป servlet นั้นไปยัง url ทั้งหมดใน ROOT webapp

package com.example.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.sendRedirect("/myRootWebapp");
  }
}


CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servletเพิ่มระดับข้างต้นเพื่อ
และเพิ่มสิ่งต่อไปนี้ใน
CATALINA_BASE/webapps/ROOT/WEB-INF/web.xml:

  <servlet>
    <display-name>Redirect</display-name>
    <servlet-name>Redirect</servlet-name>
    <servlet-class>com.example.servlet.RedirectServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Redirect</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

และหากต้องการคุณสามารถแก้ไข RedirectServlet เพื่อยอมรับพารามิเตอร์เริ่มต้นเพื่อให้คุณสามารถตั้งค่าเว็บแอปเริ่มต้นโดยไม่ต้องแก้ไขแหล่งที่มา

ฉันไม่แน่ใจว่าการทำเช่นนี้จะมีผลกระทบเชิงลบหรือไม่ แต่ฉันได้ทดสอบแล้วและดูเหมือนจะได้ผล


2

การกำหนดค่า context.xml ใช้ไม่ได้สำหรับฉัน Tomcat 6.0.29 บ่นเกี่ยวกับ docBase ที่อยู่ใน appBase: ... สำหรับ Tomcat 5 สิ่งนี้ใช้งานได้จริง

วิธีแก้ปัญหาอย่างหนึ่งคือใส่แอปพลิเคชันในโฟลเดอร์ ROOT

อีกวิธีหนึ่งที่ง่ายมากคือการใส่ index.jsp ไปที่ ROOT ที่เปลี่ยนเส้นทางไปยังแอปพลิเคชันของฉันเช่นนี้ response.sendRedirect ("/ MyApplicationXy");

ขอแสดงความนับถือ ม.ค.


1

ฉันมีปัญหาเมื่อกำหนดค่า Tomcat ' server.xmlและเพิ่มองค์ประกอบบริบท เขาไม่ต้องการใช้ config ของฉัน: http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html

หากคุณอยู่ในUnix-likeระบบ:

  1. mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
  2. ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT

เสร็จสิ้น

ใช้ได้ผลสำหรับฉัน


1

วิธีที่ดีที่สุดในการเปลี่ยนแอปพลิเคชันรูท Tomcat ทดสอบกับ Tomcat 7 และ 8

  1. ย้ายไปที่ไดเร็กทอรี tomcat webapps:

    ตัวอย่างบนเครื่องของฉัน: ~/stack/apache-tomcat/webapps

  2. เปลี่ยนชื่อแทนที่หรือลบโฟลเดอร์ ROOT คำแนะนำของฉันคือการเปลี่ยนชื่อหรือสร้างสำเนาสำหรับการสำรองข้อมูล ตัวอย่างเปลี่ยนชื่อ ROOT เป็น RENAMED_ROOT:

    mv ROOT RENAMED_ROOT

  3. ย้ายไฟล์ war ด้วยแอปพลิเคชันของคุณไปยังไดเร็กทอรี webapps ของ tomcat (เป็นไดเร็กทอรีที่เป็นโฟลเดอร์ ROOT เก่าบนเครื่องของฉัน: ~ / stack / apache-tomcat / webapps)

ไฟล์สงครามจะต้องมีชื่อROOT.war เปลี่ยนชื่อแอปพลิเคชันของคุณหากจำเป็น: yourApplicationName.war -> ROOT.war

  1. รีสตาร์ท tomcat หลังจากรีสตาร์ทแอปพลิเคชันของคุณจะเป็นรูท

0

ฉันจะดูเอกสารของฉัน มีวิธีระบุการกำหนดค่าเพื่อเปลี่ยนเส้นทางของเว็บแอปพลิเคชันรูทที่ห่างจาก ROOT (หรือ ROOT.war) แต่ดูเหมือนว่าจะมีการเปลี่ยนแปลงระหว่าง Tomcat 5 และ 6

พบสิ่งนี้:

http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html

ดังนั้นดูเหมือนว่าการเปลี่ยนรูทพา ธ (ใน ROOT.xml) เป็นไปได้ แต่มีข้อผิดพลาดเล็กน้อย - คุณต้องย้าย WAR ของคุณออกนอกไดเร็กทอรีการปรับใช้อัตโนมัติ ถ้าฉันถามว่าทำไมการเปลี่ยนชื่อไฟล์ของคุณเป็น ROOT.war ไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้?


1
น่าเสียดายที่การเปลี่ยนไฟล์ war เป็น ROOT.war ไม่ใช่ตัวเลือกสำหรับฉัน Jacques

สายไปหน่อย แต่ ... สำหรับฉันฉันไม่สามารถเปลี่ยนได้เพราะฉันใช้ระบบที่สร้างโดยบุคคลที่สามซึ่งดูเหมือนว่าจะมีการเข้ารหัสบางตำแหน่งลงในไฟล์ jar อย่างหนัก .... ดังนั้นจึงย้ายไปที่ ROOT.war ทำให้ปัญหาตั้งแต่รูปลักษณ์ที่โปรแกรมเดิมสำหรับขวดของตัวเองภายใต้ไดเรกทอรีที่อยู่ใน [originalapp.war] อีกต่อไป
ไอ้บ้า

0

ไม่ใช่วิธีแก้ปัญหาที่ดีมาก แต่วิธีหนึ่งคือเปลี่ยนเส้นทางจากแอป ROOT ไปยัง YourWebApp สำหรับสิ่งนี้คุณต้องแก้ไข ROOT index.html

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
    </head>
    <body onLoad="javascript:window.location='YourWebApp';">
    </body>
</html>

หรือ

<html>
    <head>
        <title>Redirecting to /YourWebApp</title>
        <meta http-equiv="refresh" content="0;url=YourWebApp" />
    </head>
    <body>
    </body>
</html>

อ้างอิง: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html


-4

ใน Tomcat 7 (ภายใต้เซิร์ฟเวอร์ Windows) ฉันไม่ได้เพิ่มหรือแก้ไขอะไรในไฟล์กำหนดค่าใด ๆ ฉันเพิ่งเปลี่ยนชื่อโฟลเดอร์ ROOT เป็นอย่างอื่นและเปลี่ยนชื่อโฟลเดอร์แอปพลิเคชันของฉันเป็น ROOT และใช้งานได้ดี


1
นี่อาจเป็นวิธีแก้ปัญหาที่ดี แต่คำถามของ Jaques เกี่ยวกับวิธีเปลี่ยนแอปพลิเคชันเริ่มต้น อาจมีสาเหตุที่ทำให้เขาไม่สามารถเปลี่ยนเนื้อหาของโฟลเดอร์ ROOT ได้
JVMATL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.