Spring + JSP для создания лучших практик

Интересно, есть ли какие-либо хорошие практики для адресации контроллеров Spring в JSP.

Предположим, что у меня есть контроллер:

@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}" />

Но очень сложно изменить URL-адрес. Если вы знакомы с Rails/Grails, то теперь вы решили, как решить эту проблему:

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

Но в Spring есть так много UrlMappers. Каждый UrlMapper имеет собственную семантическую и обязательную схему. Рельсы подобной схемы просто не работают (если вы не реализуете ее самостоятельно). И мой вопрос: есть ли более удобные способы решения контроллера JSP в Spring?

Ответ 1

Надеюсь, я понял ваш вопрос. Я думаю, что ваш вопрос о том, как поддерживать URL-адреса, когда строки url находятся в сопоставлениях jsp и контроллера.

Ваш контроллер должен делать логику, ваш 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 do

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

Ответ 2

Попробуйте использовать 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