HTTP(十)-- HTTP综合案例

目录

1.  项目结构

2.  数据库结构

2.1  建立user表

 2.2  配置jbdc.properties文件

2.3  导入JDBCUtils工具类

3.  login.html页面的代码

4.  pojo层

5.  service层

6.  dao层

7.  web层

8.  效果图

8.1  当账号与密码都输入正确时:

8.2  当账号与密码输入不正确时:


登陆案例:

需求:

  1. 编写登录页面, 包含用户名,密码;
  2. 编写后台代码实现如下功能:
  • 用户名密码正确, 登陆成功, 在页面显示: "登陆成功"。
  • 用户名密码错误, 登陆失败, 在页面显示: "用户名密码不正确"。

1.  项目结构

 

2.  数据库结构

2.1  建立user表

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 2.2  配置jbdc.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day421
username=root
password=root
# 连接池的最大初始连接量
initialSize=5Q
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

2.3  导入JDBCUtils工具类

import com.alibaba.druid.pool.DruidDataSourceFactory;

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

//读取配置文件,初始化连接池,从连接池中获取连接
public class JDBCUtils {
    private static DataSource ds; //数据源/连接池

    static {
        try {
            //读取配置文件
            InputStream input = JDBCUtils.class.
                    getClassLoader().getResourceAsStream("jdbc.properties");
            //加载读取流
            Properties pro = new Properties();
            pro.load(input);
            //根据Properties创建数据源
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    public static DataSource getDataSource(){
        return ds;
    }

    public static Connection getConnection(){
        try {
            return ds.getConnection();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            return null;
        }
    }
}

3.  login.html页面的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

    <form action="http://localhost:8080/web/Servletlogin" method="post">
        用户名:<input type="text" name="username">
        <br>
        密码:<input type="password" name="password">
        <br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

4.  pojo层

User类:

public class User {
    private Integer id;
    private String username;
    private String password;

    public User() {
    }

    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    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 getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

5.  service层

UserService类:

import com.response.dao.UserDao;
import com.response.pojo.User;

public class UserService {

    public User login(User user){
        //调用dao
        UserDao userDao = new UserDao();
        User login = userDao.login(user);
        if(login!=null){
            login.setPassword("*****");
        }
        return login;
    }
}

6.  dao层

UserDao类:

import com.response.pojo.User;
import com.response.utils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

//和数据库交互
public class UserDao {
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    //登录方法,验证传入的User对象,用户名密码是否正确
    public User login(User user){
        String sql = "select * from user where username=? and password=?";
        List<User> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class),
                user.getUsername(),
                user.getPassword());
        if(list==null || list.size()==0){
            return null;
        }else{
            return list.get(0);
        }
    }
}

7.  web层

LoginServlet类:

package com.response.web;

import com.response.pojo.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;
import java.io.PrintWriter;

@WebServlet("/Servletlogin")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.解决乱码(请求和响应)
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");

        //2.接收数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        //3.将数据封装成user对象
        User user = new User(null, username, password);

        //4.调用service层,传入user对象
        UserService userService = new UserService();
        User login = userService.login(user);

        //5.判断查询结果是否为null
        PrintWriter out = response.getWriter();
        if(login==null){
            //6.为null.就响应用户名密码不正确
            out.write("用户名密码不正确");
        }else{
            //7.不为null,就响应登陆成功
            out.write("登录成功");
        }
    }

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

8.  效果图

8.1  当账号与密码都输入正确时:

8.2  当账号与密码输入不正确时:

 如果对你有帮助,请帮我点一下赞,我才有动力继续创作,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值