<%@ page language="java" import="java.util.*,java.sql.*,java.net.*;" pageEncoding="UTF-8"%>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url="jdbc:mysql://localhost:3306/Library_DB?";
String user="root";
String password="";
Connection conn= java.sql.DriverManager.getConnection(url,user,password);
Statement stmt = conn.createStatement();// 获取输入的用户名密码,在数据库的admin表中进行查找,以判断是否输入可以正确。
String username = request.getParameter("username");
String pwd = request.getParameter("password");
String sql = "select * from admin where username='"+username+"' and password='"+pwd+"'";
ResultSet rs = stmt.executeQuery(sql);if (rs.next())
{
// 设置session
HttpSession hs = request.getSession(true);
hs.setMaxInactiveInterval(6000); //设定用户最大发呆时间为6000s

// 将会话id和用户名传给下一个会话(session)
hs.setAttribute("LoginSessionID", hs.getId());
hs.setAttribute("username", username); stmt.close();
conn.close();
%>
<jsp:forward page="MainFrame.jsp"></jsp:forward>
<%
}else
{
stmt.close();
conn.close();
%>
<jsp:forward page="LoginError.jsp"></jsp:forward>
<%
}
%>
麻烦大家指点为什么每次发布都先跳转到LoginError.jsp错误页面啊。

解决方案 »

  1.   

    执行了else,你就看看为什么会执行else呀
    用户名、密码是否正确嘛!你mysql数据库没设密码?
      

  2.   

    if(rs.next()) 是false,你把SQL打印出来,然后去数据库执行看看有没有结果。
    有结果就是你获取connection那里错了
      

  3.   

    看看你的username和password对不对 之后再看结果集的rs有没有值 因该是你大意了吧
      

  4.   

    看上面的代码的意思你每次就是跳转到错误页面,然后执行的代码肯定就是else,那if就没有执行进去,那问题出现rs.next上,就是判断没有结果,那没结果就是你的sql语句在执行中没有结果或者你压根就没有执行sql语句,也有可能没连上数据库,你再调试一下。
      

  5.   

    连上数据库了,就是每次都先跳转到错误页面然后再跳转到MainFrame.jsp页面,应该是先执行else然后执行if吧
      

  6.   

    我擦,肯定会跳到err页面的啊,if(rs.next()){}esle{ close connection;<jsp:forward page="LoginError.jsp"></jsp:forward>
    }
    rs.next()为false了,肯定就执行else里面的代码啊,你应该在if上一行加boolean flag=true;
    在if{}里加入flag=false;else去掉,换if(flag){jsp:forword},连接的关闭放到最后。
      

  7.   

    Connection conn= java.sql.DriverManager.getConnection(url,user,password);
    System.out.println("Connection : " + conn) ; //看看数据库连接连上了没有
    PreparedStatement stmt = conn.createStatement();// 获取输入的用户名密码,在数据库的admin表中进行查找,以判断是否输入可以正确。
    String username = request.getParameter("username");
    String pwd = request.getParameter("password");
    String sql = "select * from admin where username=? and password=?";
    pstmt = conn.preparestatement(sql);pstmt.setString(1, username) ;
    pstmt.setString(2, pwd) ;ResultSet rs = pstmt.executequery();
      

  8.   

    加一句,rs.next()执行到最后肯定为false的,不管你有没有数据。
      

  9.   

    自己忽悠自己呢吧,走了else执行了<jsp:forward>就不会再转回当前页面,怎么可能执行if
      

  10.   

    不要用你的字符串的连接
    sql语句这样写:
    String sql="select *from admin where username=? and password=?";
    替换问号用:
    ps.setString(1,username);
    ps.setString(2,pwd);你这样再试试。
    再者,你做if else语句之前最好判断一下rs是否为空,如果为空的话直接跳转到错误页面
    不为空的话,在用if语句跳转。比较严谨的就是执行之前要判断rs是否为null
      

  11.   

    补充:ps指的是PreparedStatement用PreparedStatement不要用以前的Statement。
    PreparedStatement一是速度快,二是解决了sql注入的问题