我使用的是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? 对此没有更好的解决方案吗?
答案 0 :(得分:35)
还有来自3.1的ServletUriComponentsBuilder类,它以静态方式从当前请求构建URL。例如:
ServletUriComponentsBuilder.fromCurrentContextPath().path("/my/additional/path").build().toUriString();
它与servlet中<spring:url>
最接近。
答案 1 :(得分:20)
在Spring MVC 3.1中,您可以使用UriComponentsBuilder及其ServletUriComponentsBuilder子类。有一个例子here。您还可以在reference docs。
中阅读有关UriComponentsBuilder的信息答案 2 :(得分:2)
我会说
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;
}