实现网站登录注册:
这是网站的登录功能
登录后的页面效果是这样的
先分享一下我碰到的问题
登录时,跳转的页面不正确(也即输入用户名之后数据传不到后台的问题)
原因是在写UserDaoImpl类时,没有return user,并且没有重写insertUser方法
public class UserDaoImpl extends BaseDao<User> implements UserDao {
@Override
public User findByUserName(String userName) {
String sql ="select user_id userId , user_name userName, user_pwd userPwd ,email from t_user where user_name = ?";
User user = getBean(User.class, sql, userName);
return user;
}
@Override
public int insertUser(User user) {
String sql ="insert into t_user values (DEFAULT,?,?,?)";
return update(sql,user.getUserName(),user.getUserPwd(),user.getEmail());
}
}
UserDao的实现类代码如上所示,它是要继承BaseDao,并且把BaseDao的泛型指定为User类,并且实现了UserDao接口,实现了其中findByUserName和insertUser方法。
改正后
出现如下错误
要把resources文件设置为Resource root
方法为右击resources,出现下拉框,选择
Mark Directory as - > Resource root
将其标记为Resource root文件,这样就不会报空指针异常错误。
第三个错误
用于加密的明文不可为空,是因为前端的login.html中的用户密码片段中的name="passWord"的passWord和loginServlet中的req.getParameter的参数不相同,所以参数传不进来而报错。
也即
(1)java.lang.RuntimeException: 用于加密的明文不可为空
at com.atguigu.utils.MD5Util.encode(MD5Util.java:18)
at com.atguigu.controller.loginServlet.service(loginServlet.java:37)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
(2)报这个错是因为login.html中的输入密码那边的name="passWord"和loginServlet中的
String userPwd = req.getParameter(“userPwd”);参数不对应;
要解决此问题,您应该检查代码,并确保为加密提供的明文不是空的或null。您还应该检查encode方法的输入参数,并确保它们正确映射到登录表单字段。
最后登录成功
注册阶段
提交响应后无法调用sendRedirect()
出现错误:
原因是
要用resp.setContextType(“text/html;charset=UTF-8”);来告诉浏览器传输什么形式的网页。
这里的text/html是传输文本形式的网页。
最后成功注册