encodeURL() vs encodeRedirectURL()

        当用URL重写方式来管理Session的时候,通过以上两个方法把session ID写到URL中。不同点是:两个方法确定是否需要包含session ID的逻辑不同。在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。

        下面来自于参看J2EE帮助文档。

  • java.lang.String encodeRedirectURL(java.lang.String url),对sendRedirect方法使用的指定URL进行编码。如果不需要编码,就直接返回这个URL。 之所以提供这个附加的编码方法,是因为在redirect的情况下,决定是否对URL进行编码 的规则和一般情况有所不同。所给的URL必须是一个绝对URL。相对URL不能被接收,会抛 出一个IllegalArgumentException。所有提供给sendRedirect方法的URL都应通过 这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。
  • java.lang.String encodeURL(java.lang.String url),对包含session ID的URL进行编码。如果不需要编码,就直接返回这个URL。Servlet引 擎必须提供URL编码方法,因为在有些情况下,我们将不得不重写URL,例如,在响应对应的 请求中包含一个有效的session,但是这个session不能被非URL的(例如cookie)的手 段来维持。所有提供给Servlet的URL都应通过这个方法运行,这样才能确保会话跟踪能够 在所有浏览器中正常运行。

        实际上看完之后还是不怎么理解,等等学完会话控制再探讨。。。。

原文地址:https://www.cnblogs.com/hxsyl/p/3422188.html