Request登录案例

准备

 

 

 

 

 

 

 

 

 1.创建数据库

CREATE DATABASE day14;

USE day14;

CREATE TABLE USER(
id INT PRIMARY KEY AUTO_INCREMENT
username VARCHAR(32) UNIQUE NOT NULL
PASSWORD VARCHAR(32) NOT NULL 
);

 

 2.创建项目request_test

 

 

 

 3.导入html、配置文件、jar包

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/day14_text/loginServlet" method="post">
    用户名:<input type="text" name="username">
    <br>
    密  码:<input type="password" name="password">
    <br>
    <input type="submit" value="登录">
</form>
</body>
</html>

 

 

4.数据库和表创建好了,项目也搭建好了就可以——创建表对应的实体类了

创建cn.itcast.domain包和user类,user类对应着user表

 

package cn.itcast.domain;

/**
 * @author 旗木五五开
 * @create 2020-03-01 15:22
 * 用户的实体类
 */
public class User {
    private int id;
    private String username;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int 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 "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

决定先写servlet还是先写dao操作数据库的代码。一般先写dao

5.创建cn.itcast.dao,创建UserDao,提供login方法

 

package cn.itcast.dao;

import cn.itcast.domain.User;
import cn.itcast.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

/**
 * @author 旗木五五开
 * @create 2020-03-01 15:57
 * 提供操作数据库中User表的类。增删改的方法都应该放在这里
 */
public class UserDao {
//    声明公用的JDBCTemplate对象
//    JdbcTemplate需要通过数据库连接池对象创建
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    /**
     * 登录方法
     * @param loginUser 用户在页面上填写只有用户名密码的对象
     * @return user包含用户全部数据
     */
    public User login(User loginUser){
//        1.编写SQL
        String sql = "select * from user where username = ? and password = ?";
//        调用query方法,并封装对象
        User user = template.queryForObject(sql,
                new BeanPropertyRowMapper<User>(User.class),
                loginUser.getUsername(), loginUser.getPassword());
        return user;
    }
}

6.测试

package cn.itcast.test;

import cn.itcast.dao.UserDao;
import cn.itcast.domain.User;
import org.junit.Test;

/**
 * @author 旗木五五开
 * @create 2020-03-03 15:53
 */
public class UserDaoTest {

    @Test
    public void testLogin() {
//        3.创建user对象
        User loginuser = new User();
//        4.给对象赋值
        loginuser.setUsername("superbaby");
        loginuser.setPassword("123");
        /**
         * 密码填写错误会报错,需要处理异常,要不然程序无法继续执行
         * try/catch UserDao
         */
//        1.创建UserDao对象
        UserDao dao = new UserDao();
//        2.调用方法,需要传入user对象
        User user = dao.login(loginuser);
        System.out.println(user);
    }
}

7.修改UserDao

package cn.itcast.dao;

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

/**
 * @author 旗木五五开
 * @create 2020-03-01 15:57
 * 提供操作数据库中User表的类。增删改的方法都应该放在这里
 */
public class UserDao {
//    声明公用的JDBCTemplate对象
//    JdbcTemplate需要通过数据库连接池对象创建
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    /**
     * 登录方法
     * @param loginUser 用户在页面上填写只有用户名密码的对象
     * @return user包含用户全部数据,没有查询到返回null
     */
    public User login(User loginUser){
        try {
//        1.编写SQL
            String sql = "select * from user where username = ? and password = ?";
//        调用query方法,并封装对象
            User user = template.queryForObject(sql,
                    new BeanPropertyRowMapper<User>(User.class),
                    loginUser.getUsername(), loginUser.getPassword());
            return user;
        } catch (DataAccessException e) {
            e.printStackTrace();
            return null;
        }
    }
}

 

 8.编写cn.itcat.web.servlet.LoginServlet类,完成登录的具体逻辑

package cn.itcast.web.servlet;

import cn.itcast.dao.UserDao;
import cn.itcast.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;

/**
 * @author 旗木五五开
 * @create 2020-03-03 17:43
 */
@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);
//        4.调用UserDao的login方法,匹配数据库里的数据
        UserDao dao = new UserDao();
        User user = dao.login(loginuser);
//        5.判断user
        if(user==null){
//            登录失败,跳转到failServlet
            req.getRequestDispatcher("/failServlet").forward(req,resp);
        }else {
//            登录成功
//            1.存储数据,起名user,值就是user这个对象
            req.setAttribute("user",user);
//            2.转发
            req.getRequestDispatcher("/successServlet").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

 

 跳转到失败页面

 

package cn.itcast.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;

/**
 * @author 旗木五五开
 * @create 2020-03-03 18:05
 */
@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);
    }
}

 

 

跳转到成功页面

package cn.itcast.web.servlet;

import cn.itcast.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;

/**
 * @author 旗木五五开
 * @create 2020-03-03 18:05
 */
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        1.获取request域中共享的数据
//        强制类型转换
        User user =(User) request.getAttribute("user");
//        4.防止空指针异常
        if (user != null){

//        给页面写一句话

//        2.设置编码
            response.setContentType("text/html;charset=utf-8");
//        3.输出到页面上
            response.getWriter().write("登录成功"+user.getUsername()+",欢迎您");

        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

 

 编写完成

页面测试

随便输入

 

 

 

 

 

 

 

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

 

posted @ 2020-03-03 21:11  风萧萧路漫漫  阅读(402)  评论(0)    收藏  举报
// 改变博客标题
浏览器标题切换
浏览器标题切换end