Получение пути (контекстного корня) к приложению в рестлете - PullRequest
4 голосов
/ 29 апреля 2010

Мне нужно получить корень приложения в классе ресурсов Restlet (он расширяет ServerResource). Моя конечная цель - попытаться вернуть полный явный путь к другому ресурсу.

Я сейчас использую getRequest().getResourceRef().getPath(), и это почти дает мне то, что мне нужно. Это не возвращает полный URL (например, http://example.com/app), оно возвращает мне / resourceName . Итак, две проблемы, с которыми я сталкиваюсь: одна - отсутствует схема (часть http или https) и имя сервера, другая - не возвращает туда, куда было смонтировано приложение.

Итак, учитывая личный ресурс в 'http://dev.example.com/app_name/person',, я бы хотел найти способ вернуться' http://dev.example.com/app_name'.

Я использую Restlet 2.0 RC3 и внедряю его в GAE.

Ответы [ 4 ]

2 голосов
/ 30 апреля 2010

Похоже, getRequest().getRootRef().toString() дает мне то, что я хочу. Я попытался использовать комбинацию вызовов методов getRequest().getRootRef() (например, getPath или getRelativePart ), но либо они дали мне то, что я не хотел, либо null .

1 голос
/ 11 ноября 2010

Просто получите базовый URL из контекста службы, затем поделитесь им с ресурсами и добавьте путь к ресурсу, если необходимо.

MyServlet.init():

String contextPath = getServletContext().getContextPath();
getApplication().getContext().getAttributes().put("contextPath", contextPath);

MyResource:

String contextPath = getContext().getAttributes().get("contextPath");
1 голос
/ 30 апреля 2010

request.getRootRef() или request.getHostRef()?

0 голосов
/ 15 октября 2014

Контекст сервлета доступен из приложения рестлета:

org.restlet.Application app = org.restlet.Application.getCurrent();
javax.servlet.ServletContext ctx = ((javax.servlet.ServletContext) app.getContext().getAttributes().get("org.restlet.ext.servlet.ServletContext"));
String path = ctx.getResource("").toString();
...