JavaWeb 登入案例

看的黑马2019版JAVAWEB写的,加上了部分自己的理解,供备忘使用。

依赖工具:
Durid 连接池,SQLyog,Mysql 5.7

整体逻辑:
1、使用SQLyog连接数据库。供Utils类使用,Utils中主要是调用"druid.properties"配置文件(里面包含了SQL的密码等信息)。
2、DAO类(data acess object 数据访问对象类)中夹带SQL语句,负责查询访问数据库中的用户信息。
3、从DAO类中得到的用户信息,经过User类的封装,得到一个user对象。
4、通过得到的这个user对象,就可以在Servlet类中进行各种判断,从而进一步进行跳转等工作了。

JDBCUtils类

package cn.util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

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 getDateSource(){
    
    
        return ds;
    }
    /**
     * 获取连接connection对象
     */
    public static Connection getConnection() throws SQLException{
    
    
        return ds.getConnection();
    }
}

DAO类

package cn.dao;

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

public class UserDao {
    
    

    //声明JDBCTemplate 对象公用
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDateSource());

    public User login(User loginUser) {
    
    
        try {
    
    
            //1.编写sql  卡了个错误,要在sqlyog里面能跑才行,一开始错是因为sql语句错了
            String sql = "select * from user where username = ? AND password = ?";

            //调用query方法    .class (反射)
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<>(User.class)
                    , loginUser.getUsername(), loginUser.getPassword());

            return user;
        } catch (DataAccessException e) {
    
    
            e.printStackTrace(); //后期不会打印文件,会记录到日志里面
            return null;
        }
    }
}

User类

package cn.domain;

//用户实体类
public class User {
    
    
    private int id;
    private String username;
    private String password;

    public int getId() {
    
    
        return id;
    }
    public String getUsername() {
    
    
        return username;
    }
    public String getPassword() {
    
    
        return password;
    }
    public void setId(int id) {
    
    
        this.id = id;
    }
    public void setUsername(String username) {
    
    
        this.username = username;
    }
    public void setPassword(String password) {
    
    
        this.password = password;
    }
    @Override
    public String toString() {
    
    
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

LoginServlet类

package cn.web;

import cn.dao.UserDao;
import cn.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("/loginServlet")
public class LoginServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doGet(request,response); //调用和doGet一样的方法
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取请求参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //3.封装当前尝试登入的loginuser对象
        User loginuser = new User();
        loginuser.setUsername(username);
        loginuser.setPassword(password);

        //4.调用userdao的login方法
        UserDao dao = new UserDao();
        User user = dao.login(loginuser); //这里的user就是查询到的user

        //5.判断user
        if(user == null){
    
    
            //登入失败,转发跳转
            request.getRequestDispatcher("/failServlet").forward(request,response);
        }
        else{
    
    
            //登入成功  存储数据 & 转发到成功页面
            //setAttribute作用域是整个会话期间,在所有的页面都使用这些数据的时候使用
            request.setAttribute("user",user);
            request.getRequestDispatcher("/successServlet").forward(request,response);
        }
    }
}

两个跳转页面:
FailServlet类

package cn.web;

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

SuccessServlet类

package cn.web;

import cn.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域中共享的test对象  (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);
    }
}

猜你喜欢

转载自blog.csdn.net/abyss_miracle/article/details/113485210