我在做留言板,登录页面是logon.jsp,然后把它提交给logon.java的servlet处理,这个logon.java如下://用户登录处理方法,登录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如下://用户注册方法
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有问题呢?望高手多多指教!
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如下://用户注册方法
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有问题呢?望高手多多指教!
dispatcher=request.getRequestDispatcher("/ch/ArticleList");
return;
这里直接写,status FROM userinfo就可以了
如果用+ from前面应该有个空格啊
java.sql.SQLException: ORA-00600: 内部错误代码,参数: [ttcgcshnd-1], [0], [], [], [], [], [], [] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:542)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1311)
at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:797)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:1608)
at oracle.jdbc.driver.OracleStatement.doExecute(OracleStatement.java:1758)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1805)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:410)
at ch.UserBean.logon(UserBean.java:82)
at ch.Logon.doPost(Logon.java:28)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)
只是给个提示
用户名密码都正确 为什么不行?
原因一:代码有问题
原因二:数据库中字段类型为char (10)吧 但是你的名字或密码就只有6位
其他的4位就为空格了
所以你比较就不会一样了
解决办法 使用varchar