2012-01-06 51 views
12

Tôi sử dụng spring 3.0 và tôi có một câu hỏi rất đơn giản nhưng không tìm thấy bất kỳ câu trả lời nào trên internet. Tôi muốn tạo đường dẫn (một URI) giống như trong các JSP của tôi:Cách tạo URI bên trong bộ điều khiển trong Spring 3

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

Nhưng bên trong bộ điều khiển. Dịch vụ liên quan để sử dụng là gì? Cảm ơn!

Chỉnh sửa: Có thể liên quan đến điều này: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/resources.html#resources-resourceloader? Không có giải pháp nào tốt hơn cho điều này?

Trả lời

2

tôi sẽ nói

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

làm cho công việc. Không có như vậy được xây dựng trong chức năng, mùa xuân: url gọi UrlTag.class có phương pháp dưới đây để tạo URL, bạn có thể sử dụng nó như một insőiration cho mã của bạn:

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; 
} 
+0

Đó là cách xấu để thực hiện việc này. Tôi cần dịch vụ được sử dụng bởi để tạo url ... Cần dọn dẹp, vui lòng – Nanocom

+0

Xấu theo cách nào? Không có dịch vụ như vậy, mùa xuân: url nhiều hơn hoặc ít hơn không giống nhau, xem nguồn đính kèm. –

+0

Ok, nếu bạn nói ... Nhưng thật điên rồ khi họ không nghĩ về điều đó, theo ý kiến ​​của tôi! – Nanocom

20

Trong Spring MVC 3.1 bạn có thể sử dụng UriComponentsBuilder và lớp con ServletUriComponentsBuilder của nó. Có một ví dụ về số here. Bạn cũng có thể đọc về UriComponentsBuilder trong reference docs.

+0

Cảm ơn bạn, nhưng tôi quên nói rằng tôi sử dụng Spring 3.0 ... Saw nó mới trong psring 3.1, vì vậy tôi cho rằng không có trình xây dựng URI nào trong Spring 3.0 – Nanocom

35

Đề xuất của Rossen là vàng.

Ngoài ra còn có lớp ServletUriComponentsBuilder từ 3.1 để xây dựng URL từ yêu cầu hiện tại theo kiểu tĩnh. Ví dụ:

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

Đó là điều gần nhất với <spring:url> trong servlet.

Các vấn đề liên quan