第一天总结之后端登录功能的实现
一、 前端页面
从图片 很明显知道 两个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 否则返回false
AdminServiceImpl代码如下:
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 + '\'' +
'}';
}
}
版权声明:本文为qq_45889574原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。