用户登陆界面login.html的form表单,提交用户名username和密码password给动作Login.java处理,如果用户存在在库中,写入cookies并用response.sendRedirect跳转到login.jsp.但是我在login.jsp页面中使用如下句子,用户名却显示不出来,应该如何解决?login.jsp代码如下: 
<%@ page contentType="text/html;charset=gb2312"%> 
<% 
request.setCharacterEncoding("gb2312"); 
String strUserName=String.valueOf(request.getParameter("username")); 
%> 
<html> 
<head><title>Welcome</title></head> 
<body> 
<center><%=strUserName%> 欢迎你!</center> 
</body> 
</html> 还有就是从Login.java中获取username并要求在多个jsp跳转页面都能使用该用户名username,应该怎么做?(*注:不想用session来访问参数username,因为servlet中已经使用了cookies,再用session代码可读性会很差~)

解决方案 »

  1.   

    response.sendRedirect 网页从定项
    和请求转发你都没搞清楚吧
      

  2.   

    既然写到了cookies中就用${cookies[kye名]}
      

  3.   

    能不能具体点,如果使用cookies来读取的话,得到的会是个对象数组,也就是所有登陆过的用户名,但是我需要的只是该次请求时所输入的那个用户名~
      

  4.   

    上面说错了 很少在JSP 读COOKIE
    查了下以前写的
    是${cookie.kye名.value}COOKIE默认是存在于IE内存中 也有硬盘版 2种取值写法都一样
      

  5.   

    给你看看我的cookies段的代码,如下:
    response.setContentType("text/html;charset=gb2312"); 
    PrintWriter out = response.getWriter(); 
    String username = request.getParameter("username");
    String password = request.getParameter("password");  
    Cookie cookie=null; 
    Cookie[] cookies=request.getCookies();  try{ 
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();   
    Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatabase","root","");
    Statement sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
    ResultSet sqlRst=sqlStmt.executeQuery("select * from userInfo where username='" +username+ "' and password='" +password+"'");if(sqlRst.next()){
        if(cookies!=null){
           for(int i=0;i<cookies.length;i++){ 
                 if(cookies[i].getName().equals("username")){
                  response.sendRedirect("hasLogin.jsp");         //跳转到显示"你已经登陆"页面,并继续跳到login.jsp;
                   }
                 cookie=cookies[i];
               }//for结束
           }
        if((cookies==null)||(!cookie.getName().equals("username"))){
           int maxAge=3600;   //1小时(3600秒)cookie存活期   
           cookie=new Cookie("username","username");
           cookie.setMaxAge(maxAge);
           response.addCookie(cookie);
           }
          response.sendRedirect("index.jsp"); 
      }
    else{
          response.sendRedirect("login.html");  //form表单中输入的用户名不存在于数据库,返回登陆界面;
         }
      sqlRst.close();
      sqlStmt.close();
      conn.close();
       }catch(ClassNotFoundException e){
            System.out.print("数据库连接失败!"+e.toString());}
        catch(Exception sqle){
            out.println(sqle.toString());
    }
    }   
      

  6.   

    JSP 就这样写
    <%
      String username=null;
      Cookie[] c = request.getCookies();
      for (int i = 0; i < c.length; i++) {
        if (c[i].getName().equals("username")) {
          name = c[i].getValue();
        }
      }
    %><%=username%>说下jsp 是显示层 不适合写java脚本 
      

  7.   

    response.sendRedirect("hasLogin.jsp");        //跳转到显示"你已经登陆"页面,并继续跳到login.jsp; 
    这句的问题是,request请求中的参数username只能在Login.java中使用,然而跳转到hasLogin.jsp就失效了~
      

  8.   

    一般 用户数据都是放在session里 很少写cookierequest.getParameter("username") 
    是从请求正文获取参数,你请求中没有参数怎么取值,一般数据传递都是写在session ,request 2个范围中用范围要注意请求转发,和重定项的区别,请求转发要注意2种转发的区别,就是传递控制权
      

  9.   

     response.sendRedirect("hasLogin.jsp?username=username");
    这样写就可以在hasLogin.jsp 用request取出来
      

  10.   

    无语
    学servlet干什么直接看ssh吧
      

  11.   

    不是<%=name%>吗?怎么会是<%=username%>呢? 
      

  12.   

    response.sendRedirect("")
    是重定向 不会共享request 范围里面的数据
    要共享request范围里的数据就要使用请求转发
    这个问题很简单我就随便告诉你怎么解决吧
    首先在Servlet 里面获取到正确的用户 
    Cookie cookie = new Cookie("userName",userName);
    response.addCookie(cookie);
    response.sendRedirect("login.jsp");
    在login.jsp 里面用
    Cookie cookies[] = request.getCookies();
     for (int i = 0; i < cookies.length; i++) { 
        if (cookies[i].getName().equals("userName")) { 
             name = c[i].getValue();  
         } 
      } <%=name%> 就可以显示出用户的名字了
      

  13.   

    怎么我运行以后提示是这样的呢?    username 欢迎你!
    我是这样修改的:
    (Login.java部分)
    ... ...String username = request.getParameter("username"); ... ...
     if((cookies==null) ¦ ¦(!cookie.getName().equals("username"))){ 
          int maxAge=3600;  //1小时(3600秒)cookie存活期  
          cookie=new Cookie("username",username);       //这里是修改的部分
          cookie.setMaxAge(maxAge); 
          response.addCookie(cookie); 
          } 
          response.sendRedirect("index.jsp"); 
      } 
    else{ 
    ... ...(index.jsp部分)
    <% 
      String name=null; 
      Cookie[]c=request.getCookies(); 
      for (int i=0;i<c.length;i++){ 
        if (c[i].getName().equals("username")){ 
          name=c[i].getValue(); 
        } 
      } 
    %> <%=name%>
      

  14.   

    cookie=new Cookie("username",username);
    这句我的设想是:从String username = request.getParameter("username"); 获取用户名username(句子中的username),然后把它写入一个名为username的cookie中(句子中的"username"),但是句子中好象直接把username(括号中后面的username)当做值传递给index.jsp来处理了,所以才会显示
    "username 欢迎你!"
      

  15.   

    终于知道怎么弄了~因为username的使用有多种含义,所以容易混淆而且代码数据读取也有误,改一下变量就可以了~~~呵呵~看看我改的:
    response.setContentType("text/html;charset=gb2312"); 
    PrintWriter out = response.getWriter(); 
    String Username = request.getParameter("username"); 
    String Password = request.getParameter("password");  
    Cookie cookie=null; 
    Cookie[] cookies=request.getCookies();  try{ 
    Class.forName("org.gjt.mm.mysql.Driver").newInstance();  
    Connection conn=java.sql.DriverManager.getConnection("jdbc:mysql://localhost:3306/userdatabase","root",""); 
    Statement sqlStmt=conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY); 
    ResultSet sqlRst=sqlStmt.executeQuery("select * from userInfo where username='" +Username+ "' and password='" +Password+"'"); if(sqlRst.next()){ 
        if(cookies!=null){ 
          for(int i=0;i <cookies.length;i++){ 
                if(cookies[i].getName().equals("Username")){ 
                response.sendRedirect("hasLogin.jsp");        //跳转到显示"你已经登陆"页面,并继续跳到login.jsp; 
                  } 
                cookie=cookies[i]; 
              }//for结束 
          } 
        if((cookies==null) ¦ ¦(!cookie.getName().equals("Username"))){ 
          int maxAge=3600;  //1小时(3600秒)cookie存活期  
          cookie=new Cookie("username",sqlRst.getString("username")); 
          cookie.setMaxAge(maxAge); 
          response.addCookie(cookie); 
          } 
          response.sendRedirect("index.jsp"); 
      } 
    else{ 
          response.sendRedirect("login.html");  //form表单中输入的用户名不存在于数据库,返回登陆界面; 
        } 
      sqlRst.close(); 
      sqlStmt.close(); 
      conn.close(); 
      }catch(ClassNotFoundException e){ 
          System.out.print("数据库连接失败!"+e.toString());} 
        catch(Exception sqle){ 
            out.println(sqle.toString()); 

    }  我把
    String Username = request.getParameter("username"); 
    String Password = request.getParameter("password"); 
    中的username和password改为Username和Password,为的是避免在句子cookie=new Cookie("username",sqlRst.getString("username"));中 
    sqlRst.getString("username")的username引用错误.  sqlRst.getString("username")也可以改为username,效果也是一样的~