encodeURL和encodeRedirectURL之间的区别

javax.servlet.http.HttpServletResponse的javadoc对于encodeURLencodeRedirectURL遵循的规则之间的区别有点模糊,是否有这些确切规则的例子? encodeURL的输出何时与encodeRedirectURL不同?

举一个具体的例子,我已经生成了一个重定向url,我将与response.sendRedirect(url) 。 我得到了已经编码的url,但是我想为它添加一个参数,它的值是另一个url:

 param2=http://google.com 

我用这两个函数中的哪一个来编码?

encodeURL()用于servlet输出中的所有URL。 它可以帮助使用URL对会话ID进行编码。

encodeRedirectURL()仅与res.sendRedirect一起使用。 它还用于使用URL编码会话ID,但仅在重定向时使用。

Salam Alekom Abduallah,我寻找并寻找答案,我知道我会在stackoverflow或coderanch中找到它,在那里我找到了Charles Lyons的答案 ,我手中的书的作者现在这是一个令人愉快的巧合。

2008年8月9日上午11:41正好 – 不同之处在于encodeURL总是将会话ID写入URL(如果需要,例如因为cookie被禁用),而encodeRedirectURL包含额外的逻辑来确定是否需要写会话ID in。例如,给外国网站提供会话ID是一个非常糟糕的主意,因为这样他们就可以冒充用户的会话了。 因此,如果该URL位于当前Web应用程序中,则encodeRedirectURL将仅将jsessionid放在URL上,否则不执行任何重写。

Charles Lyons(SCJP 1。4,2003年4月; SCJP 5,2006年12月; SCWCD 1.4b,2004年4月)作者OCEJWCD研究伴侣Oracle考试1Z0-899(ISBN 0955160340)

我也发现了之前发布的这个答案 ,

发表于2006年4月19日上午8:02报告发布给主持人嗨,

encodeURL用于编码用于在forward和include机制中进行会话跟踪的url。 encodeRedirectURL对指定的URL进行编码,以便在sendRedirect方法中使用。

两者之间的主要区别在于,encodeRedirectURL方法的实现包括在将URL重定向到不需要或无效会话信息的不同上下文时确定是否需要在URL中编码会话ID的逻辑。 如果启用了cookie,则encodeURL方法不会附加seesion id。 除此之外,如果将URL重定向到不同的上下文(Web应用程序),则encodeRedirectURL不会附加会话信息。 由于进行此确定的规则可能与用于决定是否编码普通链接的规则不同,因此该方法与encodeURL方法分开。

希望这对你有所帮助。

谢谢

纳伦德拉·丹德