当用URL-rewriting方式来管理Session的时候,通过以上两个方法把session ID写到URL中。
不同点是:两个方法确定是否需要包含session ID的逻辑不同。在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。
在使用URL重写的时候要注意,为了保证会话跟踪的正确性,所有的链接和重定向语句中的URL都需要调用encodeURL()或encodeRedirectURL()方法进行编码。另外,由于附加在URL中的session ID是动态产生的,对每一个用户是不同的,所以对于静态页面的相互跳转,URL重写机制无能为力。当然可以通过将静态页面转换为动态页面解决。
方法的执行:首先判断当前的Servlet是否执行了HttpSession对象的invalidate()方法,如果已经执行返回参数URL。接下来判断客户端是否禁用了Cookie,没有禁用直接返回参数URL,如果禁用,则在参数URL中附加session ID,返回编码后的URL。
采用了URL重定向,必须使用encoderRedirectURL()
摘一段API中的描述:
public java.lang.String encodeURL(java.lang.String url)
Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged. The implementation of this method includes the logic to determine whether the session ID needs to be encoded in the URL. For example, if the browser supports cookies, or session tracking is turned off, URL encoding is unnecessary.
For robust session tracking, all URLs emitted by a servlet should be run through this method. Otherwise, URL rewriting cannot be used with browsers which do not support cookies.
public java.lang.String encodeRedirectURL(java.lang.String url)
Encodes the specified URL for use in the sendRedirect method or, if encoding is not needed, returns the URL unchanged. The implementation of this method includes the logic to determine whether the session ID needs to be encoded in the URL. Because the rules for making this determination can differ from those used to decide whether to encode a normal link, this method is separated from the encodeURL method.
All URLs sent to the HttpServletResponse.sendRedirect method should be run through this method. Otherwise, URL rewriting cannot be used with browsers which do not support cookies.
具体的区别有时间去深究java源代码!!!
[转]http://www.cnblogs.com/zxp_9527/archive/2009/05/07/1452253.html
分享到:
相关推荐
Java 中 Cookie 被禁用后 Session...Java 中 Cookie 被禁用后 Session 追踪问题可以通过使用 encodeURL 或 encodeRedirectURL 方法来解决,这些方法可以确保服务器端可以获取 JSESSIONID 信息,从而实现 Session 追踪。
例如,在Servlet或JSP文件中,可以使用`HttpServletResponse`接口中的`encodeURL()`和`encodeRedirectURL()`方法来对URL进行编码。这两个方法的作用在于确保即使在没有Cookie的情况下,也能通过URL重写的方式维持...
`response.encodeRedirectURL(String url)`与`encodeURL()`类似,但它是为`sendRedirect()`方法设计的,用于在执行重定向时确保Session ID被正确地包含在新URL中。 以下是一个简单的JSP应用示例,展示了如何在关闭...
* 通过使用响应对象(即HttpServletResponse接口)的encodeURL()方法或encodeRedirectURL()方法可以获得ServletConfig对象。 六、HTTP请求结构 * HTTP请求结构由请求行、请求头、空行和请求数据组成。 * 请求行由...
* 使用 ServletConfig 对象可以通过响应对象的 encodeURL() 方法或 encodeRedirectURL() 方法获得。 * HTTP 请求结构由请求行、请求头、空行和请求数据组成。请求行由方法名、请求资源的 URI 和使用的 HTTP 版本 3 ...
如果客户端禁用了Cookie,可以通过URL重写的方式来传递Session ID,例如使用`response.encodeURL()`和`response.encodeRedirectURL()`方法。 Session对象的创建是在程序中首次调用`request.getSession()`时触发,...
另外,URL重写也是管理会话的一种方式,如`encodeURL()`和`encodeRedirectURL()`可以对URL编码,以便携带会话信息。 4. **JSTL与标签文件** JSP标准标签库(JSTL)提供了简化JSP页面的标签,包括核心标签库。例如...
Java中可以使用`HttpServletResponse.encodeURL()`、`HttpServletResponse.encodeRedirectURL()`等方法对链接进行编码,对于HTML元素内容,可以使用OWASP Java Encoder库,它的`HtmlEncoder.encodeForHTML()`方法能...
例如,`RequestDispatcher`接口可以用来转发请求或者重定向,`Request`对象的`getLocale()`方法可获取客户端的首选语言,`Response`的`encodeURL()`和`encodeRedirectURL()`方法用于在URL中添加Session ID,确保会话...
The default behavior of this method is to return encodeRedirectUrl(String url) on the wrapped response object. encodeRedirectUrl(String) - Method in interface javax.servlet.http.HttpServletResponse ...
- `response.encodeRedirectURL(java.lang.String url)`:用于重定向URL的重写。 - `response.encodeURL(java.lang.String url)`:用于常规URL的重写。 #### 五、Session的序列化与持久化 在高负载环境下,为了...
response.encodeRedirectURL("/url"); ``` 2. **Cookie**:Cookie是服务器发送到用户浏览器并保存在本地的一小段信息,下次用户请求同一服务器时,会携带Cookie信息一起发送。这种方式更常见,但也有局限性,如...
- **encodeURL(String url)** 和 **encodeRedirectURL(String url)**: 对URL进行编码,确保重定向或引用的安全性。 - **sendError(int)** 和 **sendRedirect(String)**: 分别用于发送错误状态码和重定向到另一个...
Java Servlet API说明文档 绪言 ... 谁需要读这份文档 这份文档描述了JavaServletAPI的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。 JavaServletAPI的组成 ...这两个软件包的同时...
4. encodeRedirectURL(String url):如果响应需要编码且是重定向,则返回带有会话ID的URL。 以上各接口和类是Java Servlet API的核心组成部分,涵盖了从客户端请求的接收、处理到对客户端响应的整个过程。理解并...