首页 > 其他 > 详细

续写昨天的初识项目的搭建---账户登陆

时间:2020-03-14 12:10:50      阅读:85      评论:0      收藏:0      [点我收藏+]

续写昨天的初识项目的搭建

导入静态资源之后,从最底层开始写也就是dao层

分析项目功能(先查询是否有该用户,再验证密码)

我们创建一个得到登录用户的接口

public interface UserDao {
   public User getLoginUser(Connection connection,String userName);
}

然后创建实现类

public class UserDaoImpl implements UserDao {
   @Override
   public User getLoginUser(Connection connection, String userName) {
       PreparedStatement preparedStatement=null;
       ResultSet resultSet=null;
       User user=null;
       if (connection!=null){//如果有连接
           String sql="select*from user where userName = ?";
           Object[] params={userName};
           try {
               resultSet=BaseDao.excute(connection,sql,params,resultSet,preparedStatement);
               if (resultSet.next()){//如果有结果,才得到一个用户,并且用户信息都得到
                   user = new User();
                   user.setId(resultSet.getInt("id"));
                   user.setUserName(resultSet.getString("userName"));
                   user.setPassWord(resultSet.getString("password"));
              }
               BaseDao.closeSourse(resultSet,preparedStatement,null);//关闭资源
          } catch (SQLException e) {
               e.printStackTrace();
          }
      }
return user;
  }
}

然后我们要开始写service层

同样我们先创建一个接口用来接受账号密码得到用户

然后创建一个实现类

public class UserServiceImpl implements UserService {
   private UserDao userDao;
   public UserServiceImpl(){//每次调用先初始化
       userDao=new UserDaoImpl();
  }
   @Override
   public User login(String userName, String password) {
       Connection connection=null;
       User user=null;
       connection=BaseDao.getConnection();
       user = userDao.getLoginUser(connection, userName);  //这里查看是否有userName这个人
       BaseDao.closeSourse(null,null,connection);
       return user ;//没有就返回null,有就不为空
  }
}

最后才写servlet层

public class LoginServlet extends HttpServlet {
   //控制层调用业务层代码
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String username = req.getParameter("username");//得到前端输入的账号
       String passWord = req.getParameter("passWord");//得到前端输入的密码
       UserService userService = new UserServiceImpl();
       User user = userService.login(username, passWord);
       if (user!=null&&user.getPassWord().equals(passWord)){//有这个人,且密码正确可以登录
            req.getSession().setAttribute(Constants.USE_SESSION,user);
            resp.sendRedirect("/Maven_day01_war/index.jsp");
      }
       else
           resp.sendRedirect("/Maven_day01_war/err.jsp");
  }

雷区

数据库连接错误!真是致命,浪费我一两个小时查

这样的登录功能并不严谨

我们需要加个过滤器和优化功能注销防止直接登陆到主页

注销

写一个servlet层即可,注册一下

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
?
   req.getSession().removeAttribute(Constants.USE_SESSION); //移除用户
   resp.sendRedirect("/Maven_day01_war/login.jsp");
}

过滤器查看用户是否登录

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
?
  HttpServletRequest request=(HttpServletRequest) servletRequest;
  HttpServletResponse response=(HttpServletResponse) servletResponse;
  User user=(User) request.getSession().getAttribute(Constants.USE_SESSION);
  if (user==null){
      response.sendRedirect("/Maven_day01_war/err.jsp");
  }
  else
      filterChain.doFilter(servletRequest, servletResponse);
}

再注册一下

续写昨天的初识项目的搭建---账户登陆

原文:https://www.cnblogs.com/ltdh/p/12491146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!