第一天总结之后端登录功能的实现
第一天总结之后端登录功能的实现
追忆 往昔
于2023-01-13 23:00:18发布
489
收藏
分类专栏:
第一个项目之基于Mvc框架的锋迷网系统
文章标签:
java
mvc
tomcat
第一个项目之基于Mvc框架的锋迷网系统
专栏收录该内容
6 篇文章
0 订阅
订阅专栏
第一天总结之后端登录功能的实现
一、 前端页面
从图片 很明显知道 两个intput输入框 一个输入username 一个输入password
从前端的页面代码 可以找到form表单 根据form表单的action属性了解到 点击登录跳转到 controller 层的 LoginServlet 二、controller 层 创建一个 LoginServlet 用于接收页面的请求 获取前端页面 input输入框的 username 和 password 通过request.getParameter()方法获取 然后 将获取的 username和password 传到 service 层 用来进行业务判段 new 对象 调方法 获取返回值 true或false 判断 如果账号密码正确: 获取session 对象: 通过request.getSession() 获取session对象 然后将username 存放到 session域中 目的是为了 在主页面的 右上角显示 用户名 重定向到主页面的 servlet UserFuzzyServlet 如果账号密码错误: 重定向到登录页面 重新登录LoginServlet 代码如下:
package com.qfedu.controller; import com.qfedu.service.AdminService; import com.qfedu.service.impl.AdminServiceImpl; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.*; import java.io.IOException; @WebServlet(name = "LoginServlet", value = "/LoginServlet") public class LoginServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置请求字符集 防止post请求 中文乱码 request.setCharacterEncoding("utf-8"); //获取前端input输入框的username和password String username = request.getParameter("username"); String password = request.getParameter("password"); //获取service 对象 调用service方法 AdminService adminService =new AdminServiceImpl(); boolean login = adminService.login(username, password); if(login){ //登录成功 //设置session HttpSession session = request.getSession(); //设置session的时间 session.setMaxInactiveInterval(60*60); session.setAttribute("username",username); //设置默认属性 session.setAttribute("userDelete",true); session.setAttribute("userResetPassword",true); session.setAttribute("userUpdate",true); //跳转到主页面 //注意!! 如果直接重定向到页面 会将页面原本的数据覆盖 所以只能通过 重定向到指定servlet 然后由该servlet获取数据 带着指定数据 转发到页面 response.sendRedirect("UserFuzzyServlet"); }else{ //登录失败 回到登录界面 // request.getRequestDispatcher("/after/login.jsp").forward(request,response); response.sendRedirect(request.getContextPath()+"/after/login.jsp"); } } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } 三、service层 在service文件夹下创建一个 接口类 AdminService 对应登录的 业务逻辑 判断账号密码是否正确 书写抽象方法 boolean login(String username,String password); 参数为controller 层 的 servlet传过来的 username和password 返回值为boolean类型AdminService代码如下:
package com.qfedu.dao; import com.qfedu.entity.Admin; import java.util.List; public interface AdminDao { List<Admin> loginDao(String username); } 在service文件夹下的impl文件夹下创建 AdminServiceImpl 类 作为接口类的实现类 在其中实现 接口的方法 因为管理员只有一条数据 所以只需要通过 username 查询 将username 传递到dao层 进行数据库的操作 因为目的是 通过username查询数据 所以数据库的返回值为 存放对象的List集合 获取dao层数据库的操作返回的 存放对象的List集合 判断集合是否为空 如果不为空 然后集合中对象的password是否等于传入的password 正确返回true 否则返回falseAdminServiceImpl代码如下:
package com.qfedu.dao.impl; import com.qfedu.dao.AdminDao; import com.qfedu.entity.Admin; import com.qfedu.utils.BaseDaoUtil; import java.util.List; public class AdminDaoImpl extends BaseDaoUtil implements AdminDao { @Override public List<Admin> loginDao(String username) { String sql="select * from admin where username=? "; Object[] objs={username}; return super.query(sql,objs,Admin.class); } } 四、dao层 在dao文件夹下创建一个 接口类 AdminDao 对应登录的 数据库操作 通过封装的 sql语句和 username 查询数据 书写抽象方法 List<Admin> loginDao(String username); 参数为dao 层 的 service传过来的 返回值为boolean类型AdminService代码如下:
package com.qfedu.dao; import com.qfedu.entity.Admin; import java.util.List; public interface AdminDao { List<Admin> loginDao(String username); } 在dao文件夹下的impl文件夹下创建 AdminDaoImpl 类 作为接口类的实现类 并继承BaseDao类 从而直接使用其方法 在其中实现 接口的方法 因为utils工具包中 的 工具类 BaseDaoUtil 中 查询数据的方法的参数为 sql语句 Object[] 数组 和 实体类的class文件 所以需要将username 存放到 Object【】 数组中 书写sql语句 select * from admin where username=? 通过username查询出对应的数据 然后调用封装好的BaseDaoUtil进行查询操作AdminDaoImpl代码如下:
package com.qfedu.dao.impl; import com.qfedu.dao.AdminDao; import com.qfedu.entity.Admin; import com.qfedu.utils.BaseDaoUtil; import java.util.List; public class AdminDaoImpl extends BaseDaoUtil implements AdminDao { @Override public List<Admin> loginDao(String username) { String sql="select * from admin where username=? "; Object[] objs={username}; return super.query(sql,objs,Admin.class); } } 五、entity 实体类 在entity下创建Admin 实体类 属性要与表的数据字段一一对应 私有化属性 并添加get set方法 package com.qfedu.entity; public class Admin { private Integer id; private String username; private String password; public Admin() { } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "Admin{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }