Tôi đang cố gắng thay đổi ứng dụng mặc định của máy chủ web Tomcat 6 thành một ứng dụng khác với "ROOT" (trong thư mục ứng dụng web). Cách tốt nhất để làm việc này là gì?
Tôi đang cố gắng thay đổi ứng dụng mặc định của máy chủ web Tomcat 6 thành một ứng dụng khác với "ROOT" (trong thư mục ứng dụng web). Cách tốt nhất để làm việc này là gì?
Câu trả lời:
Có ba phương pháp:
Đầu tiên tắt Tomcat của bạn từ bin
thư mục của nó ( sh shutdown.sh
). Sau đó xóa tất cả nội dung của webapps
thư mục Tomcat của bạn ( rm -fr *
). Sau đó đổi tên tệp WAR của bạn thành ROOT.war
và cuối cùng bắt đầu Tomcat của bạn từ bin
thư mục (sh startup.sh
).
Để lại tập tin chiến tranh của bạn $CATALINA_BASE/webapps
dưới tên ban đầu của nó. Tắt
autoDeploy và triển khaiOnStartup trong phần tử Máy chủ của bạn trong server.xml
tệp. Xác định rõ ràng tất cả các bối cảnh ứng dụng server.xml
, chỉ định cả hai thuộc tính đường dẫn
và docBase . Bạn phải làm điều này bởi vì bạn đã vô hiệu hóa tất cả các cơ chế triển khai tự động Tomcat và Tomcat sẽ không triển khai các ứng dụng của bạn nữa trừ khi nó tìm thấy Bối cảnh của chúng trong server.xml
.
Phương pháp thứ hai: để thực hiện bất kỳ thay đổi nào đối với bất kỳ ứng dụng nào, bạn sẽ phải dừng và khởi động lại Tomcat.
Đặt tệp WAR của bạn bên ngoài $CATALINA_BASE/webapps
(nó phải ở bên ngoài để ngăn triển khai gấp đôi). Đặt một tệp ngữ cảnh có tên ROOT.xml
trong $CATALINA_BASE/conf/
. Phần tử đơn trong tệp ngữ cảnh này PHẢI có
thuộc tính docBase trỏ đến vị trí tệp WAR của bạn. Không nên đặt thành phần đường dẫn - nó được lấy từ tên của .xml
tệp, trong trường hợp này ROOT.xml
. Xem tài liệu cho container Context để biết chi tiết.
$CATALINA_BASE/conf/[enginename]/[hostname]
thư mục (đối với thiết lập khá cơ bản của tôi là $CATALINA_HOME/conf/Catalina/localhost
). Tham khảo tài liệu Context Container .
sudo systemctl start tomcatx
nơi x
viết tắt của số phiên bản
Thêm một <Context>
thẻ trong <Host>
thẻ vào server.xml
Tomcat 6 sẽ giải quyết vấn đề.
Nếu bạn sử dụng path=""
trống, bạn có thể sử dụng một URL như http://localhost/first.do
.
Trong thẻ bối cảnh đặt thuộc tính docBase="E:\struts-ITRCbook\myStrutsbook"
và reloadable="true"
sau đó kết thúc thẻ ngữ cảnh.
Nó sẽ trông giống như thế này:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="E:\struts-ITRCbook\myStrutsbook" reloadable="true">
</Context>
</Host>
Trong Tomcat 7 với những thay đổi này, tôi có thể truy cập myAPP
tại /
và ROOT
tại/ROOT
<Context path="" docBase="myAPP"/>
<Context path="ROOT" docBase="ROOT"/>
Thêm ở trên vào <Host>
phần trong server.xml
/ROOT
thử đăng nhập vào trang Manager bằng thông tin đăng nhập chính xác, tôi sẽ bị từ chối truy cập. Bạn có biết làm thế nào để khắc phục điều này?
Ứng dụng mặc định ROOT thường là Tomcat Manager - có thể hữu ích vì vậy tôi cảm thấy muốn giữ nó xung quanh.
Vì vậy, cách tôi tạo ROOT cho ứng dụng của mình và giữ TCmgr là như thế này.
đổi tên ROOT thành một cái gì đó khác
mv ROOT TCmgr
sau đó tạo một liên kết tượng trưng, theo đó ROOT trỏ đến ứng dụng tôi muốn đặt mặc định.
ln -s <your app> ROOT
làm việc cho tôi và dường như cách tiếp cận dễ dàng nhất.
Theo tài liệu Tomcat của Apache, bạn có thể thay đổi ứng dụng bằng cách tạo tệp ROOT.xml. Xem phần này để biết thêm:
http://tomcat.apache.org/tomcat-6.0-doc/config/context.html
"Ứng dụng web mặc định có thể được xác định bằng cách sử dụng tệp có tên ROOT.xml."
Bạn có thể làm điều này theo cách hơi hack-y bằng cách:
Một giải pháp thay thế sẽ là tạo một servlet gửi chuyển hướng đến ứng dụng web mặc định mong muốn và ánh xạ servlet đó tới tất cả các url trong ứng dụng web ROOT.
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");
}
}
Thêm lớp trên vào
CATALINA_BASE/webapps/ROOT/WEB-INF/classes/com/example/servlet
.
Và thêm vào như sau 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>
Và nếu muốn, bạn có thể dễ dàng sửa đổi RedirectServlet để chấp nhận thông số init để cho phép bạn đặt ứng dụng web mặc định mà không phải sửa đổi nguồn.
Tôi không chắc nếu làm điều này sẽ có bất kỳ tác động tiêu cực nào, nhưng tôi đã kiểm tra điều này và nó dường như hoạt động.
cấu hình bối cảnh không hoạt động đối với tôi. Tomcat 6.0.29 phàn nàn về việc docBase ở trong appBase: ... Đối với Tomcat 5, điều này thực sự hoạt động.
Vì vậy, một giải pháp là đưa ứng dụng vào thư mục ROOT.
Một giải pháp rất đơn giản khác là đặt index.jsp vào ROOT để chuyển hướng đến ứng dụng của tôi như thế này: answer.sendRedirect ("/ MyApplicationXy");
Trân trọng, tháng một
Tôi đã gặp sự cố khi định cấu hình Tomcat ' server.xml
và thêm phần tử Ngữ cảnh. Anh ta chỉ không muốn sử dụng cấu hình của tôi:
http://www.oreillynet.com/onjava/blog/2006/12/configuration_antipotypes_tom.html
Nếu bạn đang ở trong một Unix-like
hệ thống:
mv $CATALINA_HOME/webapps/ROOT $CATALINA_HOME/webapps/___ROOT
ln -s $CATALINA_HOME/webapps/your_project $CATALINA_HOME/webapps/ROOT
Làm xong.
Làm việc cho tôi.
Cách cuối cùng để thay đổi ứng dụng root tomcat. Đã thử nghiệm trên Tomcat 7 và 8.
Di chuyển đến thư mục ứng dụng web tomcat:
Ví dụ trên máy của tôi: ~/stack/apache-tomcat/webapps
Đổi tên, thay thế hoặc xóa thư mục ROOT. Lời khuyên của tôi là đổi tên hoặc tạo một bản sao để sao lưu. Ví dụ đổi tên ROOT thành RENAMED_ROOT:
mv ROOT RENAMED_ROOT
Di chuyển tệp chiến tranh với ứng dụng của bạn vào thư mục ứng dụng web tomcat (thư mục của nó là thư mục ROOT cũ, trên máy của tôi: ~ / stack / apache-tomcat / webapps)
Tệp chiến tranh phải có tên ROOT.war . Đổi tên ứng dụng của bạn nếu cần: yourApplicationName.war -> ROOT.war
Tôi sẽ xem tài liệu của tôi; có một cách chỉ định cấu hình để thay đổi đường dẫn của ứng dụng web gốc ra khỏi ROOT (hoặc ROOT.war), nhưng dường như nó đã thay đổi giữa Tomcat 5 và 6.
Tìm thấy điều này:
http://www.nabble.com/Re:-Tomcat-6-and-ROOT- ứng dụng...-td20017401.html
Vì vậy, có vẻ như việc thay đổi đường dẫn gốc (trong ROOT.xml) là có thể, nhưng hơi bị hỏng - bạn cần di chuyển WAR của mình ra khỏi thư mục triển khai tự động. Có phiền không nếu tôi hỏi tại sao chỉ đổi tên tệp của bạn thành ROOT.war không phải là giải pháp khả thi?
Không phải là một giải pháp tốt nhưng có một cách là chuyển hướng từ ứng dụng ROOT sang YourWebApp. Đối với điều này, bạn cần sửa đổi chỉ số ROOT.html.
<html>
<head>
<title>Redirecting to /YourWebApp</title>
</head>
<body onLoad="javascript:window.location='YourWebApp';">
</body>
</html>
HOẶC LÀ
<html>
<head>
<title>Redirecting to /YourWebApp</title>
<meta http-equiv="refresh" content="0;url=YourWebApp" />
</head>
<body>
</body>
</html>
Tham khảo: http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html
Trong Tomcat 7 (trong máy chủ Windows) tôi đã không thêm hoặc chỉnh sửa bất cứ thứ gì vào bất kỳ tệp cấu hình nào. Tôi chỉ đổi tên thư mục ROOT thành một cái gì đó khác và đổi tên thư mục ứng dụng của tôi thành ROOT và nó hoạt động tốt.