我正在为nexus编写一个插件,我正在做一个response.sendRedirect,如下所示
String redirectUrl = url + "#nexus-search;gav"
+ "~net.collab.builds~teamforge~~~~"
+ "?" + req.getQueryString();
response.sendRedirect(response.encodeRedirectURL(redirectUrl));所形成的重定向url将类似于
http://domain/nexus/index.html#nexus-search;gav~net.collab.builds~teamforge~~~~?sfId=prpl1106&sfLoginToken=A237421CF755183D177F5C020752040F&isLoggedIn=true我在这里所做的是将旧请求对象中存在的查询字符串追加到新的url并重定向到它。
但是,我无法理解的是,当新的重定向url被击中时,我认为redirecturl中有查询字符串,所以没有得到查询字符串。我放置了断点,发现在完成重定向url之后,当它被处理时,查询字符串为null。
以下是疑问:
1)我做错了什么,使查询字符串消失了?
为了查看重定向是否顺利,我做了request.getCookie,发现cookie与旧请求中的cookie一样存在。那我哪里出问题了?我的新url查询字符串到哪里去了?
2)重定向url是否也有旧请求对象中的paramterMap。目前,重定向url中的paramterMap也是空的。我是否应该显式地从旧请求对象中获取并在重定向过程中将其作为响应。如何使旧请求对象中的参数映射在重定向过程中也被发送。
调试的更新:
当我用#nexus访问url时,就好像发生了一些奇怪的事情。
我在jira中将其作为nexus中的问题登录。
发布于 2013-10-21 07:02:12
你找到了解决办法。
问题在于查询字符串的附加位置。在代码中,我在我找到的片段(在#符号后面的一部分) .From搜索后追加了查询字符串
http://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/ https://www.rfc-editor.org/rfc/rfc3986#section-3.5
因此,这意味着在生成请求对象时不考虑片段。事实上,他们被抛弃了。
因此,解决方案是在正确的位置追加查询字符串。准确地说,将其附加到片段之前.
String redirectUrl = url + "?" + req.getQueryString(); + "#nexus-search;gav" + "~net.collab.builds~teamforge~~~~" ;所以这解决了我的问题。希望这对犯同样错误的人有帮助。谢谢
https://stackoverflow.com/questions/19477249
复制相似问题