Triển khai ứng dụng của tôi ở thư mục gốc trong Tomcat


132

Tôi có tập tin chiến tranh của ứng dụng của tôi. Tôi cần triển khai điều này ở cấp độ gốc. URL hiện tại là http://localhost:8080/war_name/application_name.


1
Bạn có thể vui lòng xác định chính xác vấn đề của bạn là gì? Khi bạn triển khai tệp chiến tranh trong tomcat, ứng dụng được truy cập bằng URL: localhost: 8080 / war_name mà không có phần mở rộng .war.
ashishjmeshram

1
Có bạn đúng, tôi cần truy cập ứng dụng của tôi. " localhost / application_name ", điều này tôi có thể đạt được khi tôi đổi tên tệp chiến tranh của mình thành "ROOT.war", nhưng nó đã loại bỏ ngoại lệ bộ nhớ vì kích thước tệp chiến tranh của tôi là khoảng
120 MB

1
@ user661660 - Có vẻ như bạn có một vấn đề khác - đổi tên thành ROOT.warnên hoạt động. Tôi sẽ đề nghị hỏi một câu hỏi khác về bạn OutOfMemoryException, cung cấp dấu vết ngăn xếp và các chi tiết. Bạn có thể có được xung quanh nó bằng cách cấu hình -Xmxcho JVM.
Rob Hruska

.lang.OutOfMemoryError: PermGen space 16/03/2011 9:51:51 AM com.ebay.kernel.logger.Logger log SEVERE: Error in Perfmon thread java.lang.OutOfMemoryError: PermGen space Exception in thread " "java.lang.OutOfMemor yError: PermGen space Exception in thread" MetricsSnapshotScheduler "java.lang.OutOfMemoryError: PermG en space Mar 16, 2011 9:53:36 AM com.ebay.kernel.logger. chủ đề java.lang.OutOfMemoryError: PermGen space Ngoại lệ trong luồng "CalClient: NotifyThreadDestroyThread-0" java.lang.OutOfMemor yError: PermGen space
iamjustcoder

1
@ user661660 - Có lẽ một số câu trả lời cho câu hỏi này có thể giúp bạn.
Rob Hruska

Câu trả lời:


220

Bạn có một cặp đôi tùy chọn:

  1. Xóa thư mục bên ngoài ROOT/khỏi tomcat và đổi tên tệp chiến tranh của bạn thành ROOT.wartrước khi triển khai nó.

  2. Triển khai chiến tranh của bạn như (từ ví dụ của bạn) war_name.warvà cấu hình gốc bối cảnh trong conf/server.xmlsử dụng tập tin chiến tranh của bạn:

    <Context path="" docBase="war_name" debug="0" reloadable="true"></Context>

Cái đầu tiên thì dễ hơn, nhưng ít hơn một chút. Cách thứ hai có lẽ là cách thanh lịch hơn để làm điều đó.


3
Nếu Tomcat được đặt thành tự động triển khai, bạn không phải lo lắng về tùy chọn 2.
Buhake Sindi

4
@Dejel - Không có gì về mặt kỹ thuật. Tôi đã thực hiện nó một chút bản thân mình; nó hoàn thành công việc Chỉ cảm thấy hơi khó khăn khi phải đổi tên tập tin chiến tranh của riêng bạn thành một cái gì đó giống như một chi tiết thực hiện của container.
Rob Hruska

4
Theo liên kết bạn đã cung cấp KHÔNG nên đặt các phần tử <Ngữ cảnh> trực tiếp vào tệp server.xml
Nilesh

6
Câu trả lời này đề xuất một kỹ thuật được đề cập rõ ràng trong tài liệu là hình thức xấu. Kỹ thuật phù hợp được trình bày chi tiết tại đây: stackoverflow.com/questions/41263245/ trộm
Christopher Schultz

5
+1 để gọi nó là ROOT.war. Theo các tài liệu Tomcat, bạn cần hết sức cẩn thận khi chỉ định "đường dẫn" để tránh triển khai kép: "Ngay cả khi xác định tĩnh một Ngữ cảnh trong server.xml, thuộc tính này không được đặt trừ khi docBase không được đặt bên dưới Máy chủ appBase hoặc cả hai triển khaiOnStartup và autoDeploy đều sai. Nếu quy tắc này không được tuân theo, việc triển khai kép có thể dẫn đến kết quả. " - từ tomcat.apache.org/tomcat-8.0-doc/config/context.html
Anthony Hayward

31

trên tomcat v.7 (cài đặt vanilla)

trong conf / server.xml của bạn, thêm bit sau vào cuối tệp, ngay trước </Host>thẻ đóng:

<Context path="" docBase="app_name">
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Lưu ý rằng thuộc tính docBase . Đó là một chút quan trọng. Bạn chắc chắn rằng bạn đã triển khai app_name trước khi thay đổi ứng dụng web gốc của mình hoặc chỉ sao chép ứng dụng web đã giải nén (app_name) vào thư mục ứng dụng web của tomcat. Khởi động, truy cập root, xem app_name của bạn ở đó!


13

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">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="ROOT" docBase="ROOT">
     <!-- Default set of monitored resources -->
     <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

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


3
Đường dẫn ngữ cảnh phải là một chuỗi trống hoặc bắt đầu bằng '/'. Đường dẫn [ROOT] không đáp ứng các tiêu chí này và đã được đổi thành [/ ROOT]
Nikita Bosik

11

Tôi biết rằng câu trả lời của tôi là loại trùng lặp với một số câu trả lời khác, nhưng đây là một giải pháp hoàn chỉnh có một số lợi thế. Điều này hoạt động trên Tomcat 8:

  1. Ứng dụng chính được phục vụ từ thư mục gốc
  2. Việc triển khai các tệp tin chiến tranh thông qua giao diện web được duy trì.
  3. Ứng dụng chính sẽ chạy trên cổng 80 trong khi chỉ quản trị viên mới có quyền truy cập vào các thư mục quản lý (tôi nhận ra rằng các hệ thống * nix yêu cầu siêu người dùng để liên kết với 80, nhưng trên windows thì đây không phải là vấn đề).

Điều này có nghĩa là bạn chỉ phải khởi động lại tomcat một lần và sau khi các tệp chiến tranh được cập nhật có thể được triển khai mà không gặp sự cố.

Bước 1: Trong tệp server.xml, tìm mục kết nối và thay thế bằng:

<Connector 
    port="8080"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

<Connector
    port="80"
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />

Bước 2: Xác định bối cảnh trong <Host ...>thẻ:

<Context path="/" docBase="CAS">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/ROOT" docBase="ROOT">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
<Context path="/host-manager" docBase="host-manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Lưu ý rằng tôi đã giải quyết tất cả các ứng dụng trong thư mục webapp. Việc đầu tiên có hiệu quả chuyển đổi root và ứng dụng chính từ vị trí. ROOT hiện đã bật http://example.com/ROOTvà ứng dụng chính được bật http://example.com/. Các ứng dụng web được bảo vệ bằng mật khẩu yêu cầu privileged="true"thuộc tính.

Khi bạn triển khai tệp CAS.war khớp với thư mục gốc ( <Context path="/" docBase="CAS">bạn phải tải lại tệp đó trong bảng quản trị vì nó không làm mới với việc triển khai.

Không bao gồm <Context path="/CAS" docBase="CAS">trong bối cảnh của bạn vì nó vô hiệu hóa tùy chọn người quản lý để triển khai các tệp chiến tranh. Điều này có nghĩa là bạn có thể truy cập ứng dụng theo hai cách: http://example.com/http://example.com/APP/

Bước 3: Để ngăn truy cập không mong muốn vào thư mục gốc và thư mục quản lý, hãy thêm một valvevào các thẻ ngữ cảnh như thế này:

<Context path="/manager" docBase="manager" privileged="true">
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        addConnectorPort="true"
        allow="143\.21\.2\.\d+;8080|127\.0\.0\.1;8080|::1;8080|0:0:0:0:0:0:0:1;8080"/>
</Context>

Điều này về cơ bản giới hạn quyền truy cập vào thư mục ứng dụng web quản trị đối với những người từ tên miền của tôi (địa chỉ IP giả) và localhost khi họ sử dụng cổng mặc định 8080 và duy trì khả năng triển khai động các tệp chiến tranh thông qua giao diện web.

Nếu bạn muốn sử dụng điều này cho nhiều ứng dụng đang sử dụng các địa chỉ IP khác nhau, bạn có thể thêm địa chỉ IP vào trình kết nối ( address="143.21.2.1").

Nếu bạn muốn chạy nhiều ứng dụng web từ thư mục gốc, bạn có thể sao chép thẻ Dịch vụ (sử dụng tên khác cho tên thứ hai) và thay đổi cơ sở tài liệu của <Context path="/" docBase="CAS">ví dụ <Context path="/" docBase="ICR">.


6

Cách nhanh nhất.

  1. Đảm bảo bạn không triển khai ứng dụng ROOT, không triển khai nếu bạn có

  2. Đổi tên cuộc chiến của bạn thành ROOT.war, triển khai, đó là tất cả, không cần thay đổi cấu hình


6

Loại bỏ $CATALINA_HOME/webapps/ROOT. Cập nhật $CATALINA_HOME/conf/server.xml, đảm bảo rằng phần tử Máy chủ trông giống như văn bản sau:

<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="false" deployOnStartup="false">
  <Context path="" docBase="myApp"></Context>

Nó hoạt động với Tomcat 8. autoDeploy và triển khaiOnStartup cần được đặt thành false để ngăn tomcat triển khai myApphai lần.


Tôi đã thử tải lên WAR và nó không hoạt động. Đây có phải chỉ dành cho WAR nổ?
logixplayer

Tôi đã thử tải lên WAR và nó không hoạt động dựa trên ví dụ của @ Jingguo. Đây có phải chỉ dành cho WAR nổ? EDIT: Nó thực sự CHỈ cho các cuộc chiến bùng nổ. Tại sao lại thế này? Tôi có thể không chỉ tải lên WAR và tránh bước kép này không? Làm thế nào tôi có thể làm cho nó hoạt động?
logixplayer

@logixplayer. Giải pháp của tôi hoạt động với WAR. Tôi đã không nổ tung nó. Tôi quên đề cập rằng $CATALINA_HOME/webapps/ROOTcần phải được loại bỏ. Vui lòng xóa nó và thử lại.
Jingguo Yao

Tôi đã loại bỏ ROOT như bạn nói. Tôi đã triển khai WAR của tôi (thư mục không nổ). Tôi nhận thấy một thư mục ROOT mới đã được tạo với nội dung của tôi trong đó, ví dụ như WEB-INF. Trang web đang chạy. Đây có phải là cách nó hoạt động?
logixplayer 20/07/2015

Tôi cũng đã thử phương pháp này và tất cả khi tôi cố gắng mở trang trong trình duyệt, nó chỉ chờ máy chủ. Các catalina.out chỉ nói rằng máy chủ đã được khởi động.
Asu

1

Thêm vào sol @Rob Hruska, cài đặt này trong server.xml bên trong phần hoạt động:

<Context path="" docBase="gateway" reloadable="true" override="true"> </Context>

Lưu ý: ghi đè = "true" có thể được yêu cầu trong một số trường hợp.


bạn đã không đề cập đến nơi để đặt này. @Sudheer Câu trả lời của Palyam rất hữu ích.
Kannan Ramamoorthy

1

Thêm vào @Dima câu trả lời 's, nếu bạn đang sử dụng mavenđể xây dựng gói, bạn có thể nói với nó để đặt tên tập tin WAR của bạn để ROOTpom.xml:

<build>
    <finalName>ROOT</finalName>
</build>

Theo mặc định, tomcatsẽ triển khai ứng dụng ROOT.warweb vào ngữ cảnh gốc ( /).


0

mở url trình quản lý tomact: - http: // localhost: 8080 / manager / html /
sau đó trong các ứng dụng bạn thấy một ứng dụng có đường dẫn là "/" được triển khai
đơn giản Không triển khai điều này. Đổi tên tệp chiến tranh của ứng dụng của bạn thành ROOT.war và chỉ đặt tại đường dẫn: - bắt đầu Tomcat của bạn Không cần cấu hình thêm. Bây giờ chúng ta có thể thấy trang chủ ứng dụng của mình hoặc url được định cấu hình tại http: // localhost: 8080
nhập mô tả hình ảnh ở đây
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps


-1

Trong máy chủ của tôi, tôi đang sử dụng cái này và root autodeploy hoạt động tốt:

   <Host name="mysite" autoDeploy="true" appBase="webapps" unpackWARs="true" deployOnStartup="true">
        <Alias>www.mysite.com</Alias>
        <Valve className="org.apache.catalina.valves.RemoteIpValve" protocolHeader="X-Forwarded-Proto"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="mysite_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b"/>
        <Context path="/mysite" docBase="mysite" reloadable="true"/>
    </Host>

Điều này sẽ không triển khai đến / nhưng đến / mysite
tine2k
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.