Java OSGiServiceTracker中的漂亮URL
我需要使用漂亮的URL向ServiceTracker注册servlet,即laJava OSGiServiceTracker中的漂亮URL,java,servlets,osgi,Java,Servlets,Osgi,我需要使用漂亮的URL向ServiceTracker注册servlet,即laapi/item/5 为了找到一种方法,我找到了一种看起来应该完全符合我的要求的方法,但它对我不起作用。当我使用类似api/item/*的URL注册一个servlet时,要访问它,我必须准确地使用该URL,包括*。它不会将*视为通配符 有没有办法在OSGi中获得漂亮的URL,或者使用api/item?id=5样式的URL是唯一的方法?如果可能的话,怎么做 这是我的代码: package hmi; import hmi
api/item/5
为了找到一种方法,我找到了一种看起来应该完全符合我的要求的方法,但它对我不起作用。当我使用类似api/item/*
的URL注册一个servlet时,要访问它,我必须准确地使用该URL,包括*
。它不会将*
视为通配符
有没有办法在OSGi中获得漂亮的URL,或者使用api/item?id=5
样式的URL是唯一的方法?如果可能的话,怎么做
这是我的代码:
package hmi;
import hmi.api.get.*;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.util.tracker.ServiceTracker;
public class HMIServiceTracker extends ServiceTracker {
public HMIServiceTracker (BundleContext context) {
super (context, HttpService.class.getName(), null);
}
public Object addingService (ServiceReference reference) {
HttpService httpService = (HttpService) super.addingService (reference);
if (httpService == null) {
return null;
}
try {
httpService.registerServlet ("/hmi/api/get/appliance_list", new ApplianceList(), null, null);
httpService.registerServlet ("/hmi/api/get/appliance/*", new Appliance(), null, null);
httpService.registerResources ("/hmi", "/web", null);
} catch (Exception e) {
e.printStackTrace();
}
return httpService;
}
public void removedService (ServiceReference reference, Object service) {
HttpService httpService = (HttpService) service;
httpService.unregister ("/hmi/api/get/appliance_list");
httpService.unregister ("/hmi/api/get/appliance/*");
httpService.unregister ("/hmi");
super.removedService (reference, service);
}
}
根据HTTP服务规范,所有路径都通过前缀匹配进行匹配。因此,您应该从url中删除
/*
。如果您使用api/item
注册servlet,那么该url下面的所有内容也将触发您的servlet
在servlet中,使用HttpServletRequest#getPathInfo()
获取api/item
之后的所有内容