2012-03-08 27 views
12

Tôi đang sử dụng Tomcat 7 và muốn đặt ngữ cảnh gốc của tệp chiến tranh trong chính tệp chiến tranh và có Tomcat autodeploy và chọn đường dẫn này. Tôi nghĩ rằng tôi đã tìm ra cách để làm điều đó bằng cách đặt một tệp context.xml trong thư mục META-INF của cuộc chiến chứa.Cách chỉ định đường dẫn trong META-INF/context.xml cho Tomcat

<?xml version="1.0" encoding="UTF-8"?> 
<Context path="/somepath/myapp"/> 

Nhưng điều này dường như không hoạt động, tôi cho rằng nó được tải bởi http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/startup/SetContextPropertiesRule.html cho biết nó tải mọi thứ nhưng đường dẫn!

Tôi biết tôi có thể đặt tên cho cuộc chiến tranh somepath # myapp.war và nó sẽ nhặt nó lên nhưng tôi cũng triển khai cho weblogic không hài lòng với tên như thế này.

Có một số cài đặt tôi có thể sử dụng để có đường dẫn hoạt động từ context.xml ở trên không?

Cảm ơn David

Trả lời

12

Bối cảnh path thuộc tính được bỏ qua trừ khi con đường được quy định tại một hard-coded Context trong server.xml, mà không được khuyến khích mạnh mẽ, và không tính đến con đường đa cấp.

Tên của tệp chiến tranh hoặc tên của tệp xml Ngữ cảnh trong tomcat/conf/Catalina/hostname trở thành path của ứng dụng được triển khai.

Trong trường hợp của bạn, hai bên trên là giải pháp, chỉ cần đảm bảo bạn đặt tệp .war bên ngoài appBase được chỉ định cho Máy chủ hoặc bạn sẽ triển khai ứng dụng hai lần.

Trong: conf/Catalina/localhost/myapp#path.xml

<?xml version="1.0"?> 
<Context docBase="/some/path/to/myapp.war"> 
</Context> 
+2

Điều đó cũng giải quyết được vấn đề tương tự đối với tôi, cảm ơn bạn. Tuy nhiên, tôi tin rằng đó là một lỗ hổng của Tomcat để bỏ qua thuộc tính path. Tài liệu thậm chí còn nói ngược lại. Tệ hơn, docBase dường như bị bỏ qua bởi Tomcat 7.0.22, vì vậy cách duy nhất là sử dụng những tên băm ngu ngốc này cho cả context.xml và .war. #Sigh ... – zakmck

+1

Nó không ngu ngốc. Bạn không thể sử dụng ký tự/(hoặc có lẽ \) trong tên tệp vì lý do rõ ràng. Thuộc tính đường dẫn phải được xóa IMO. Nó gây nhầm lẫn cho mọi người quá nhiều. – Pidster

+2

Tôi không có gì chống lại băm, tôi nghĩ rằng đó là xấu mà tôi buộc phải xác định đường dẫn ngữ cảnh thông qua tên tập tin, thay vì đường dẫn tham số và docBase. Ví dụ, theo cách này trong thực tế, tôi không thể triển khai bất kỳ tệp nào có tên như myapp-v1.2.3beta.war. OK, tôi có thể thiết lập một bí danh, nhưng cách khác sẽ tốt hơn. – zakmck

0

Nếu bạn tải application.war của bạn vào một thư mục Tomcat là không nhận thức được, làm thế nào nó có thể đọc bất cứ điều gì trong hồ sơ chiến tranh của bạn? Địa điểm chính xác để thêm thông tin này là $ TOMCAT_HOME/conf/context.xml - đây là một phần của Tomcat và Tomcat có thể đọc tập tin này và tìm hiểu vị trí của ứng dụng và triển khai nó. Có thêm về how to set up JNDI in Tomcat

+0

Chào mừng bạn đến Stack Overflow! Cảm ơn bạn đã đăng câu trả lời! Vui lòng đảm bảo đọc kỹ [FAQ on Self-Promotion] (http://stackoverflow.com/faq#promotion). Cũng lưu ý rằng nó là * bắt buộc * mà bạn đăng tuyên bố từ chối trách nhiệm mỗi khi bạn liên kết đến trang web/sản phẩm của riêng bạn. –

1

thêm copyXML = "true" để chủ cấu hình bên trong $ TOMCAT_HOME/conf/server.xml như

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" copyXML="true"> 
+0

Tôi đã hy vọng rằng điều này sẽ làm việc, nhưng nó đã kết thúc vẫn bỏ qua giá trị. điều này được sử dụng để làm việc trong các phiên bản cũ của Tomcat, nhưng không phải trong Tomcat 7. –

1

Trong /tomcat7/conf/server.xml thêm bên dưới dòng bên trong phần tử và khởi động lại Tomcat để thực hiện thay đổi.

* thay đổi "mycom" thành tên ứng dụng của bạn.

<Context path="" docBase="mycom"> 
    <!-- 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> 

Điều này sẽ làm cho ứng dụng gốc mặc định xuất hiện trong ngữ cảnh gốc "/ ROOT".

Giờ đây, ứng dụng của bạn có thể truy cập tại "/" và "/ mycom"!

Các vấn đề liên quan