Request-05-登录案例

5次阅读

共计 6623 个字符,预计需要花费 17 分钟才能阅读完成。

src 层

cn.itcast.dao

UserDao.java

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;

/**

  • 操作数据库中 User 表的类

*/
public class UserDao {

// 声明 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 = ?";
        //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;
    }
}

}

cn.itcast.domain

User.java

package cn.itcast.domain;

/**

  • 用户的实体类

*/
public class User {

private int id;
private String username;
private String password;

private String gender;

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

public String getHehe(){return gender;}

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 + '\'' +
            ", gender='" + gender + '\'' +
            '}';
}

}

cn.itcast.test(测试类)

UserDaoTest.java

package cn.itcast.test;

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

public class UserDaoTest {

@Test
public void testLogin(){User loginuser = new User();
    loginuser.setUsername("superbaby");
    loginuser.setPassword("123111");


    UserDao dao = new UserDao();
    User user = dao.login(loginuser);

    System.out.println(user);
}

}

BeanUtils.java

package cn.itcast.test;

import cn.itcast.domain.User;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

import java.lang.reflect.InvocationTargetException;

public class BeanUtilsTest {

@Test
public void test(){User user = new User();
    try {BeanUtils.setProperty(user,"hehe","male");
        System.out.println(user);

        String gender = BeanUtils.getProperty(user, "hehe");
        System.out.println(gender);
    } catch (IllegalAccessException e) {e.printStackTrace();
    } catch (InvocationTargetException e) {e.printStackTrace();
    } catch (NoSuchMethodException e) {e.printStackTrace();
    }





}

}

cn.itcast.until(工具类)

JDBCUtil.java

package cn.itcast.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import javax.xml.crypto.Data;
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();
}

}

cn.itcast.web(servlet 层)

servlet

LoginServlet.java

package cn.itcast.web.servlet;

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

}

SuccessServlet.java

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;

@WebServlet(“/successServlet”)
public class SuccessServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 获取 request 域中共享的 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);
}

}

FailServlet.java

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;

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

}

web 层

WEN-INF

lib

login.html

<!DOCTYPE html>
<html lang=”en”>
<head>

<meta charset="UTF-8">
<title>Title</title>

</head>
<body>

<form action="/day14_test/loginServlet" method="post">
    用户名:<input type="text" name="username"> <br>
    密码:<input type="password" name="password"><br>

    <input type="submit" value="登录">

</form>

</body>
</html>

正文完
 0