Spring + JSP url构建最佳实践

时间:2010-03-27 08:13:16

标签: spring jsp spring-mvc

我想知道在JSP中是否有解决Spring控制器的良好实践。

假设我有控制器:

@Controller
class FooController {

  // Don't bother about semantic of this query right now
  @RequestMapping("/search/{applicationId}")
  public String handleSearch(@PathVariable String applicationId) {
    [...]
  }
}

当然在JSP中我可以写:

<c:url value="/search/${application.id}" />

但是很难改变网址。如果您熟悉Rails / Grails,那么现在您可以解决此问题:

redirect_to(:controller => 'foo', :action = 'search')

但是在Spring中有很多UrlMappers。每个UrlMapper都有自己的语义和绑定方案。 Rails一样的方案根本不起作用(除非你自己实现)。我的问题是:在Spring中有没有更方便的方法来解决JSP中的控制器?

2 个答案:

答案 0 :(得分:10)

我希望我理解你的问题。我想你的问题是当url字符串在jsp和控制器映射中时如何维护url。

您的Controller应该执行逻辑,您的JSP应该执行输出。构建Url应该是处理它的控制器的责任。所以

class SearchController {

  @RequestMapping("/search/{applicationId}")
  public String handleSearch(@PathVariable String applicationId) {
    [...]
  }

  public String getUrl(Long applicationId) {
      return "/search/" + applicationId;
  }
}

class StartController {
   private SearchController controller;

   @ModelAttribute("searchUrl")
   public String getSearchUrl() {
       return fooController.getUrl(applicationId);
   }
}

并在你的start.jsp中

 <c:url value="${searchUrl}" />

答案 1 :(得分:0)

尝试使用Apache作为重新映射URL的前端:

http://www.simonecarletti.com/blog/2009/01/apache-rewriterule-and-query-string/

这样,您可以将applicationId参数从查询字符串更改为友好的URL。

此外,这是mod_rewrite的文档: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html