Web服务端登录验证

 1.在Navicat for Mysql中创建登录用户表格

2.接下来需要用到idea,创建相关项目

注意:这里Project template一定要选择web application

3.创建不同的用户层架构

4.定义User类,并编写User部分相关代码

 

package com.iflytek.experiment.domain;

public class User {
    private String username;
    private String password;
    private String nickname;
    private String gender;
    private int role;

    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;
    }

    public String getNickname() {
        return nickname;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getRole() {
        return role;
    }

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

定义完之后,右键Generate生成getter()和setter()方法

5.创建用户相关的服务接口和实现类

 

 接口中定义用户登录服务方法:

package com.iflytek.experiment.service;

import com.iflytek.experiment.domain.User;

public interface IUserService {
    //登录
    User login(String username, String password);
}

实现类中实现用户登录服务:

package com.iflytek.experiment.service.impl;

import com.iflytek.experiment.dao.IUserDao;
import com.iflytek.experiment.dao.impl.UserDaoImpl;
import com.iflytek.experiment.domain.User;
import com.iflytek.experiment.service.IUserService;

public class UserServiceImpl implements IUserService {
    private IUserDao dao = new UserDaoImpl();

    @Override
    public User login(String username, String password) {
        return dao.selectByUsernameAndPassword(username, password);
    }
}

6.创建用户相关的数据访问接口和实现类

接口中定义数据操作的方法: 

package com.iflytek.experiment.dao;

import com.iflytek.experiment.domain.User;

public interface IUserDao {
    //根据用户名和密码查询用户
    User selectByUsernameAndPassword(String username, String password);
}

7.在pom.xml中导入数据库访问相关依赖

需要的依赖可在网站Maven Repository: Search/Browse/Explore (mvnrepository.com)中找到 

8.添加数据库配置文件,注意数据库名称和自己数据库密码要填写正确

9.创建数据库的工具类,获取数据库连接池 

package com.iflytek.experiment.utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

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

public class JdbcUtil {
    private static DataSource dataSource;

    static {
        // 读取资源目录下的配置文件,以输入流的方式返回
        InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
        Properties p = new Properties();
        try {
            p.load(is);
            dataSource = DruidDataSourceFactory.createDataSource(p);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static DataSource getDataSource(){
        return dataSource;
    }
}

10.dao层实现类中应用dbutils工具类

package com.iflytek.experiment.dao.impl;

import com.iflytek.experiment.dao.IUserDao;
import com.iflytek.experiment.domain.User;
import com.iflytek.experiment.utils.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import java.sql.SQLException;
import java.util.jar.JarEntry;

public class UserDaoImpl implements IUserDao {
    //创建dbutils工具类的操作方法
    //1、对于查询,使用query方法
    //2、对于增删改,使用update方法
    private QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());


    @Override
    public User selectByUsernameAndPassword(String username, String password) {
        //1.写SQL语句
        String sql ="SELECT * FROM user WHERE username=? AND `password`=?";
        //2.通过runner执行SQL语句
        try {
            User user = runner.query(sql,new BeanHandler<>(User.class),username,password);
            return user;
        } catch (SQLException e) {
           throw new RuntimeException("登录出现异常",e);
        }
    }
}

11.将登录页面放置/webapp/目录下,其他css文件等资源放入static目录 

这里可根据个人需求,编写登录页面

12. 创建登录servlet

 

package com.iflytek.experiment.web;

import com.iflytek.experiment.domain.User;
import com.iflytek.experiment.service.IUserService;
import com.iflytek.experiment.service.impl.UserServiceImpl;

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.UnsupportedEncodingException;

@WebServlet(name = "LoginServlet",value = "/login")
public class LoginServlet extends HttpServlet {
    //protected void doGet(HttpServletRequest request,HttpServletResponse response){
       // System.out.println("doGet");
    //}
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取用户提交的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println(username + " " + password);
        //服务器检验用户的输入
        //访问数据库 查询username和password对应的用户
        IUserService userService = new UserServiceImpl();
        //接口引用 = new 实现类()的对象
        User user = userService.login(username, password);
        if (user == null) {
            doGet(request, response);
        } else{
            //根据用户的身份进行对应的跳转
            if (user.getRole()== 1){
                System.out.println("当前登录用户是管理员");
            } else {
                System.out.println("当前登录用户是普通用户");
            }
        }
    }
}

13. 登录测试。运行服务器,打开登录页,输入用户名和密码进行测试

此时登录后无响应是正常的

 观察idea输出即可

 注意:需要修改配置内容

修改URL

 修改Application context的内容

第一次编写,有所不足,欢迎大家修改指正。

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值