日期:2014-05-18  浏览次数:20637 次

数据库里面的账号和密码却不能登录的问题??
我在做留言板,登录页面是logon.jsp,然后把它提交给logon.java的servlet处理,这个logon.java如下:
Java code

//用户登录处理方法,登录servlet的实现
package ch;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


import java.util.Collection;

import utils.*;

public class Logon extends HttpServlet
{
    public void doPost(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException
    {
        //取得用户提交的用户名和密码
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        
        //进行用户合法性验证
        UserInfo user=UserBean.logon(username, password);..........................................(1)
        
        //对登录结果进行处理
        RequestDispatcher dispatcher=null;
        if(user!=null)
        {
            //验证通过
            HttpSession session=request.getSession();
            session.setAttribute("session_userinfo",user);
            
            //跳转到留言列表servlet
            dispatcher=request.getRequestDispatcher("/ch/ArticleList");
        }
        else
        {
            //设置错误提示信息
            request.setAttribute("msg","登录失败!可能是用户名密码输入错误或者账号被锁定!");
            
            //跳转到用户登录页面
            dispatcher=request.getRequestDispatcher("/logon.jsp");
        }
        dispatcher.forward(request,response);
    }
}
    
    

我的UserBean.java如下:
Java code

//用户注册方法
package ch;

import java.sql.*;

import utils.*;
public class UserBean
{
       //用户登录
    public static UserInfo logon(String username,String password)
    {
        Connection conn=null;
        Statement st=null;
        ResultSet rs=null;
        try
        {
            //得到数据库的连接
            conn=DatabaseBean.getConnection();
            st=conn.createStatement();
            
            //生成查询用户信息的语句
            String sql="SELECT userid,username,password,email,type,status"+"FROM userinfo WHERE username='"
                       +username+"' AND password='"+password+"' AND status="+UserInfo.STATUS_NORMAL;
            
            //执行查询语句
            rs=st.executeQuery(sql);....................................................(2)
            while(rs.next())
            {
                //得到查询结果
                UserInfo user=new UserInfo();
                user.setUserID(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                user.setEmail(rs.getString(4));
                user.setType(rs.getInt(5));
                user.setStatus(rs.getInt(6));
                
                return user;
            }
        }
        catch(SQLException ex)
        {
            ex.printStackTrace(System.err);
        }
        finally
        {
            //关闭数据库的连接
            DatabaseBean.close(rs,st,conn);
        }
        return null;
    }
}

这两个java文件都能编译,控制台显示是(1)(2)有问题。同时我用(2)的这个sql语句也能够在数据库里面查询出想要的结果,sql语句应该也没错,但就是不能登录。我把数据库中显示的以前的账号和密码拿来登录,结果也不行。
  总之,问题就是数据库中的帐户密码不能登录,从来就没有登录成功过。
备注:若登陆成功,则会跳转到articlelist.jsp页面,但若单独访问这个页面,则报出500错误;于是我猜测,会不会是我的logon.java和UserBean.java都没有问题,而是我的articlelist.jsp有问题呢?望高手多多指教!

------解决方案--------------------
在跳转的语句后面加一个return;语句就行了。

比如在:
dispatcher=reques