ฉันกำลังพยายามเปลี่ยนแอปพลิเคชันเริ่มต้นของเว็บเซิร์ฟเวอร์ Tomcat 6 เป็นแอปพลิเคชันอื่นที่ไม่ใช่ "ROOT" (ภายในโฟลเดอร์ webapps) วิธีที่ดีที่สุดในการทำคืออะไร?
ฉันกำลังพยายามเปลี่ยนแอปพลิเคชันเริ่มต้นของเว็บเซิร์ฟเวอร์ Tomcat 6 เป็นแอปพลิเคชันอื่นที่ไม่ใช่ "ROOT" (ภายในโฟลเดอร์ webapps) วิธีที่ดีที่สุดในการทำคืออะไร?
คำตอบ:
มีสามวิธี:
ก่อนอื่นให้ปิด 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
นี้ ดูเอกสารสำหรับคอนเทนเนอร์บริบทสำหรับรายละเอียด
$CATALINA_BASE/conf/[enginename]/[hostname]
ไดเร็กทอรี (ซึ่งสำหรับการตั้งค่าพื้นฐานของฉันคือ$CATALINA_HOME/conf/Catalina/localhost
) อ้างถึงเอกสารคอนเทนเนอร์บริบท
sudo systemctl start tomcatx
ที่x
ย่อมาจากหมายเลขรุ่น
การเพิ่ม<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 ที่มีการเปลี่ยนแปลงเหล่านี้ฉันสามารถเข้าถึงได้myAPP
ที่/
และROOT
เวลา/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
เพิ่มด้านบนใน<Host>
ส่วนใน server.xml
/ROOT
และลองเข้าสู่หน้าผู้จัดการโดยใช้ข้อมูลประจำตัวที่ถูกต้องฉันถูกปฏิเสธการเข้าถึง คุณจะรู้วิธีแก้ไขปัญหานี้หรือไม่?
แอปเริ่มต้น ROOT มักจะเป็น Tomcat Manager ซึ่งมีประโยชน์มากดังนั้นฉันจึงรู้สึกอยากเก็บมันไว้
ดังนั้นวิธีที่ฉันทำของฉัน ROOT แอปและเก็บไว้ TCmgr เป็นเช่นนี้
เปลี่ยนชื่อ ROOT เป็นอย่างอื่น
mv ROOT TCmgr
จากนั้นสร้างลิงก์สัญลักษณ์โดย ROOT ชี้ไปที่แอพที่ฉันต้องการทำให้เป็นค่าเริ่มต้น
ln -s <your app> ROOT
ได้ผลสำหรับฉันและดูเหมือนเป็นวิธีที่ง่ายที่สุด
ตามเอกสาร Apache Tomcat คุณสามารถเปลี่ยนแอปพลิเคชันได้โดยสร้างไฟล์ ROOT.xml ดูข้อมูลเพิ่มเติมได้ที่:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"เว็บแอปพลิเคชันเริ่มต้นอาจถูกกำหนดโดยใช้ไฟล์ชื่อ ROOT.xml"
คุณสามารถทำได้ด้วยวิธีการแฮ็กเล็กน้อยโดย:
อีกทางเลือกหนึ่งคือการสร้าง 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 เพื่อยอมรับพารามิเตอร์เริ่มต้นเพื่อให้คุณสามารถตั้งค่าเว็บแอปเริ่มต้นโดยไม่ต้องแก้ไขแหล่งที่มา
ฉันไม่แน่ใจว่าการทำเช่นนี้จะมีผลกระทบเชิงลบหรือไม่ แต่ฉันได้ทดสอบแล้วและดูเหมือนจะได้ผล
การกำหนดค่า context.xml ใช้ไม่ได้สำหรับฉัน Tomcat 6.0.29 บ่นเกี่ยวกับ docBase ที่อยู่ใน appBase: ... สำหรับ Tomcat 5 สิ่งนี้ใช้งานได้จริง
วิธีแก้ปัญหาอย่างหนึ่งคือใส่แอปพลิเคชันในโฟลเดอร์ ROOT
อีกวิธีหนึ่งที่ง่ายมากคือการใส่ index.jsp ไปที่ ROOT ที่เปลี่ยนเส้นทางไปยังแอปพลิเคชันของฉันเช่นนี้ response.sendRedirect ("/ MyApplicationXy");
ขอแสดงความนับถือ ม.ค.
ฉันมีปัญหาเมื่อกำหนดค่า Tomcat ' server.xml
และเพิ่มองค์ประกอบบริบท เขาไม่ต้องการใช้ config ของฉัน:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipatterns_tom.html
หากคุณอยู่ในUnix-like
ระบบ:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
เสร็จสิ้น
ใช้ได้ผลสำหรับฉัน
วิธีที่ดีที่สุดในการเปลี่ยนแอปพลิเคชันรูท Tomcat ทดสอบกับ Tomcat 7 และ 8
ย้ายไปที่ไดเร็กทอรี tomcat webapps:
ตัวอย่างบนเครื่องของฉัน: ~/stack/apache-tomcat/webapps
เปลี่ยนชื่อแทนที่หรือลบโฟลเดอร์ ROOT คำแนะนำของฉันคือการเปลี่ยนชื่อหรือสร้างสำเนาสำหรับการสำรองข้อมูล ตัวอย่างเปลี่ยนชื่อ ROOT เป็น RENAMED_ROOT:
mv ROOT RENAMED_ROOT
ย้ายไฟล์ war ด้วยแอปพลิเคชันของคุณไปยังไดเร็กทอรี webapps ของ tomcat (เป็นไดเร็กทอรีที่เป็นโฟลเดอร์ ROOT เก่าบนเครื่องของฉัน: ~ / stack / apache-tomcat / webapps)
ไฟล์สงครามจะต้องมีชื่อROOT.war เปลี่ยนชื่อแอปพลิเคชันของคุณหากจำเป็น: yourApplicationName.war -> ROOT.war
ฉันจะดูเอกสารของฉัน มีวิธีระบุการกำหนดค่าเพื่อเปลี่ยนเส้นทางของเว็บแอปพลิเคชันรูทที่ห่างจาก ROOT (หรือ ROOT.war) แต่ดูเหมือนว่าจะมีการเปลี่ยนแปลงระหว่าง Tomcat 5 และ 6
พบสิ่งนี้:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT-application...-td20017401.html
ดังนั้นดูเหมือนว่าการเปลี่ยนรูทพา ธ (ใน ROOT.xml) เป็นไปได้ แต่มีข้อผิดพลาดเล็กน้อย - คุณต้องย้าย WAR ของคุณออกนอกไดเร็กทอรีการปรับใช้อัตโนมัติ ถ้าฉันถามว่าทำไมการเปลี่ยนชื่อไฟล์ของคุณเป็น ROOT.war ไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้?
ไม่ใช่วิธีแก้ปัญหาที่ดีมาก แต่วิธีหนึ่งคือเปลี่ยนเส้นทางจากแอป 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
ใน Tomcat 7 (ภายใต้เซิร์ฟเวอร์ Windows) ฉันไม่ได้เพิ่มหรือแก้ไขอะไรในไฟล์กำหนดค่าใด ๆ ฉันเพิ่งเปลี่ยนชื่อโฟลเดอร์ ROOT เป็นอย่างอื่นและเปลี่ยนชื่อโฟลเดอร์แอปพลิเคชันของฉันเป็น ROOT และใช้งานได้ดี