初学者的java项目笔记 - 1.登录接口制作

SQL搞一个student02数据库user表

前后端分离开发

先写接口,用postman去测一下接口,再开发页面。

IDEA新建工程

新建jar文件夹(web中的WEB-INF目录下)及所用jar包

新建jdbc.properties(在src目录下)

新建demo.utils.DBUtils

工具类

package demo.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.util.Properties;

public class DBUtils {
    private  static DataSource ds =null;
    private static final Properties PROPERTIES =new Properties();

    static {
        try {
            PROPERTIES.load(DBUtils.class.getResourceAsStream("/jdbc.properties"));
            ds= DruidDataSourceFactory.createDataSource(PROPERTIES);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public  static DataSource getDs(){
        return ds;
    }

}

新建demo.model.User

package demo.model;

public class User {
    private Integer id;
    private String  username;
    private  String nickname;
    private String password;
    private Boolean enabled;
    private Integer role;

    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 getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getEnabled() {
        return enabled;
    }

    public void setEnabled(Boolean enabled) {
        this.enabled = enabled;
    }

    public Integer getRole() {
        return role;
    }

    public void setRole(Integer role) {
        this.role = role;
    }
}

新建demo.dao.UserDao

package demo.dao;

import demo.model.User;
import demo.utils.DBUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;

public class UserDao {
    QueryRunner queryRunner=new QueryRunner(DBUtils.getDs());

    public User getUserByUsername(String username) throws SQLException {
        return queryRunner.query("select * from user where username=?",new BeanHandler<>(User.class),username);
    }


}

新建demo.service.UserService

package demo.service;

import demo.dao.UserDao;
import demo.model.User;
import demo.utils.CommonsUtils;

import java.sql.SQLException;

public class UserService {

    UserDao userDao=new UserDao();

    public Integer login(String username, String password) {
        try {
            User user =userDao.getUserByUsername(username);
            if (user==null){
                //说明用户名不存在,登录失败
                return CommonsUtils.USERNAME_NOTFOUND_OR_BAD_PASSWORD;
            }else{
                //说明用户名存在
                if (!user.getEnabled()){
                    //说明账户被禁用,不可用
                    return  CommonsUtils.ACCOUNT_DISABLED;
                }else {
                    //账户没有被禁用,比对密码
                    if (password.equals(user.getPassword())){
                        //密码相同,登录成功
                        return CommonsUtils.LOGIN_SUCCESS;
                    }else {
                        //密码输入错误,登录失败
                        return CommonsUtils.USERNAME_NOTFOUND_OR_BAD_PASSWORD;

                    }
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return CommonsUtils.OTHER_EXCEPTION;
    }
}

  在utils新建CommonsUtils接口

定义常量来分别标记

package demo.utils;

public interface CommonsUtils {
    //用户名不存在或者是密码错误的异常
    Integer USERNAME_NOTFOUND_OR_BAD_PASSWORD = -1;
    //账户被禁用
    Integer ACCOUNT_DISABLED = -2;
    //登录成功
    Integer LOGIN_SUCCESS = -3;
    //其他异常
    Integer OTHER_EXCEPTION = -4;

}

 新建demo.servlet.LoginServlet

package demo.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import demo.model.RespBean;
import demo.service.UserService;
import demo.utils.CommonsUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

/**
 * 处理登录页面和登录请求的接口
 */

@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    UserService userService =new UserService();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


    }

    /**
     * 在这里处理登录请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        Integer result= userService.login(username,password);
        RespBean respBean=null;
        if (result == CommonsUtils.ACCOUNT_DISABLED){
            respBean =RespBean.error("账户被禁用,登录失败");
        }else if (result == CommonsUtils.USERNAME_NOTFOUND_OR_BAD_PASSWORD){
            respBean =RespBean.error("用户名或者密码输入错误,登录失败");
        }else if (result == CommonsUtils.LOGIN_SUCCESS){
            respBean =RespBean.ok("登录成功");
        }else {
            respBean =RespBean.error("登录失败");
        }
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out=resp.getWriter();
        ObjectMapper om=new ObjectMapper();
        out.write(om.writeValueAsString(respBean));

    }
}

 在model中新建RespBean

package demo.model;

/**
 * 服务端响应的实体类,将来通过该对象来生成json
 */
public class RespBean {
    private Integer status;
    private String msg;
    private Object data;

    public static RespBean ok(String msg, Object data) {
        return new RespBean(200, msg, data);
    }

    public static RespBean ok(String msg) {
        return new RespBean(200, msg, null);
    }

    public static RespBean error(String msg, Object data) {
        return new RespBean(500, msg, data);
    }

    public static RespBean error(String msg) {
        return new RespBean(500, msg, null);
    }


    private RespBean() {
    }

    private RespBean(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

Application context可以改短一点 

点OK运行 

用Postman测试一下

http://localhost:8080/a/login

post方法测试一下

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值