我们书上原话是这么说的:
问题:如果不使用response进行重定向,而是使用getRequestDispatcher().forward();方式可以吗?
解答:不可以,应为使用response对象的sendRedirect()方法是将页面重定向到一个新的地址,即重新向服务器发送一个请求,服务器已经对上一个请求作出了处理,在客户端写入了cookie,如果使用转发的形式.那么服务器接受的是相同的请求并没有返回相应,因而在客户端没有写入cookie.
----------------
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>session练习</title>
</head>
<body>
<%
session.setAttribute("test", "hello");
response.sendRedirect("getCookie.jsp");
//request.getRequestDispatcher("getCookie.jsp").forward(request,
// response);
%>
</body>
</html>-------------------------------<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>session练习</title>
</head>
<body>
<%
out.println("sessionid:" + session.getId());
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
out.print("cookie name:" + cookies[i].getName());
out.print("<br/>");
out.print("cookie value" + cookies[i].getValue());
}
}
%>
</body>
</html>
--------------------
然后我分别验证了一下 使用转发 也能写入啊 请高手 给解释一下 是怎么回事啊 

解决方案 »

  1.   

    刚才从新用转发验证了一下 当我第一次请求是 确实没有给我保存到cookie中
    sessionid:D5C5476D53D40E82A618577E1C3AAD7 只有我自己打印的id可是当我第二次点击的是很为什么就给我写入了那
    sessionid:D5C5476D53D40E82A618577E1C3AAD75 
    ocookie name:  JSESSIONID
    cookie value:  D5C5476D53D40E82A618577E1C3AAD75
    这是为什么那 
      

  2.   

    sessionid 生成于服务器,当有服务器接收到请求的时候,创建一个session,对应一个sessionid。对于浏览器来说,第一次访问,肯定是无session的,服务器响应后,才得到服务器分配的sessionid,通常是把它写入cookie,这样:下一次请求的时候,才能根据当前sessionid分辨出这个请求和之前的请求是相关联的。