想了解Restlet Routing的基本概念

时间:2015-03-24 09:11:29

标签: java routing restlet

我使用的是restlet路由API http://localhost:8080/www.example.com/hello/ping 但我不知道如何使用这种方法:

/{projectName}/{wallName}
我已经看过了 Restlet routing nightmare?

有谁能告诉我

1.使用Restlet路由的最佳做法是什么?

2.如何在java中实现/{projectName}/{wallName}

3.如何从此API获取projectName的值?

1 个答案:

答案 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");
        (...)
    }
}

希望它可以帮到你, 亨利