根据下面的代码给解释一下

accpfhjxyl 2011-08-31 06:32:36
我们书上原话是这么说的:
问题:如果不使用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>
--------------------
然后我分别验证了一下 使用转发 也能写入啊 请高手 给解释一下 是怎么回事啊
...全文
110 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gukuitian 2011-09-07
  • 打赏
  • 举报
回复
sessionid 生成于服务器,当有服务器接收到请求的时候,创建一个session,对应一个sessionid。对于浏览器来说,第一次访问,肯定是无session的,服务器响应后,才得到服务器分配的sessionid,通常是把它写入cookie,这样:下一次请求的时候,才能根据当前sessionid分辨出这个请求和之前的请求是相关联的。
[Quote=引用 2 楼 accpfhjxyl 的回复:]
刚才从新用转发验证了一下 当我第一次请求是 确实没有给我保存到cookie中
sessionid:D5C5476D53D40E82A618577E1C3AAD7 只有我自己打印的id

可是当我第二次点击的是很为什么就给我写入了那
sessionid:D5C5476D53D40E82A618577E1C3AAD75
ocookie name: JSESSIONID
cookie va……
[/Quote]
accpfhjxyl 2011-08-31
  • 打赏
  • 举报
回复
刚才从新用转发验证了一下 当我第一次请求是 确实没有给我保存到cookie中
sessionid:D5C5476D53D40E82A618577E1C3AAD7 只有我自己打印的id

可是当我第二次点击的是很为什么就给我写入了那
sessionid:D5C5476D53D40E82A618577E1C3AAD75
ocookie name: JSESSIONID
cookie value: D5C5476D53D40E82A618577E1C3AAD75
这是为什么那
gukuitian 2011-08-31
  • 打赏
  • 举报
回复
实践是检验真理的唯一标准,不用纠结于哪一本书。

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧