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

时间:2013-08-14 20:39:14

标签: spring jsp spring-mvc

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

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.users.edit=/admin/users/edit/{id}
url.users.list=/admin/users/list

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

请记住以下几点:

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

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