
java问题,高手请进,其他人就不要凑热闹了。谢谢
importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;i...
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)){
//登录成功 展开
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)){
//登录成功 展开
5个回答
展开全部
user的获取是根据用户名获取的。如果数据库中有这个用户名,则能够查询出user,则user不可能为null,所以user != null 表示的是用户名存在。
&& 表示且的意思
user.getPwd().equals(pwd) 表示的是 以这个用户名查询出来的这个用户的密码和输入的密码是否一致。如果一致,则equals返回为真,否则返回假。
整个的意思就是 有用户名且密码一致 则登录成功。
&& 表示且的意思
user.getPwd().equals(pwd) 表示的是 以这个用户名查询出来的这个用户的密码和输入的密码是否一致。如果一致,则equals返回为真,否则返回假。
整个的意思就是 有用户名且密码一致 则登录成功。
更多追问追答
追问
有用户名?是不是就是数据库中的用户名
为什么不这样写:
if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){
追答
可以这样写啊 意思是一样的。
展开全部
User user = dao.findByUsername(username);
这一句不是已经检测了用户名是否存在吗,不存在的话是null,存在的话就不是null,此时if语句就只需判断user是否为空即可,再检测一下密码是否正确就行了。
如果if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){的话,user若是null,则会报java.lang.NullPointerException这个异常。
这一句不是已经检测了用户名是否存在吗,不存在的话是null,存在的话就不是null,此时if语句就只需判断user是否为空即可,再检测一下密码是否正确就行了。
如果if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){的话,user若是null,则会报java.lang.NullPointerException这个异常。
更多追问追答
追问
if(user != null && user.getPwd().equals(pwd)){
user.getPwd().equals(pwd)中的user好像在该类中没有new吧
追答
User user = dao.findByUsername(username);
这句不是已经将对象查询了吗,有值的话就不需要new了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
,,,,, user是一个javaBean的对象,从前台获得响应,到servlet中封装属性到javaBean的对象中去.然后进行校验,,user!=null 是验证这个userBean的对象是否存在(因为不存在说明对象为null,), &&user.getPwd().equals(pwd)是从user对象里取出passWord 和数据库中的pwd 进行比较。 这是一个简单的验证。
更多追问追答
追问
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)){
追答
如果你不怕报,空指针异常也, 可以这样写.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
user !=null 是验证你输入的用户名是否在数据库中存在
user.getPwd().equals(pwd) 是验证你所输入的用户名密码是否与数据库中的相匹配
两者都符合就可以成功登录了
user.getPwd().equals(pwd) 是验证你所输入的用户名密码是否与数据库中的相匹配
两者都符合就可以成功登录了
追问
为什么不这样写:
if(user.getUsername().equals(uaernanme) && user.getPwd().equals(pwd)){
追答
如果user不存在就报空指针了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-03-24
展开全部
user 是通过方法到数据库查询出来的
如果没有这个用户名那么user对象就是null
如果有这个用户
那么就比对输入的密码和查询出来的密码是否一致
一致就可以登录了
所以是写的&&同时满足
如果没有这个用户名那么user对象就是null
如果有这个用户
那么就比对输入的密码和查询出来的密码是否一致
一致就可以登录了
所以是写的&&同时满足
更多追问追答
追问
假设数据库中有这些数据:
用户名 密码
张三 123
李四 456
当我在输入框中输入:张三 456后,会允许通过吗?谢谢
追答
不会
你输入“张三”
通过“张三”查询返回得到的user对象
其中pwd的值就是123
所以密码不匹配是不会登录成功的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询