下面代码什么地方错误,
第一次输入:
admin
1234
结果:都是空白
第二次输入:
asd
adf
结果:admin  1234
第三次输入:
www
123
结果:asd  adf以后每次以此类推
我现在是在同一页面出现这种问题,如果cookie在servlet中处理貌似没有这回事。求解<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%!
String username="";
String password="";
boolean point=false;
 %><% if (point) {
String name = request.getParameter("name");
String word = request.getParameter("word"); Cookie c = new Cookie("name", name);
c.setMaxAge(24 * 3600);
response.addCookie(c); Cookie k = new Cookie("word", word);
k.setMaxAge(24 * 3600);
response.addCookie(k); Cookie[] cookies = request.getCookies();
if (cookies!= null) {
for (int i = 0; i < cookies.length; i++) {
System.out.println(cookies[i].getValue()); if (cookies[i].getName().equals("name")) {
username = cookies[i].getValue().trim();
System.out.println(username);
}
if (cookies[i].getName().equals("word")) {
password = cookies[i].getValue().trim();
System.out.println(password);
}
}
} }

point = true;
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head> <body>
<form method="get" action="cookielogin.jsp">
用户名:
<input type="text" name="name" value="<%=username%>" />
<br>
密&nbsp;&nbsp;&nbsp;&nbsp;码:
<input type="password" name="word" value="<%=password%>" />
<br>
<input type="submit" value="登陆" />
</form> </body>
</html>

解决方案 »

  1.   

    你把name和word写入了response的Cookie;然后立即从request的Cookie中读取Cookie,那么显然只能是读取到上一次的结果;
    因为response的那份要等浏览器接收完毕后,下次发起请求时才能反映到request中。
      

  2.   

    thank you
    大概了解了,在同一个页面中的确有这个局限!
      

  3.   

    浏览器发起一个请求,走到你这个页面,你往response中写东西,让浏览器去写入cookie中(还没写)。同时你还从浏览器中去读request中的东西,当前请求中当然是上一次你写入cookie中的东西啊。
      

  4.   


    常规模式是:
    首先,检查request参数中是否有目标量;
    如有,则直接往response中写Cookie,因为即便request中有,也是要被覆盖掉才合理;
    没有,则尝试从Cookie中读取。
    最后,说一个你程序中最大的问题:
    <%!
        String username="";
        String password="";
        boolean point=false;
    %>
    JSP本质上就是Servlet,而Servlet是单例的,所以所有请求都会共用相同的成员变量。
    那么并发情况下,会乱的一屁一屁的。
      

  5.   


    cookie的存入和读取是在一次请求响应中的,所以在同一页面中只能保证三次正确(我测试的是这样)感谢楼上各位的回答,我想这个问题我已经明白了,thanks!