我在Spring MVC 3.2应用程序中遇到了奇怪的行为,我注意到这只发生在重定向以另一种方式完成时;所以我的问题是:
-
正在做'redirect:/process' any不同于'redirect:process'用于重定向到内部控制器?
添加斜杠是否有任何影响,例如影响会话处理? 会话丢失(或会话属性丢失)的原因是什么?
我在应用程序中读取了一个值;即使我在许多情况下进行重定向,当我在控制器URI之前添加斜杠时,在生产上,我有时会失去这个值。
关于如何排除丢失的会话值的任何线索?
注意:我使用httpRequest.getSession().setAttribute
和httpSession.getAttribute
方法来访问会话
使用'/'声明从根目录的路径,这是您的servlet上下文路径。如果没有'/',它通常会指向一个相对于你当前子路径的路径。例如,如果你在'/go/url',你指向的是'/go/url/next',而不是'/next'。
我没有检查spring源代码,但这就是它在web浏览器中的工作方式。
编辑:对不起,在Spring MVC中,您必须始终提供完整路径,而不仅仅是相对路径。所以你应该输入"redirect:/full/path"
注意:/
是斜杠,反斜杠是。
除了外部原因导致的其他错误,redirect:process
和redirect:/process
都不应该改变任何东西,只要会话有关。
http://server.domain/myapp/local/part
的请求,redirect:process
将要求浏览器请求http://server.domain/myapp/local/part/process
,当redirect:/process
将要求浏览器请求http://server.domain/myapp/process
时。
您可能想要分析导致会话属性丢失的原因。一种方法是实现您自己的httpessionattributelistener并登录public void attributeRemoved(HttpSessionBindingEvent event)
实现。