首先,根据 http://my.oschina.net/letiantian/blog/366964的介绍创建项目HelloJSP。
在 web/目录下创建文件index.jsp:
<%--
Document : index
Created on : Jan 13, 2015, 11:24:35 AM
Author : letian
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<%!
int count = 0;
synchronized void addCount() {
count ++;
}
%>
<%
addCount();
session.setAttribute("name", "letian");
%>
<h1>第<%=count %>次被访问</h1>
<%=response.encodeURL("index.jsp") %>
</body>
</html>
禁用cookie后,重启浏览器,访问:http://localhost:8080/HelloJSP/index.jsp,可以看到:
这次请求的请求头为:
GET /HelloJSP/index.jsp HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Cache-Control: max-age=0
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=F9601165EF1988B1A7A60B7D82CD89F8; Path=/HelloJSP/; HttpOnly
Content-Type: text/html;charset=UTF-8
Content-Length: 350
Date: Tue, 13 Jan 2015 07:24:00 GMT
启用cookie,重启浏览器:
第一次访问http://localhost:8080/HelloJSP/index.jsp,如下:
HTTP请求头如下:
GET /HelloJSP/index.jsp HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Cache-Control: max-age=0
请求头中依然没有Cookie字段。
HTTP响应头如下:HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=857B1655EF5614E9C827B06FB407F512; Path=/HelloJSP/; HttpOnly
Content-Type: text/html;charset=UTF-8
Content-Length: 350
Date: Tue, 13 Jan 2015 07:26:14 GMT
由于启用了cookie,所以Set-Cookie给出的信息会存储到cookie中。
然后刷新浏览器,得到:
这一次输出的url中没有session信息了。看一下HTTP请求头:
GET /HelloJSP/index.jsp HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: JSESSIONID=857B1655EF5614E9C827B06FB407F512
Connection: keep-alive
Cache-Control: max-age=0
再看一下响应头:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 307
Date: Tue, 13 Jan 2015 07:28:15 GMT
据此, 可得response.encodeURL(String url) 的思路如下:
如果浏览器请求头中给出了cookie,那么对url什么都不做;如果没有cookie则认为浏览器可能禁用了cookie或者是第一次访问,在url中加入sessionid信息。