2008-11-24 10 views
22

Tôi có một thư mục mà quá trình tải lên một số tệp .pdf. Quá trình này nằm ngoài tầm kiểm soát của tôi.Định cấu hình liên kết cho một thư mục trong Tomcat

Tôi cần phải cung cấp các tệp đó thông qua trang web bằng Tomcat.

Tôi có một thư mục /var/lib/tomcat5/webapps/test1 có sẵn trên web và tôi có thể xem các tệp trong đó bằng trình duyệt.

Vì vậy, tôi đã tạo một liên kết tượng trưng trỏ vào thư mục với các tệp .pdf: /var/lib/tomcat5/webapps/test1/files/, nhưng tôi không thể thấy bất kỳ thứ gì trong thư mục đó.

Làm cách nào để bật liên kết tượng trưng trong thư mục test1? Tôi không muốn bật liên kết tượng trưng ở mọi nơi, chỉ để thư mục có các tệp .pdf khả dụng trên web.

Trả lời

46

Có một vài vấn đề với các giải pháp của việc tạo ra một META-INF/context.xml chứa <Context path="/myapp" allowLinking="true">

Vấn đề lớn nhất là nếu có conf/context.xml, thì allowLinking trong số <Context> phải mất được ưu tiên hơn a <Context> trong một META-INF/context.xml. Và nếu trong số conf/context.xml không xác định rõ ràng allowLinking, điều đó giống như nói allowLinking="false". (xem my answer với câu hỏi ưu tiên bối cảnh)

Để chắc chắn rằng ứng dụng của bạn cho phép liên kết, bạn phải nói <Context override="true" allowLinking="true" ...>.

Một vấn đề khác là path="/myapp" bị bỏ qua trong một META-INF/context.xml. Để ngăn chặn sự nhầm lẫn, tốt nhất là bỏ nó ra. Thời gian duy nhất path trong một <Context> có hiệu lực là trong server.xmlofficial Tomcat docs recommend against đặt <Context> s trong một server.xml.

Cuối cùng, thay vì tệp myapp/META-INF/context.xml, tôi khuyên bạn nên sử dụng tệp conf/Catalina/localhost/myapp.xml. Kỹ thuật này có nghĩa là bạn có thể giữ nội dung của số META-INF sạch sẽ, đó là sự can đảm của ứng dụng web của bạn - Tôi không muốn mạo hiểm về sự can đảm trong webapp của tôi. :-)

+1

tiết kiệm lớn .. cảm ơn người đàn ông. tôi phải đặt nó vào META-INF và thêm ghi đè lên. (Tôi nghĩ rằng nó không hoạt động trong WEB-INF?) – dev

+0

@ piotr-czapla: Cảm ơn bạn đã chỉnh sửa câu trả lời của mình để sửa WEB-INF thành META-INF! – netjeff

+0

Làm cách nào để một tệp trong đường dẫn này được truy cập từ Java? Ví dụ: nếu tôi muốn tạo đối tượng Tệp thành '/ var/lib/tomcat5/webapps/test1/files/example.pdf' thì chuỗi đường dẫn được gán cho hàm tạo là gì? – beldaz

15

Tạo một tập tin trong một thư mục context.xml META-INF trong ứng dụng web của bạn có chứa:

<?xml version="1.0" encoding="UTF-8"?> 

<Context path="/myapp" allowLinking="true"> 

</Context> 

thêm ở đây: http://www.isocra.com/2008/01/following-symbolic-links-in-tomcat/

+0

Vâng, tất cả tôi phải làm là tạo ra một tập tin context.xml: /var/lib/Tomcat5/webapps/test1/META -INF/context.xml Liên kết đó rất hữu ích. Cảm ơn bạn. –

+0

Cảm ơn vì điều này. Bất kỳ ý tưởng làm thế nào để cấu hình tomcat (6) để luôn luôn làm theo các liên kết? –

+0

Các kỹ thuật tương tự hoạt động với Tomcat 6.0 để theo dõi các liên kết tượng trưng. – netjeff

1

Tôi đã thực hiện theo cách khác. Tôi chỉnh sửa tệp cấu hình khác: apache-tomcat-7.0.33/conf/máy chủ.xml Trong chủ tag Tôi nói thêm:

<Context path="/data" docBase="C:\datos" debug="0" reloadable="true" crossContext="false"/> 

Vì vậy, bạn có thể acces qua: http://localhost/data

6

Có, tôi biết đó là một câu hỏi cũ, nhưng tôi tìm thấy một giải pháp mới, sử dụng gắn với - tùy chọn -bind thay vì một liên kết tượng trưng, ​​và tomcat không cần bất kỳ cấu hình lại:

cd/var/lib/Tomcat5/webapps/test1/

file mkdir

gắn --bind/path/to/thực tế/upload/thư mục/tập tin file

1

Có 4 nơi Bối cảnh có thể sống.

  1. tomcatdir/conf/server.xml
  2. tomcatdir/conf/context.xml
  3. tomcatdir/conf/Catalina/localhost/appname.xml
  4. tomcatdir/webapps/appname/META-INF/context.xml

Trong trường hợp thuộc tính allowlinking tomcat 8 phải được chỉ định không có trong Ngữ cảnh nhưng trong thẻ Tài nguyên. Tomcatdir/conf/context.xml của tôi trông giống như thế này

<Context> 
<WatchedResource>WEB-INF/web.xml</WatchedResource> 
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> 
<Resources allowLinking="true" cachingAllowed="true" cacheMaxSize="100000" /> 
</Context> 

Giải pháp này hoạt động tốt cho tôi bây giờ. Nhưng tôi muốn chia sẻ cũng là sai lầm tôi đã làm trước khi đến giải pháp này.

Tôi đã xác định Tài nguyên cả trong tomcatdir/conf/server.xml và trong tomcatdir/conf/context.xml. Và allowLinking = "true" được thiết lập chỉ trong tomcatdir/conf/server.xml.

Điều tôi thấy là nếu bạn không chỉ định allowLinking, nó bằng với việc đặt nó thành false. Vì vậy, tôi đã xóa thẻ Tài nguyên khỏi server.xml và chỉ còn lại tomcatdir/conf/context.xml với thuộc tính allowLinking = "true" trong đó.