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测试一下
post方法测试一下