import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import util.DBUtil;
import entity.User;
public class UserDAO {
public void save(User user) throws Exception{
Connection conn = DBUtil.getConnection();
PreparedStatement prep =
conn.prepareStatement(
"insert into t_user(username,pwd,age) " +
"values(?,?,?)");
prep.setString(1, user.getUsername());
prep.setString(2, user.getPwd());
prep.setInt(3, user.getAge());
prep.executeUpdate();
DBUtil.close(conn);
}
public User findByUsername(String username) throws Exception{
User user = null;
Connection conn = DBUtil.getConnection();
PreparedStatement prep =
conn.prepareStatement("select * from t_user " +
"where username=?");
prep.setString(1, username);
ResultSet rst = prep.executeQuery();
if(rst.next()){
user = new User();
user.setId(rst.getLong("id"));
user.setUsername(username);
user.setPwd(rst.getString("pwd"));
user.setAge(rst.getInt("age"));
}
DBUtil.close(conn);
return user;
}
}
import entity.User;
public class ActionServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String uri = request.getRequestURI();
String action = uri.substring(uri.lastIndexOf("/"),
uri.lastIndexOf("."));
if(action.equals("/regist")){
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
int age = Integer.parseInt(request.getParameter("age"));
//查看用户名是否存在,如果存在,提示
//用户换一个用户名,否则,将用户提交的信息
//插入到数据库。
UserDAO dao = new UserDAO();
try {
User user = dao.findByUsername(username);
if(user != null){
request.setAttribute("regist_error",
"用户名被占用");
request.getRequestDispatcher("regist.jsp")
.forward(request, response);
}else{
user = new User();
user.setUsername(username);
user.setPwd(pwd);
user.setAge(age);
dao.save(user);
response.sendRedirect("login.jsp");
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}else if(action.equals("/login")){
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
UserDAO dao =
new UserDAO();
try {
User user = dao.findByUsername(username);
//只有当用户名与密码与数据库中存放的
//信息匹配时,才允许登录系统
if(user != null && user.getPwd().equals(pwd)){
//登录成功
response.sendRedirect("main.jsp");
}else{
//登录失败
request.setAttribute("login_error",
"用户名或密码错误");
request.getRequestDispatcher("login.jsp")
.forward(request, response);
}
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
}
}
问题是:
从数据库中验证是否有该有户名和密码有则登录无则不登陆,为什么是这样写的呢?
if(user != null && user.getPwd().equals(pwd)){
//登录成功
有用户名?是不是就是数据库中的用户名
为什么不这样写:
if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){
可以这样写啊 意思是一样的。
追问假设数据库中有这些数据:
用户名 密码
张三 123
李四 456
当我在输入框中输入:张三 456后,会允许通过吗?谢谢
不允许通过 输入 张三 123才通过
追问不是说只要用户名和密码与数据库中数据相同就能通过呀,张三和456都有呀。我知道这是错的,但是不也不知到用户名和密码是怎么相互关联起来的,是怎么回事?
追答一个表中不是一条记录 一条记录的吗??
一条记录包括很多列,很多列构成了一个记录的属性。
张三 123 这是一条记录。
李四 456 也是一条记录。
但 张三 456 这条记录在数据库中不存在。
还有最后一个问题哈,
if(user != null && user.getPwd().equals(pwd)){
User user = dao.findByUsername(username);
假设我输入张三 123,在验证密码的时候,user.getPwd().equals(pwd)这句代码执行步骤是:
1.User user = dao.findByUsername(username);
2.。。。。
在步骤1中是怎么把张三传进去的,是不不是前面user != null传进去的,可是它是通过什么方式记住的(前面有传入一个张三),初学者,谢谢
public User findByUsername(String username) throws Exception{
User user = null;
Connection conn = DBUtil.getConnection();
PreparedStatement prep =
conn.prepareStatement("select * from t_user " +
"where username=?");
prep.setString(1, username);
ResultSet rst = prep.executeQuery();
if(rst.next()){
user = new User();
user.setId(rst.getLong("id"));
user.setUsername(username);
user.setPwd(rst.getString("pwd"));
user.setAge(rst.getInt("age"));
}
DBUtil.close(conn);
return user;
}
不是有这个函数,
conn.prepareStatement("select * from t_user " +
"where username=?");
从数据库中读取一条符合username的记录,如果有
则将数据库中的各列赋值给该user对象
user = new User();
user.setId(rst.getLong("id"));
user.setUsername(username);
user.setPwd(rst.getString("pwd"));
user.setAge(rst.getInt("age"));
然后将这个user 赋值给User user = dao.findByUsername(username);
if(user != null && user.getPwd().equals(pwd)){
user.getPwd().equals(pwd)中的user好像在该类中没有new吧
User user = dao.findByUsername(username);
这句不是已经将对象查询了吗,有值的话就不需要new了。
User user = dao.findByUsername(username);
能调用user.getPwd()吗?为什么能?
你是不是入门都还没入完,怎么这么个东西都不知道,不是有User.java这个vo类吗,里面肯定有相对应的set和get方法的。这些个方法的变量名是对应数据库相应的字段的。你这个要是不知道的话还是先把入门的东西搞懂再说吧。
1.user怎么是这个?
User user = dao.findByUsername(username);
2.user != null 与 user.getPwd().equals(pwd)中的user一样,是怎么回事?为什么不写成一样的
if(user != null && user.getPwd().equals(pwd)){
为什么不这样写:
if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){
如果你不怕报,空指针异常也, 可以这样写.
追问假设数据库中有这些数据:
用户名 密码
张三 123
李四 456
当我在输入框中输入:张三 456后,会允许通过吗?谢谢
注意编码问题,问题就不大。
为什么不这样写:
if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){
如果user不存在就报空指针了
假设数据库中有这些数据:
用户名 密码
张三 123
李四 456
当我在输入框中输入:张三 456后,会允许通过吗?谢谢
不会
你输入“张三”
通过“张三”查询返回得到的user对象
其中pwd的值就是123
所以密码不匹配是不会登录成功的
那段代码是:通过“张三”查询返回得到的user对象
追答对的
代码里就是通过用户名来查询用户信息
如果数据库中有这个用户的信息
那么信息就包含了用户名、密码等信息
如果数据库中没有这个用户
那么user就是null了
还有最后一个问题哈,
if(user != null && user.getPwd().equals(pwd)){
User user = dao.findByUsername(username);
假设我输入张三 123,在验证密码的时候,user.getPwd().equals(pwd)这句代码执行步骤是:
1.User user = dao.findByUsername(username);
2.。。。。
在步骤1中是怎么把张三传进去的,是不不是前面user != null传进去的,可是它是通过什么方式记住的(前面有传入一个张三),初学者,谢谢