在做学生管理系统,登录界面和登录验证代码如下,login.jsp:
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>学生管理系统用户登录</title>
</head>
<body>
<table align="center" width="800" border="0" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC">
<tr>
<td width="100%" height="200" align="left"><img src="Picture/book.jpg" width="100%" height="200" align="left"></img>
<td width="100" height="100" align="right"><img src="Picture/adb.jpg" width="100" height="100" align="right"></img>
</td>
</tr>
</table>
<%String button1=request.getParameter("button1"); %>
<%if(button1==null) {%>
<table align="center" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" height="100" ></td>
</tr>
<tr>
<td width="100%" align="justify">
<form method="post" action="login.jsp" name="login_form">
<p align="center">用户:<input type="text" name="userName" size="20"></input></p>
<p align="center">密码:<input type="password" name="password" size="20"></input></p>
<p align="center">
<input type="radio" name="systemrole" value="student">学生
<input type="radio" name="systemrole" value="teacher" >教师
<input type="radio" name="systemrole" value="administer">管理员</p>
<p align="center"><input align="left" class="buttonface" type="submit" value="确定" name="button1">
   <input class="buttonface" type="reset" value="重写" name="button2"></p>
</form>
</td>
</tr>
</table>
<%} else{
request.setCharacterEncoding("GBK");
String userName,password,systemrole;
userName=(String)request.getParameter("userName");
password=(String)request.getParameter("password");
systemrole=(String)request.getParameter("systemrole");
userName.trim();
password.trim();
systemrole.trim();
if((userName==null)||(password==null)){
response.sendRedirect("./login.jsp");
}
else{
Connection con=null;
Statement s=null;
ResultSet r=null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:stud","sa","110");
s=con.createStatement();
String sqlstring=null;
if(systemrole.equals("teacher")) sqlstring=new String("select * from teacher where Tno='"+userName+"' and Tpassword='"+password+"'");
else if(systemrole.equals("administer")) sqlstring=new String("select * from administer where Ano='"+userName+"' and Apassword='"+password+"'");
else if(systemrole.equals("student"))sqlstring=new String("select * from student where Sno='"+userName+"' and Spassword='"+password+"'");
r=s.executeQuery(sqlstring);
if(r.next()){
session.setAttribute("userName",userName);
response.sendRedirect("./"+systemrole+"/top.jsp");

}
else{
System.out.println("用户名和密码不正确!");
}
}
catch(Exception sql){

response.sendRedirect("./loginError.jsp");
}
finally{
con.close();
s.close();
} }
}
%>
</body>
</html>登录失败,有没有那个高手帮忙解决下?急救

解决方案 »

  1.   

    楼主确定跟数据库表一致性?
     
    jdbC连接正确?sql语句正确?前几天我就因为所写的sql语句与数据库不符合,害我瞎了几个晚上
      

  2.   

    第一,建议楼主统一编码,charset=GB18030,charset=ISO-8859-1,request.setCharacterEncoding("GBK");
    第二,if  userName==null那么在这里userName=(String)request.getParameter("userName");就会报异常信息
    第三,我建议你先把代码String sqlstring=null;改为String sqlstring="";if(systemrole.equals("teacher")) sqlstring=new String("select * from teacher where Tno='"+userName+"' and Tpassword='"+password+"'");改为sqlstring="select * from teacher where Tno='"+userName+"' and Tpassword='"+password+"'";进行登陆一次,看是否正常。还有,你登陆失败是验证通不过,还是报异常?
    在System.out.println(rs.next());看看是ture还是flase,当然如果你用了这句话,需要再用before移回去
      

  3.   

    跳出的页面是:type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: An exception occurred processing JSP page /login.jsp at line 8683:  response.sendRedirect("./loginError.jsp");
    84:  }
    85:  finally{
    86:  con.close();
    87:  s.close();
    88:  }
    89: 
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    root cause java.lang.NullPointerException
    org.apache.jsp.login_jsp._jspService(login_jsp.java:150)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.26 logs.
      

  4.   

    response.sendRedirect("./login.jsp");上一级路径 是response.sendRedirect("../login.jsp"); 2个点,一个点不知道是啥
      

  5.   

    con.close();
    s.close();
    换个顺序试试
      

  6.   

    con.close();
    s.close();
    换位子
      

  7.   

    con=DriverManager.getConnection("jdbc:odbc:stud","sa","110");
    System.out.println(con==null);//你加这个看看,你的con是不是空的
    s=con.createStatement();if(r.next()){
    session.setAttribute("userName",userName);
    response.sendRedirect("./"+systemrole+"/top.jsp");
    System.out.println("==============");//看插入起作用没
    }
      

  8.   


    通过指点,改了,有些效果,不过执行了catch里的代码