2012-02-02 20 views
11

Tôi đang tìm cách để hiển thị tệp clientacesspolicy.xml từ một máy chủ cầu nối được nhúng.Làm thế nào tôi có thể phục vụ một tài nguyên classpath cụ thể tại một địa chỉ cụ thể bằng cách sử dụng cầu nối nhúng?

nỗ lực hiện tại của tôi trông như thế này:

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
capHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
HandlerList handlers = new HandlerList(); 
handlers.addHandler(capHandler); 
... 
httpServer.setHandler(handlers); 

Nhưng tôi nhận được một 404 truy cập http://localhost:9000/clientaccesspolicy.xml

Làm thế nào tôi có thể tiếp xúc với một nguồn lực classpath đến một URL được lập trình trong Jetty?

Cảm ơn, Andy

Trả lời

8

Mã của bạn không hoạt động vì một ContextHandler không thực sự máy chủ lên nội dung. Một điều chỉnh nhỏ sẽ làm cho nó loại công việc, nhưng để làm những gì bạn thực sự muốn, bạn sẽ cần phải viết trình xử lý của riêng bạn.

Các "loại tác phẩm" phiên bản:

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
capHandler.setHandler(resHandler); 

Nhưng, mà đối xử với phiên bản /clientaccesspolicy.xml như một thư mục, do đó nó chuyển hướng đến /clientaccesspolicy.xml/ và sau đó hiển thị nội dung của file XML.

gì nó trông giống như bạn muốn là một phiên bản của ResourceHandler mà có một tra cứu của url =>nguồn. Cầu tàu không giao hàng với người xử lý thực hiện điều đó, nhưng bạn có thể tạo một lớp con của ResourceHandler và sau đó ghi đè getResource. Trong trường hợp đó, bạn sẽ không cần [hoặc muốn] ContextHandler, chỉ cần kiểm tra các cuộc gọi đến "/clientaccesspolicy.xml" và ánh xạ nó tới Tài nguyên ClassPath đúng.

+0

âm thanh hoàn hảo, sẽ cho phép bạn sử dụng! Cảm ơn cập nhật – Andy

+0

- cả hai đề xuất đều hoạt động, nhưng chỉ có lần tạo thứ hai là tệp chính sách truy cập ứng dụng có thể sử dụng được – Andy

17

Thực ra, bạn chỉ có thể đăng ký một đường dẫn lớp làm tài nguyên đường dẫn lớp (đáng ngạc nhiên).

ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("/")); 
server.setHandler(resHandler); 

Sau đó, bạn có thể truy cập mọi tệp trong đường dẫn lớp học của mình. Vì vậy, nếu bạn có một file.xml nó sẽ được phục vụ từ localhost: 9000/file.xml.

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