我在一个叫login的jsp中建立一个提交账号和密码的表单,然后action转到logined.jsp
以下是代码,但是无论对与错都是错误的,
请大家来看一看<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'logined.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
  
  <%
   String s=request.getParameter("zhanghao");
   String s1=request.getParameter("mima");
   ResultSet rs=null;
   Connection con=null;
    Statement stmt=null;
    String a="";
    String b="";
try{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
   String url="jdbc:oracle:thin:@192.168.1.135:1521:EVALUATE";
   
   String uid="testdb";
   String pwd="test";
  con= DriverManager.getConnection(url,uid,pwd);   
   stmt=con.createStatement();
   String sql="select * from zhanghaoguanli";   
   rs=stmt.executeQuery(sql); 
   while (rs.next())
   {
  a=rs.getString("zhanghao");
  b=rs.getString("mima");
  }  if(s.equals("a")&& s1.equals("b")){%>
   <jsp:forward page="success.jsp"></jsp:forward>
 <%  }
   else {%>
 <font color=blue> 账号或者密码错误,请重新输入!!!!!</font>
 
<jsp:forward page="login.jsp"></jsp:forward>
  <%  }
 
  
     
    }catch(Exception e){
   e.printStackTrace();
   }finally{
       rs.close();   
    stmt.close();   
    con.close(); 
   
   }%>
   
  
    
   
     </body>
</html>

解决方案 »

  1.   

    我输出来了。如果在while里面输出就是正常的,,但是我想定义2个账号。意思就是
    第一个账号是111,密码是222
    第二个账号是1,密码是2
    让他们两个输入都能通过。
    是不是应该定义数组,我在上面定义了String[]a=new String[10];
                                  String []b=new Stirng[10];
    然后应该怎么弄。如果下面直接写 while (rs.next())
       {
      a=rs.getString("zhanghao");
      b=rs.getString("mima");
      }
    类型就不匹配了、。
      

  2.   

    if(s.equals("a")&& s1.equals("b"))
    应该是
    if(s.equals(a)&& s1.equals(b))吧。
      

  3.   


      while (rs.next())
       {
      a=rs.getString("zhanghao");
      b=rs.getString("mima");
      }个人觉得是这里的问题吧,你通过rs.getString()取得的账号和密码,不一定正好是相互对应的账号-密码吧。
    是不是可以这样:
    利用String s=request.getParameter("zhanghao")得到页面提交的账号,直接在数据库里判断,到底有没有该账号,如果没有,提示:"账号不存在,请重新输入!"。如果存在该帐号,再利用String s1=request.getParameter("mima")得到页面提交的密码,与数据库中对应账号的密码进行比较,方法是:
    String sql="select mima from zhanghaoguanli where zhanghao='"+s+"'"  ;
    rs=stmt.executeQuery(sql); 
    if(s1==rs.getString("mima"))
    ... ...
    如果不相同,提示:“密码错误!”
      

  4.   

    楼上说的对了一半。我已经改成这样了,原来确实是错误的,是判断和a与b相等了。
    现在我的意思是想判断多个帐户,应该怎么养定义a和b。定义成数组下面类型就不匹配了
      

  5.   

    没有出NUllPointerException吗?不是的话你这样改看看
      a=rs.getString("zhanghao").trim();
      b=rs.getString("mima").trim();
      

  6.   

    String sql="select * from zhanghaoguanli where zhanghao='a'";   这样就只有1个返回结果了!你用if 和 while 就没有区别了!
      

  7.   

    if(s.equals("a")&& s1.equals("b")){[/color]""有严重问题啊!
      

  8.   


    while (rs.next()){
      a=rs.getString("zhanghao");
      b=rs.getString("mima");
    if(s.equals("a")&& s1.equals("b")){
    //跳转
      }
    }
    if语句写在外面的话,a和b的值取的是数据库中最后一条记录的值……  
      

  9.   

    s.equals("a")&& s1.equals("b")
    ………………
    s.equals(a)&& s1.equals(b)
    你把a和b的值打印出来看看不就什么都清楚了
      

  10.   

    答:可参考如下代码:
    boolean passIt=false;
    while (rs.next())
       {
      a=rs.getString("zhanghao");
      b=rs.getString("mima");
      if(s.equals(a)&& s1.equals(b))
      {
       passIt=true;
      }//if
     }//while
     if(passIt){%>
          <jsp:forward page="success.jsp"></jsp:forward>
     <%     }
       else {%>
     <font color=blue> 账号或者密码错误,请重新输入!!!!!</font> 
    <jsp:forward page="login.jsp"></jsp:forward>
      <%  }以上仅供你参考
      

  11.   

    java交流QQ“群26277577
    if(s.equals("a")&& s1.equals("b")) 这儿euals的参数错了"a" 表示字符串aa 表示一个变量,这个变量中存储了一个对象,封装了某个字符串在里面应该改成
    if(s.equals(a)&& s1.equals(b)) 这是个初级错误,建议复习基础知识,基本功过关了,再学习WEB编程
      

  12.   

    你先把数据库中取出来的用户和密码对应的存入一个hash表或者数组里,
    然后再与你想要的两个帐号比较,若两个帐号都存在,且密码正确则通过
      

  13.   

    你可以写两条sql,第一条根据输入的uid来查询表中有这个名字没,如果有,在写条sql,根据这个输入的名字查询密码,这些写在一个方法里面,点登录的时候同时执行就行了
      

  14.   

    你可以把s和s1作为sql语句中where的条件表达式,然后查询,
    这样你只要判断rs是否为空就可以判断用户是否合法了,也不用
    对rs进行其他的处理,而且多少用户没关系。
    因不知道楼主的具体应用需求,只是建议。
      

  15.   

    s.equals("a")&& s1.equals("b")呵呵,大家真的都是程序員嗎?......
      

  16.   

    给你个STRUTS判断的参考下public boolean checkUser(Login_inForm loginForm)throws Exception
    {
    st=con.createStatement();
    rs = st.executeQuery("select Password from Account where Username='" + loginForm.getName()+"'");
    //rs = st.executeQuery("select password from login where name='" + loginForm.getName()+"'");
    while(rs.next())
    {
    if(loginForm.getPassword().equals(rs.getString(1)))
    return true;
    }

    return false;
    }
      

  17.   

    肯定是取出来的值有问题啊. 查询的时候把用户名和密码放入到select语句中去.