Подтвердить что ты не робот

Как создать URI внутри контроллера в Spring 3

Я использую spring 3.0, и у меня есть очень простой вопрос, но не нашел ответа в Интернете. Я хочу создать путь (URI), как в моих JSP:

<spring:url value="/my/url" />

Но внутри контроллера. Какую услугу следует использовать? Спасибо!

Изменить: Может ли это быть связано с этим: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-resourceloader? Разве нет лучшего решения для этого?

4b9b3361

Ответ 1

Я бы сказал

request.getRequestURL() + "/my/url"

выполняет задание. Нет такой встроенной функциональности, spring: url вызывает UrlTag.class, который имеет метод ниже для генерации URL-адреса, вы можете использовать его в качестве вложения для вашего кода:

private String createUrl() throws JspException {
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
    HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
    StringBuilder url = new StringBuilder();
    if (this.type == UrlType.CONTEXT_RELATIVE) {
        // add application context to url
        if (this.context == null) {
            url.append(request.getContextPath());
        }
        else {
            url.append(this.context);
        }
    }
    if (this.type != UrlType.RELATIVE && this.type != UrlType.ABSOLUTE && !this.value.startsWith("/")) {
        url.append("/");
    }
    url.append(replaceUriTemplateParams(this.value, this.params, this.templateParams));
    url.append(createQueryString(this.params, this.templateParams, (url.indexOf("?") == -1)));

    String urlStr = url.toString();
    if (this.type != UrlType.ABSOLUTE) {
        // Add the session identifier if needed
        // (Do not embed the session identifier in a remote link!)
        urlStr = response.encodeURL(urlStr);
    }

    // HTML and/or JavaScript escape, if demanded.
    urlStr = isHtmlEscape() ? HtmlUtils.htmlEscape(urlStr) : urlStr;
    urlStr = this.javaScriptEscape ? JavaScriptUtils.javaScriptEscape(urlStr) : urlStr;

    return urlStr;
}

Ответ 2

Предложение Россена - золото.

Также существует класс ServletUriComponentsBuilder из 3.1, который статически ставит URL-адреса из текущего запроса. Например:

ServletUriComponentsBuilder.fromCurrentContextPath().path("/my/additional/path").build().toUriString();

Это самое близкое к <spring:url> в сервлете.

Ответ 3

В Spring MVC 3.1 вы можете использовать UriComponentsBuilder и его подкласс класса ServletUriComponentsBuilder. Вот пример этого здесь. Вы также можете прочитать о UriComponentsBuilder в справочных документах.