写个登录的页面,调到最后发现从表单获得的密码总是不能和数据库里的密码相等,想不通为什么两个String都是"123456"用equals比较后返回的却是false……我把全部代码都贴出来了,看起来有点长,但不复杂的,求各位大虾指点迷津啊!!
servlet:package servlets;import beans.MessageBean;
import beans.ConnectionBean;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.io.IOException;
import java.sql.PreparedStatement;
public class Recognize extends HttpServlet{
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String user=request.getParameter("user").trim();
String password=request.getParameter("password").trim();
try{
byte b[]=user.getBytes("ISO-8859-1");
user=new String(b);
}
catch(Exception e){
}
HttpSession session=request.getSession(true);
MessageBean messageBean=new MessageBean();
session.setAttribute("message",messageBean);
if(checkUser(user,password)){
messageBean.setMessage("欢迎"+user+"登录(^o^)/");
response.sendRedirect("welcome.jsp");
}
else {
messageBean.setMessage("用户名或密码错误!请重新登录!");
response.sendRedirect("index.jsp");
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doPost(request,response);
}
public boolean checkUser(String id,String p){
try{
ConnectionBean cb=new ConnectionBean();
Connection con=cb.getConnection();
System.out.println("id="+id+" p="+p);
PreparedStatement sql=con.prepareStatement("select top 1 password from t_user where userName="+"'"+id+"'");
//sql.setString(1,id);
ResultSet rs=sql.executeQuery();
if(rs.next()){
String dbPassword=rs.getString(1);
System.out.println(dbPassword);
//=====================================================================
System.out.println(dbPassword.equals(p)); //dbPassword.equals(p) 返回的总是false
//=====================================================================
if(dbPassword.equals(p)) return true;
//=====================================================================
else return false;
}
else return false;
}
catch(Exception e){ }
return false;
}
}JSP:<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import="beans.MessageBean" %><jsp:useBean id="message" class="beans.MessageBean" scope="session" />
<html>
<head>
</head>
<body>
<center>
<form action="logmanager" method="post">
<label>用户名:</label><input type="text" size="20" name="user" style="width:120"/><br />
<label>密 码:</label><input type="password" size="20" name="password" style="width:120"/><br />
<input type="submit" value="登 录" name="submit" /> <a href="register.jsp">注册</a>
</form>
<jsp:getProperty name="message" property="message" />
</center>
</body>
</html>JavaBean:package beans;public class MessageBean{
private String message="";
public void setMessage(String s){
message=s;
}
public String getMessage(){
return message;
}
}
package beans;
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectionBean{
Connection con=null;
public Connection getConnection(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_user";
con=DriverManager.getConnection(url,"sa","123456");
}
catch(Exception e){
e.printStackTrace();
}
return con;
}
}
servlet:package servlets;import beans.MessageBean;
import beans.ConnectionBean;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.io.IOException;
import java.sql.PreparedStatement;
public class Recognize extends HttpServlet{
public void init(ServletConfig config) throws ServletException{
super.init(config);
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
String user=request.getParameter("user").trim();
String password=request.getParameter("password").trim();
try{
byte b[]=user.getBytes("ISO-8859-1");
user=new String(b);
}
catch(Exception e){
}
HttpSession session=request.getSession(true);
MessageBean messageBean=new MessageBean();
session.setAttribute("message",messageBean);
if(checkUser(user,password)){
messageBean.setMessage("欢迎"+user+"登录(^o^)/");
response.sendRedirect("welcome.jsp");
}
else {
messageBean.setMessage("用户名或密码错误!请重新登录!");
response.sendRedirect("index.jsp");
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
doPost(request,response);
}
public boolean checkUser(String id,String p){
try{
ConnectionBean cb=new ConnectionBean();
Connection con=cb.getConnection();
System.out.println("id="+id+" p="+p);
PreparedStatement sql=con.prepareStatement("select top 1 password from t_user where userName="+"'"+id+"'");
//sql.setString(1,id);
ResultSet rs=sql.executeQuery();
if(rs.next()){
String dbPassword=rs.getString(1);
System.out.println(dbPassword);
//=====================================================================
System.out.println(dbPassword.equals(p)); //dbPassword.equals(p) 返回的总是false
//=====================================================================
if(dbPassword.equals(p)) return true;
//=====================================================================
else return false;
}
else return false;
}
catch(Exception e){ }
return false;
}
}JSP:<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%@ page import="beans.MessageBean" %><jsp:useBean id="message" class="beans.MessageBean" scope="session" />
<html>
<head>
</head>
<body>
<center>
<form action="logmanager" method="post">
<label>用户名:</label><input type="text" size="20" name="user" style="width:120"/><br />
<label>密 码:</label><input type="password" size="20" name="password" style="width:120"/><br />
<input type="submit" value="登 录" name="submit" /> <a href="register.jsp">注册</a>
</form>
<jsp:getProperty name="message" property="message" />
</center>
</body>
</html>JavaBean:package beans;public class MessageBean{
private String message="";
public void setMessage(String s){
message=s;
}
public String getMessage(){
return message;
}
}
package beans;
import java.sql.Connection;
import java.sql.DriverManager;
public class ConnectionBean{
Connection con=null;
public Connection getConnection(){
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=db_user";
con=DriverManager.getConnection(url,"sa","123456");
}
catch(Exception e){
e.printStackTrace();
}
return con;
}
}
解决方案 »
- urlrewriter如何传递中文参数?
- struts2 遍历 map
- 关于try{}catch(){}的使用的问题。(回答就有分)
- 高分求教Eclipse3.2+Hibernate3.2+ant-1.7.0+sqlserver2000或mysql5.0 如何配置才能运行?
- Weblogic初始化问题!
- 江湖救急,各位大虾有空来坐坐
- 错误配置FiboEJB-client.jar,而引起ClassCastException异常
- 在线等,weblogic无法deploy,ejb.jar
- spring 初级问题,有时间请帮忙解决一下.
- 怎么在ibatis使用$往in里面传String参数
- Spring aop 配置
- js函数多参数获取
除非字符串后有空格。
页面来的字符串你trim了,数据库来的好像没有trim嘛
我不懂贴图啊!要不就把数据库的截图也发上来
System.out.println(dbPassword);
上面那个还有temp变量 p 都打印出来,比较一下,用equals方法比较下。。
看结果是啥
user=new String(b);
是将字符串加密吗?????
System.out.println(p);
System.out.println(dbPassword.equals(p));
这样测试一下吧。
还有你那个sql语句有点问题
直接select * from user where name = name and password =password 不就行了吗
你先别纠结于结果了。
把dbpassword和p的长度都打印出来看看。
这样就能看出问题了。
用以下代码看一下到底是些什么不可见字符再说吧 for (char c: dbPassword.toCharArray())
System.out.println(new Integer(c));32是空格,应该可以trim掉的。
49到54依次是1到6
去空格的代码是:dbPassword.trim();而且我还另外做了测试,定义了一个String"123456空格空格空格空格",用strim()后使用length,打印出的长度居然还是10!!!这是怎么回是?晕死……