用户登录验证小案例

本文介绍了一个用户登录验证的案例,包括创建login.html页面、使用Druid数据库连接池和JdbcTemplate操作MySQL,登录成功跳转SuccessServlet,失败则跳转FailServlet。详细步骤涉及项目配置、数据库环境设置、User类、JDBCUtils工具类、UserDao接口、LoginServlet、FailServlet和SuccessServlet的编写。同时,讲解了form表单action路径的写法和BeanUtils工具类的使用。
摘要由CSDN通过智能技术生成

用户登录:
     

用户登录案例需求:
1.编写login.html登录页面
username & password 两个输入框
2.使用Druid数据库连接池技术,操作mysql,day14数据库中user表
3.使用JdbcTemplate技术封装JDBC
4.登录成功跳转到SuccessServlet展示:登录成功!用户名,欢迎您
5.登录失败跳转到FailServlet展示:登录失败,用户名或密码错误

分析:
     *开发步骤
          1.创建项目,导入html页面,配置文件,jar包

        

 注:jar包最好放在模块文件夹的web/WEB-INF/lib文件夹里面,因为当我们启动服务器后,运行jsp文件时,系统会在WEB-INF里面寻找配置系统,如果没有放在WEB-INF中就会出现  org.apache.jasper.JasperException: This absolute uri http://java.sun.com/jsp/jstl/core) cannot be resolved in either web.xml or the jar files deployed with this application 提示的异常
          2.创建数据库环境

注:该配置文件放在src目录下即可


          3.创建包domain,创建类User

注:该User类中的成员名称和属性与数据库中的元素属性和名称需一样。


          4.创建包util,编写工具类JDBCUtils

注:该工具类用于使用Durid连接池

package util;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/*
JDBC工具类,使用Durid连接池
 */
public class JDBCUtils {
    private static DataSource ds;
    static {
        try {
        //1.加载配置文件
        Properties pro = new Properties();
        //使用ClassLoader加载配置 文件,获取字节输入流
        InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //2.初始化连接池对象
           ds=DruidDataSourceFactory.createDataSource(pro);
        }catch (IOException e){
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
    获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }
    /*
    获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
}


          5.创建包dao,创建类UserDao,提供login方法

注:UserDao类用于操作数据库中的数据,并构建登录的方法。

package dao;

import domain.User;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import util.JDBCUtils;

/*
操作数据库中User表的类
 */
public class UserDao {
    //声明JDBCTemplate对象共用
    private JdbcTemplate template =new JdbcTemplate(JDBCUtils.getDataSource());
    /*
    登录方法
    loginUser只有用户名和密码
    user包含用户全部数据,没有查询到,返回null
     */
    public User login(User loginUser){
        try {
            //1.编写sql
            String sql = "select * from User where username=? and password=?";
            //2.调用query方法
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), loginUser.getuserName(), loginUser.getPassword());
            return user;
        }catch (DataAccessException e){
            e.printStackTrace();//记录日志
        }
        return null;
    }
}


          6.编写web.servlet.LoginServlet类

注:该类用于服务器接收了用用户数据后,获取用户输入的参数,通过BeanUtils类封装参数然后调用UserDao中的login方法来判断用户输入的数据与数据库中的数据是否相同。

package web.servlet;
import dao.UserDao;
import domain.User;
import org.apache.commons.beanutils.BeanUtils;

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.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.设置编码
        req.setCharacterEncoding("utf-8");
      /*  //2.获取请求参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //3.封装user对象
        User loginUser = new User();
        loginUser.setuserName(username);
        loginUser.setPassword(password);*/
        //2.获取所有请求参数
        Map<String, String[]> map = req.getParameterMap();
        //3.创建User对象
        User loginUser = new User();
        //3.2使用BeanUtils封装
        try {
            BeanUtils.populate(loginUser,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //4.调取UserDao的login方法
        UserDao dao = new UserDao();
        User user = dao.login(loginUser);
        //5.判断user
        if(user==null){
            //登录失败
            req.getRequestDispatcher("/failServlet").forward(req,resp);
        }else {
            //登录成功
            //存储数据
            req.setAttribute("user",user);
            req.getRequestDispatcher("/successServlet").forward(req,resp);
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}


          7. 编写FailServlet和SuccessServlet类

注:这两个类分别用来响应登录失败和成功。

①成功类:

package web.servlet;
import domain.User;

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;
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取requset域中共享的user对象
        User user = (User)request.getAttribute("user");
        if(user!=null) {
            //给页面写一句话
            //设置编码
            response.setContentType("text/html;charset=utf-8");
            //输出
            response.getWriter().write("登录成功!" + user.getuserName() + "欢迎您!");
        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

②失败类:

package web.servlet;
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;
@WebServlet("/failServlet")
public class FailServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //给页面写一句话
        //设置编码
        response.setContentType("text/html;charset=utf-8");
        //输出
        response.getWriter().write("登录失败,用户名或密码错误");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}


          8.login.html中form表单的action路径的写法

注:虚拟目录+Servlet的资源路径。


          9. BeanUtils工具类,简化数据封装

注:用于封装JavaBean的。

最后:在数据库中存入相应的账号密码就可以完成用户登录的页面案例了。
            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值