【问题标题】:Mapping URL "names" to Controllers in JSPs将 URL“名称”映射到 JSP 中的控制器
【发布时间】:2013-08-17 00:04:49
【问题描述】:

我想知道 Spring MVC 中是否有办法将“url 名称”映射到 URL。例如:

list_users -> /admin/users/list
edit_user?id=123 -> /admin/users/edit/123 (or /users/edit?id=123)
list_programs -> /admin/programs/list

我来自 PHP 背景(特别是 Symfony),其中每个 URL/操作都有一个“路由名称”,您可以使用它在视图模板中创建 URL。在 Symfony 中,您可以在模板中执行以下操作:

{{ path('user_edit', { 'id' : 123} }}

//output = /admin/users/edit/123 

URL 不一定需要是 RESTful,但我只是想知道这样的事情是否可以使用 Spring MVC 来完成。

我考虑过的可能解决方案:

将 url 列在属性/消息文件中,例如:

url.users.edit=/admin/users/edit/{id}
url.users.list=/admin/users/list

然后使用<spring:message code="url.users.list" /> 或类似的东西来生成URL。这已经是普遍接受的解决方案了吗?这可能是不好的做法吗?

我问的原因是,将完整的 URL 分布在整个 JSP 中似乎是一种不好的做法。如果 25 个 URL 位于“/admin”子目录下,我想将它们移动到不同的子目录,比如“/backend”,会发生什么情况。

如果有重复的帖子,或者我忽略了一个简单的解决方案,但这是一个很难找到具体答案的话题,请原谅我。

谢谢!

【问题讨论】:

  • 我建议阅读此文档:static.springsource.org/spring/docs/3.2.x/…。它很长,但我认为它很好地解释了如何使用 Spring mvc 创建控制器。您可能还想查看此页面以了解如何使用 <c:url> 标签:tutorialspoint.com/jsp/jstl_core_url_tag.htm
  • 我对控制器和 Spring MVC 的工作原理以及 JSTL 核心有相当完整的理解(和经验)。您能否详细说明您的评论与我帖子中的任何内容有何关联?
  • 我很抱歉我错过了你的问题的重点。不过,我将有兴趣看到答案。附带说明一下,Play 框架就是这样做的。 :)
  • @jlars62 - 我已经回答了我自己的问题。

标签: spring jsp spring-mvc


【解决方案1】:

如果有人遇到这篇文章,我已经找到了一个将名称映射到 Spring MVC 的 URL 的解决方案:

https://github.com/resthub/springmvc-router

这个解决方案可以很好地完成工作,我特别喜欢您的所有 URL / 路由都能够保存在一个中心位置的事实。此实现使@RequestMapping 注释无用。

请记住以下几点:

确保您的调度程序 servlet 使用 * 作为 URL 参数。我花了一段时间才发现单独使用 / 是行不通的,并且会导致 URL 生成错误。

<servlet-mapping>
    <servlet-name>spring-dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2015-02-24
    相关资源
    最近更新 更多