2012-10-03 93 views
12

在Spring MVC中,我知道如何在每个控制器和方法/操作中设置RequestMappingSpring MVC请求映射,这可以动态/可配置吗?

但是如果我想这是可配置的,所以比如我下面的控制器:

BlogController 
- with methods for listing blogs entries, single entry, new, update, etc. 
ArticleController 
- with methods for listing articles entries, single entry, new, update, etc. 

现在,在我的应用程序,管理员可以设置2个博客的网站,和1条部分,因此,网址是这样的:

www.example.com/article_section1/ - uses ArticleController 
www.example.com/blog1/ - uses BlogController 
www.example.com/blog2/ - uses BlogController 

也许一段时间后,管理员希望另一篇文章部分,所以他们只是配置一个新的部分,如:

www.example.com/article_section2/ 

这有工作动态/上即时而无需重新启动过程中的应用。

我的问题是只关心我将如何处理URL映射到我的控制器。

这怎么有可能与Spring MVC的?

我只知道如何在控制器或方法级别上使用@RequestMapping("/helloWorld")将URL映射到控制器,但这会使URL映射得到修复,并且不像我想要的那样进行配置。

更新:

我将在数据库中存储的路径,以及与映射到控制器的类型,以便像:

path     controller 
/article_section1/ article 
/blog1/    blog 
/blog2/    blog 
.. 

利用上述信息,我怎么能派遣请求正确的控制器?

同样,没有期待过载/重新部署,我意识到这将需要更多的工作,但其在规范:)

+1

你是怎么实现这个的?我处于类似的情况。 – DairyLea

回答

5

请问这种对你的URL映射的工作?

www.example.com/blog/1/ 
www.example.com/blog/2/ 

如果是的话,那很简单:春季3支持路径变量:http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html#mvc-ann-requestmapping-advanced

或者,你可以创建一个通用请求映射和你自己的子调度,读取配置文件,但我认为这是可能更多的工作比它的价值。

+3

我想完全控制网址,我知道关于路径变量的感谢。实际上,我将从数据库中读取路径,然后将请求以某种方式转发给正确的控制器,但不知道如何。 – loyalflow

0

不工作? @RequestMapping(“/ helloWorld *”)

2

在运行时真正更改请求映射可能很困难(并且由于小错误很容易发生,所以不推荐)。如果你仍然希望这样做,也许JRebel,更具体地说,LiveRebel对于实时重新部署代码和配置会很有趣。

否则,像其他职位的建议,RequestMappings支持通配符,在此范围应该在官方文档的快速阅读后予以明确。

+2

不,我想完全控制网址,所以这不起作用,我不想重新加载/重新部署任何代码。希望我能以某种方式将请求转发给正确的控制器。 – loyalflow

+3

编写您自己的HandlerMapping可能很有趣http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/servlet/HandlerMapping.html –

+0

感谢您的链接,这似乎根据要求我将不得不采取的方向。 – loyalflow

1

尝试用如下@RequestMapping通配符使用:

@RequestMapping(value="/article_section*/"} 
public void getArticle(....){ 
//TODO implementation 
} 

@RequestMapping(value="/blog*/"} 
public void getBlog(....){ 
//TODO implementation 
} 

希望这有助于!