简单登录注册功能

整体结构
在这里插入图片描述
首先mysql创建用户表:
在这里插入图片描述
创建JDBC.properties
在这里插入图片描述
编写JDBCUtils类

package com.xf.utils;

import org.apache.jasper.tagplugins.jstl.core.Catch;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/**
 * @author xfgg
 */
public class JDBCUtils {
    private static String url=null;
    private static String username=null;
    private static String password=null;

    public JDBCUtils(){
        Properties prop = new Properties();
        InputStream in = JDBCUtils.class.getResourceAsStream("/JDBC");
        try {
            prop.load(in);
            url=prop.getProperty("url");
            username=prop.getProperty("username");
            password=prop.getProperty("password");
            String driver = prop.getProperty("driver");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static Connection getconn() throws SQLException{
        return DriverManager.getConnection(url,username,password);
    }
    public static void close(Statement statement,Connection connection){
        if(statement!=null){
            try{
                statement.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    public static void close(PreparedStatement preparedStatement,Connection connection,ResultSet resultSet){
        if(preparedStatement!=null){
            try{
                preparedStatement.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
        if (connection!=null){
            try {
                connection.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
    }
        if(resultSet!=null){
            try {
                resultSet.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
}

在这里插入图片描述
其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。
resultset是返回结果集

编写user类

package com.xf.bean;

public class user {
    private int id;
    private String name;
    private String password;
    private String role;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }
}

编写userDao类

package com.xf.Dao;


import com.xf.bean.user;
import com.xf.utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author xfgg
 */
public class userDao {
    public user login(String username,String password){
        user u =null;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try{
            connection = JDBCUtils.getconn();
            String sql = "select * from user where name=? and password=?";
            preparedStatement =(PreparedStatement)connection.prepareStatement(sql);
            preparedStatement.setString(1,username);
            preparedStatement.setString(2,password);
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()){
                u=new user();
                u.setName(resultSet.getString("name"));
                u.setPassword(resultSet.getString("password"));
                System.out.println("登录成功");
            }else{
                System.out.println("用户名或者密码错误");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(preparedStatement,connection);
        }
        return u;
    }
    public void addUser(user user){
        Connection connection=null;
        PreparedStatement preparedStatement=null;
        try{
            connection=JDBCUtils.getconn();
            String sql="insert into user(id,name,password,role)values(?,?,?,?);";
            preparedStatement = (PreparedStatement)connection.prepareStatement(sql);
            preparedStatement.setInt(1,user.getId());
            preparedStatement.setString(2,user.getName());
            preparedStatement.setString(3,user.getPassword());
            preparedStatement.setInt(4,user.getRole());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(preparedStatement,connection);
        }
    }
}

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.xf.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.xf.servlet.RegisterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/RegisterServlet</url-pattern>
    </servlet-mapping>
</web-app>

编写Login.jsp

<%--
  Created by IntelliJ IDEA.
  User: xfgg
  Date: 2020/6/19
  Time: 18:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
    <style type="text/css">
        body{
            background-repeat: no-repeat;
            background-position: center;
        }
    </style>
</head>
<body>
<div style="text-align: center;margin-top: 120px">
    <form action="LoginServlet" method="post">
        <table style="margin-left:40%">
            <marquee width="200" scrolldelay="250">用户登录</marquee>

            <tr>
                <td>用户名:</td>
                <td><input type="text" size="21" name="username"/></td>

            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="text" name="password" size="21"/></td>
            </tr>

        </table>
        <input type="submit" value="登录"/>
        <input type="reset" value="重置"/>
    </form>
    <br>
    <a href="register.jsp">注册</a>
</div>
</body>
</html>

编写register.jsp

<%--
  Created by IntelliJ IDEA.
  User: xfgg
  Date: 2020/6/19
  Time: 18:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册界面</title>
    <style type="text/css">
        body{
            background-repeat: no-repeat;
            background-position: center;
        }

    </style>
</head>
<body>
<div style="text-align: center;margin-top: 120px">
    <form action="RegisterServlet" method="post">
        <table style="margin-left:40%">
            <caption>用户注册</caption>
            <tr>
                <td>ID:</td>
                <td><input name="id" type="text" size="20"></td>
            </tr>
            <tr>
                <td>登录名:</td>
                <td><input name="name" type="text" size="20"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input name="password" type="password" size="20"></td>
            </tr>
            <tr>
                <td>角色:</td>
                <td><input name="role" type="text" size="20"></td>
            </tr>
        </table>
        <input type="submit" value="注册">
        <input type="reset" value="重置">
    </form>
    <br>
    <a href="Login.jsp">登录</a>
</div>
</body>
</html>

action:提交到服务器的路径
method:提交的方式

编写LoginServlet类

package com.xf.servlet;

import com.xf.Dao.userDao;
import com.xf.bean.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.IOError;
import java.io.IOException;

@WebServlet(name = "LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        doPut(request,response);
    }
    @Override
    protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        userDao userdao = new userDao();
        user user = userdao.login(username,password);
        if(user != null){
            request.getRequestDispatcher("success.jsp").forward(request,response);
        }
        else {
            request.getRequestDispatcher("defeat.jsp").forward(request,response);
        }
    }
}

编写RegisterServlet类

package com.xf.servlet;

import com.xf.bean.user;
import com.xf.Dao.userDao;
import com.xf.Dao.userDao;
import com.xf.bean.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(name = "RegisterServlet")
public class RegisterServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPut(request,response);
    }
    @Override
    protected  void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        int id = Integer.valueOf(request.getParameter("id"));
        String username = request.getParameter("name");
        String password = request.getParameter("password");
        int role = Integer.valueOf(request.getParameter("role"));

        user user = new user();
        user.setId(id);
        user.setName(username);
        user.setPassword(password);
        user.setRole(role);
        userDao userdao = new userDao();
        userdao.addUser(user);
        System.out.println("注册成功");
        request.getRequestDispatcher("Login.jsp").forward(request,response);
    }
}

HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
响应流程
1.Web客户向Servlet容器发出Http请求
2.Servlet容器解析Web客户的Http请求
3.Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息
4.Servlet容器创建一个HttpResponse对象
5.Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
6.HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
7.HttpServlet调用HttpResponse的有关方法,生成响应数据
8.Servlet容器把HttpServlet的响应结果传给Web客户
其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。

重写doput dopost步骤
①设置请求字符集
②设置响应对象文本类型
③通过请求对象获取用户输入的数据
④响应对象通过重定向/转发响应用户请求

在这里插入图片描述
编写success.jsp

<%--
  Created by IntelliJ IDEA.
  User: xfgg
  Date: 2020/6/19
  Time: 18:48
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功页面</title>
</head>
<body>
<h1>
    登录成功
</h1>
<hr>
</body>
</html>

编写defeat.jsp

<html>
<head>
    <title>登录失败</title>
</head>
<body>
<h1>登录失败</h1>
<hr>
<a href="Login.jsp">重新登录</a>
<br>
<a href="register.jsp">注册</a>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值