在JSP中将URL“名称”映射到控制器

3
我想知道在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 

URLs并不一定需要符合RESTful规范,但我在想是否可以通过Spring MVC实现这样的功能。

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

将URL列表保存在一个属性/消息文件中,例如:

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

然后使用<spring:message code="url.users.list" />或类似的方式生成URL。这已经是一种被广泛接受的解决方案了吗?这可能是一种不好的实践吗?
我之所以问,是因为在JSP中散布全URL似乎是不好的实践。如果25个URL位于“/admin”子目录下,并且我想将它们移动到另一个子目录“/backend”,会发生什么情况。
如果我忽略了重复的帖子或者有一个简单的解决方案,那么请原谅我,但这是一个很难找到具体答案的话题。
谢谢!

我建议阅读这份文档:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html。虽然有点长,但我认为它非常好地解释了如何使用Spring mvc创建控制器。你也可以查看这个页面来学习如何使用<c:url>标签:http://www.tutorialspoint.com/jsp/jstl_core_url_tag.htm。 - jlars62
1
我对控制器和Spring MVC的工作原理以及JSTL核心有相当全面的理解(和经验)。您能详细说明一下您的评论与我的帖子有何关系吗? - Mike
我很抱歉没有理解你问题的要点。不过我会很感兴趣看到答案的。顺便说一下,Play框架可以做到这一点。 :) - jlars62
@jlars62 - 我已经回答了自己的问题。 - Mike
1个回答

2

如果有人遇到这个帖子,我已经找到了一个解决方案,可以将名称映射到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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接