我用jsp 写了 注册页面,将信息插入数据库,刚开始老出现 中文乱码,搞了半天,终于不乱码了。但是,又出现一怪现象,我用刚才注册的用户信息登陆,老是与数据库中的信息不匹配。可是 ,如果 我把用户信息 直接从数据库企业管理器 添加进数据库,而不是从我编写的注册页面。这样,就看可以正常登陆。这是为什么呢?? 为什么呢??? 从网页添加进的信息和从数据库中直接添加的信息 有什么不同呢???

解决方案 »

  1.   

    首先我感觉还是你的编码问题,把你从数据库取出来的数据,和你从form里面获得数据,都打印出来看看,是不是有一方是乱码,然后还有可能是空格之类的问题
      

  2.   

    我把form里的数据和数据库中取出的数据 ,都打印出来 是一样的,我设置的密码都是数字。可是,在比较它们是否相等时,老是不相等。代码如下:
      userbenBO.java 文件  public boolean checkUser(String u,String p){


    boolean b=false;


    try {

    //sql注入漏洞

    ct=new ConnDB().getConn();

    //top 1表示查到一条记录就返回,提高查询速度
    ps=ct.prepareStatement("select top 1 passwd from users where username=?");
    System.out.println("比较密码前");
    ps.setString(1,u);

    rs=ps.executeQuery();

    if(rs.next()){

    //取出数据库的密码
    String dbPasswd=rs.getString(1);
    System.out.println(dbPasswd);
    if(dbPasswd.equals(p)){
    System.out.println("密码相等");
    b=true;
    }
    else{
    System.out.println("mi ma bu xiang deng");
    }

    }
    } catch (Exception e) {
    e.printStackTrace();
    // TODO: handle exception
    }finally{

    //关闭资源
    this.close();
    }

    return b;
    }login.java 文件代码response.setContentType("text/html");
    response.setCharacterEncoding("gbk");
    request.setCharacterEncoding("gbk");
    PrintWriter out = response.getWriter();


    //得到用户名和密码,验证用户是否合法

    String u=request.getParameter("username");

    String p=request.getParameter("password");
    System.out.println(u);System.out.println(p);
    //验证用户
    UserBeanBO ubb=new UserBeanBO();

    if(ubb.checkUser(u, p)){

    //用户合法

    //1.把成功登录的用户信息放入session【后面用到】

    UserBean ub=ubb.getUserBean(u);
    request.getSession().setAttribute("userInfo", ub);



    request.getRequestDispatcher("index1.jsp").forward(request, response);
    }else{

    //用户不合法

    request.getRequestDispatcher("index.jsp").forward(request, response);
    System.out.println("error");
    }
      

  3.   

    你确定是://取出数据库的密码
    String dbPasswd=rs.getString(1);
    System.out.println(dbPasswd);
    这个打印和
    System.out.println(p);
    这里是相同的?并且没有前后空格的区分?
    扫了一眼,你貌似全文都没有一个地方加trim的。
    还有这里:if(dbPasswd.equals(p)){
    你确保dbPasswd不为空么?你应该随手写上if(dbPasswd != null && dbPasswd.equals(p)){
    ........
    真不知道该叫你大姐呢还是小妹呢。。
    如果实在解决不了,把你整个工程发上了,我调试一下