Làm cách nào để thay đổi ứng dụng ROOT?


130

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:


129

Có ba phương pháp:

  • Đầu tiên tắt Tomcat của bạn từ binthư mục của nó ( sh shutdown.sh). Sau đó xóa tất cả nội dung của webappsthư mục Tomcat của bạn ( rm -fr *). Sau đó đổi tên tệp WAR của bạn thành ROOT.warvà cuối cùng bắt đầu Tomcat của bạn từ binthư mục (sh startup.sh ).

  • Để lại tập tin chiến tranh của bạn $CATALINA_BASE/webappsdưới tên ban đầu của nó. Tắt autoDeploytriển khaiOnStartup trong phần tử Máy chủ của bạn trong server.xmltệ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ẫndocBase . 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.xmltrong $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 .xmltệp, trong trường hợp này ROOT.xml. Xem tài liệu cho container Context để biết chi tiết.

Tài liệu tham khảo


4
Tôi đã thử phương pháp đầu tiên và nó hoạt động! Bdw - bạn KHÔNG cần xóa mọi thứ. Tôi vừa xóa thư mục ROOT và đổi tên cuộc chiến của mình thành ROOT.war và nó hoạt động như một lá bùa.
hostnik

Tôi biết nó không thực sự tuân theo các quy tắc mềm nhưng vặn nó ..... Cảm ơn! Tôi ước tôi có thể nâng cao hơn một lần. Siêu hữu ích. BTW, tôi đã phải khởi động lại tomcat trước khi nó hoạt động, @hostnik.
pasty khó chịu

Phương pháp thứ ba của @ danny-london không hoạt động với tôi trong Tomcat 7, nhưng nó hoạt động nếu bạn đặt tệp ROOT.xml trong $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 .
Michael Scheper

Thay thế hiện đại để bắt đầu Tomcat: sudo systemctl start tomcatxnơi xviết tắt của số phiên bản
EarthMind

24

Thêm một <Context>thẻ trong <Host>thẻ vào server.xmlTomcat 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"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>

Điều này cũng đúng với tomcat 7?
Marcy Sutton

4
Theo tài liệu: Đối với Tomcat 6, không giống như Tomcat 4.x, KHÔNG nên đặt các phần tử <Ngữ cảnh> trực tiếp trong tệp server.xml. Điều này là do nó làm cho việc sửa đổi cấu hình Ngữ cảnh trở nên xâm lấn hơn vì tệp conf / server.xml chính có thể được tải lại mà không cần khởi động lại Tomcat.

Hãy thông báo cho phương pháp này có tác dụng phụ! myStrutsbook sẽ triển khai hai lần Một lần cho localhost: 8080 và một lần cho localhost: 8080 / myStrutsbook! và có thể gây ra lỗi kết nối cơ sở dữ liệu và sử dụng nhiều tài nguyên hơn
Ali.Mojtehedy

24

Trong Tomcat 7 với những thay đổi này, tôi có thể truy cập myAPPtại /ROOTtại/ROOT

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

Thêm ở trên vào <Host>phần trong server.xml


Chỉ là giải pháp tôi đang tìm kiếm! Cảm ơn một triệu, Sudheer! Hoạt động như một cơ duyên đối với tôi. Và này! Tôi có câu hỏi khác. Khi tôi truy cập ROOT bằng cách /ROOTthử đă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?
Sao Thổ

@Sudheer Palyam Tôi cũng làm như vậy. Tôi đã thay đổi tệp server.xml và sau đó tôi khởi động máy chủ. Nhưng khi tôi tải / truy cập localhost: 8080, nó hiển thị cho tôi lỗi trạng thái 404. Nếu tôi xóa các dòng này khỏi server.xml, thì nó sẽ tải cổng trên.
Sachin Kumar

16

Ứ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.


@Vic bạn đúng, nhưng windows có các liên kết tượng trưng, ​​trong XP trở lên tôi nghĩ bạn có thể sử dụng mklink. Xin lưu ý rằng tôi đã không làm điều này và có những lý do khác để tôi không sử dụng các liên kết tượng trưng.
MichaelStoner


12

Bạn có thể làm điều này theo cách hơi hack-y bằng cách:

  1. Dừng Tomcat
  2. Di chuyển ROOT.war sang một bên và rm -rf webapps / ROOT
  3. Sao chép ứng dụng web bạn muốn vào ứng dụng web / ROOT.war
  4. Bắt đầu Tomcat

2
Xấu xí hoặc có thể khó chịu, nhưng hacky có thể là thuật ngữ sai vì đó dường như là phương thức chính thức / được hỗ trợ.
Brian Knoblauch

3

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.


2

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



1

Cách cuối cùng để thay đổi ứng dụng root tomcat. Đã thử nghiệm trên Tomcat 7 và 8.

  1. 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

  2. Đổ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

  3. 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

  1. Khởi động lại tomcat. Sau khi khởi động lại, ứng dụng của bạn sẽ được root.

0

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?


1
Thật không may thay đổi tập tin chiến tranh thành ROOT.war không phải là một lựa chọn cho tôi. Jacques

hơi muộn, nhưng ... đối với tôi, tôi không thể thay đổi nó vì tôi đang sử dụng một hệ thống được tạo bởi bên thứ ba, người dường như đã mã hóa một số vị trí vào các tệp jar .... vì vậy chuyển nó sang ROOT.war gây ra sự cố, vì ứng dụng gốc tìm kiếm jar của chính nó trong một thư mục nằm trong [originalapp.war]
mur

0

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


-4

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.


1
Đây có thể là một cách giải quyết tốt, nhưng câu hỏi của Jaques là về cách thay đổi ứng dụng mặc định; có thể có lý do tại sao anh ta không thể thay đổi nội dung của thư mục ROOT.
JVMATL
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.