我使用的是restlet路由API http://localhost:8080/www.example.com/hello/ping 但我不知道如何使用这种方法:
/{projectName}/{wallName}
我已经看过了
Restlet routing nightmare?
有谁能告诉我
1.使用Restlet路由的最佳做法是什么?
2.如何在java中实现/{projectName}/{wallName}
3.如何从此API获取projectName
的值?
答案 0 :(得分:1)
实际上,Restlet应用程序中有几个部分。传统上,可以通过可以按如下所述创建的Restlet组件访问此应用程序:
独立模式(在应用程序服务器外部)
Component component = new Component();
component.setName("My component");
component.getServers().add(Protocol.HTTP, 8182);
MyApplication application = new MyApplication();
// To attach application on /www.example.com
component.getDefaultHost().attach("www.example.com", application);
// To attach application on /
component.getDefaultHost().attachDefault(application);
component.start();
容器模式(servlet支持)。对于此用例,您可以使用扩展名ext.servlet
。提供了一个自动包装组件的前端servlet。您只需指定应用程序实现的类,如下所述:
<!-- Application class name -->
<context-param>
<param-name>org.restlet.application</param-name>
<param-value>
packageName.MyApplication
</param-value>
</context-param>
<!– Restlet adapter –>
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>
org.restlet.ext.servlet.ServerServlet
</servlet-class>
</servlet>
<!– Catch all requests –>
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/*</url-pattern>
<!-- or -->
<!-- url-pattern>/www.example.com/*</url-pattern -->
</servlet-mapping>
您现在可以实现Restlet应用程序。对于此工具,扩展Application
的类。路由必须在其方法createInboudRoot
内定义,如下所述:
public MyApplication extends Application {
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/{projectName}/{wallName}", MyServerResource.class);
return router;
}
}
如您所见,为路径/{projectName}/{wallName}
附加了服务器资源。此服务器资源负责处理请求。实施样本如下所述:
public class MyServerResource extends ServerResource {
@Get
public Representation handleGet() {
String projectName = getAttribute("projectName");
String wallName = getAttribute("wallName");
(...)
}
}
希望它可以帮到你, 亨利