или другие странности. Кроме этого, я не думаю, что это намного лучше, чем манипуляции со строками.

отрим следующий код, отправляющий клиенту ответ HTTP 201 «Создан»:

    String url = "/app/things?id=42"; // example
    response.setStatus(HttpServletResponse.SC_CREATED);
    response.setContentType("text/plain");
    response.setHeader("Location", url);
    response.getWriter().print(url);

Он сообщает клиенту, что была создана новая «вещь» и что ее можно найти по URL/app/things?id=42, Проблема в том, что этот URL является относительным. Это было бы идеально для JSP, который можно записать следующим образом:

<img src="<c:url value="/things?id=42" />" />

Который будет производить следующий HTML:

<img src="/app/things?id=42" />

Что мы хотим для веб-приложений.

Но я не верю, что это то, что мы хотим для 201 заголовка местоположения ответа. Спецификация HTTPсостояния:

14.30 Расположение

Поле заголовка ответа Location используется для перенаправления получателя в местоположение, отличное от Request-URI, для завершения запроса или идентификации нового ресурса. Для 201 (Создано) ответов, Местоположение - это то, что нового ресурса, который был создан запросом. Для ответов 3xx местоположение ДОЛЖНО указывать предпочитаемый URI сервера для автоматического перенаправления на ресурс. Значение поля состоит из одного абсолютного URI.

       Location = "Location" ":" absoluteURI

Примером является:

       Location: http://www.w3.org/pub/WWW/People.html

Мой вопрос заключается в том, как правильно перевести этот относительный URL-адрес в абсолютный URL-адрес для заголовка Location для сервлетов.

Я НЕ верю, что с помощью:

request.getServerName() + ":" + request.getServerPort() + url;

Это правильное решение. Должен быть стандартный метод, обеспечивающий корректный вывод (чтобы можно было переписать URL и т. Д.). Я не хочу создавать хак.

Ответы на вопрос(5)

Ваш ответ на вопрос