2012-02-02 13 views
11

Gömülü bir jetty sunucusundan bir clientacesspolicy.xml dosyasını açığa çıkarmak istiyorum.Gömülü iskeleyi kullanarak belirli bir adreste belirli bir sınıf yolu kaynağına nasıl hizmet verebilirim?

Bulunduğum girişimi şöyle görünür:

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

Ama İskelesi'ne içinde programlı belirli bir URL'ye http://localhost:9000/clientaccesspolicy.xml

Nasıl bir sınıf yolu kaynak maruz bırakabilir erişen bir 404 olsun?

sayesinde bir ContextHandler aslında sunucu yukarı içeriği değil çünkü Andy

cevap

8

Kodunuz çalışmıyor. Küçük bir ayarlama, çalışmasının türünü oluşturacaktır, ancak gerçekten istediğiniz şeyi yapmak için kendi işleyicinizi yazmanız gerekir.

sürümü " eser tür": Bir dizin olarak

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

Ama, bu sürüm davranır /clientaccesspolicy.xml, bu /clientaccesspolicy.xml/ yönlendirir ve sonra XML dosyasının içeriğini görüntüler böylece. İstediğiniz gibi görünüyor Ne

url =>kaynak bir lookupının ResourceHandler bir sürümüdür. Jetty bunu yapan bir işleyiciyle birlikte gönderilmez, ancak ResourceHandler alt sınıfını oluşturabilir ve getResource'u geçersiz kılabilirsiniz. Bu durumda ContextHandler'a [veya istiyorum] ihtiyacınız olmayacak, sadece "/clientaccesspolicy.xml" için aramaları kontrol et ve doğru ClassPath Resource ile eşleştir.

+0

mükemmel, mükemmel bir ses verir! Teşekkürler – Andy

+0

güncellemesi - her iki öneri işe yaradı, ancak sadece ikincisi kullanılabilir bir istemci erişim ilkesi dosyası oluşturdu – Andy

17

Aslında, bir sınıf yolu kaynağı olarak sınıf yolunu kaydedebilirsiniz (şaşırtıcı bir şekilde).

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

Sonra sınıf yolunda ne olursa olsun dosyaları erişebilirsiniz. Bu yüzden bir file.xml dosyanız varsa, localhost: 9000/file.xml dosyasından sunulacaktır.

İlgili konular