JSP+MySQL实现网站的登录与注册小案例

yizhihongxing

JSP+MySQL实现网站的登录与注册小案例,需要以下步骤完成:

  1. 确定数据库表

设计一个用户表来存储用户名和密码,例如:

CREATE TABLE user(
    uid INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20) NOT NULL UNIQUE,
    password VARCHAR(30) NOT NULL
);
  1. 编写JSP页面

创建一个登录页面(login.jsp)和注册页面(register.jsp),用于接收用户输入的账号和密码,例如:

<!-- 登录页面 -->
<html>
  <head>
    <title>登录页面</title>
  </head>
  <body>
    <h1>登录</h1>
    <form action="loginProcess.jsp" method="post">
      <label>用户名:</label>
      <input type="text" name="username" required/><br/><br/>

      <label>密码:</label>
      <input type="password" name="password" required/><br/><br/>

      <input type="submit" value="登录"/>
    </form>
  </body>
</html>

<!-- 注册页面 -->
<html>
  <head>
    <title>注册页面</title>
  </head>
  <body>
    <h1>注册</h1>
    <form action="registerProcess.jsp" method="post">
      <label>用户名:</label>
      <input type="text" name="username" required/><br/><br/>

      <label>密码:</label>
      <input type="password" name="password" required/><br/><br/>

      <input type="submit" value="注册"/>
    </form>
  </body>
</html>
  1. 编写Java Servlet

创建一个Servlet(loginProcess.jsp和registerProcess.jsp),用于验证用户登录、注册信息,并将结果保存到数据库中,例如:

package com.example.user;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginProcessServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    private Connection dbConn;

    // 数据库连接配置
    private String dbUrl = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
    private String dbUser = "root";
    private String dbPassword = "root"; // 修改为自己的密码

    // 连接数据库
    private Connection getConn() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
        return conn;
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");

        String action = request.getServletPath();

        if (action.equals("/loginProcess.jsp")) {
            String username = request.getParameter("username");
            String password = request.getParameter("password");

            HttpSession session = request.getSession();

            try {
                dbConn = getConn();

                PreparedStatement stmt = dbConn.prepareStatement("SELECT * FROM user WHERE username = ? AND password = ?");
                stmt.setString(1, username);
                stmt.setString(2, password);

                ResultSet rs = stmt.executeQuery();

                if (rs.next()) {
                    session.setAttribute("user", username);
                    response.sendRedirect("welcome.jsp");
                } else {
                    response.sendRedirect("login.jsp");
                }

                rs.close();
                stmt.close();

            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    dbConn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        } else if (action.equals("/registerProcess.jsp")) {
            String username = request.getParameter("username");
            String password = request.getParameter("password");

            try {
                dbConn = getConn();

                PreparedStatement stmt = dbConn.prepareStatement("INSERT INTO user (username, password) VALUES (?, ?)");
                stmt.setString(1, username);
                stmt.setString(2, password);

                stmt.executeUpdate();
                stmt.close();

                response.sendRedirect("login.jsp");

            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    dbConn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

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

上述代码中,我们首先在Servlet中定义了一个数据库连接配置,然后创建了一个getConn()方法用于连接数据库。在doPost()方法中,我们可以通过request.getServletPath()方法获取到当前请求的url,根据url的不同,实现不同的处理(登录或注册)。其中,在登录处理中,我们使用PreparedStatement对象占位符的方式,避免了注入攻击,同时使用session保存用户信息,以便在欢迎页面(welcome.jsp)中显示。

  1. 编写欢迎页面

创建一个欢迎页面(welcome.jsp),用于显示登录用户的信息,例如:

<html>
  <head>
    <title>欢迎页面</title>
  </head>
  <body>
    <h1>欢迎</h1>
    <% 
      String username = (String)session.getAttribute("user"); 
      out.print("欢迎您," + username); 
    %>
    <br/><br/>
    <a href="logout.jsp">退出</a>
  </body>
</html>

这里我们使用了JSP中的EL表达式和Scriptlet,获取并显示了session中保存的用户名。

  1. 编写退出页面

创建一个退出页面(logout.jsp),用于用户退出登录,例如:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
  session.invalidate();
  response.sendRedirect("login.jsp");
%>

在退出页面中,我们可以使用session.invalidate()方法清除当前session,并使用response.sendRedirect()方法重定向到登录页面。

示例说明:

  1. 在登录处理的代码中,使用了PreparedStatement对象占位符的方式,避免了注入攻击。例如,如果用户在输入用户名或密码时输入了SQL语句,系统就可能会受到攻击。而使用PreparedStatement对象占位符的方式可以避免这个问题,能够更有效地保护系统的安全性。

  2. 在退出页面中使用了session.invalidate()方法清除session,该方法可以有效地防止用户在未正常退出的情况下重新打开浏览器,数据还未过期直接跳过登录界面访问网站的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JSP+MySQL实现网站的登录与注册小案例 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Sprint Boot @ComponentScan使用方法详解

    Spring Boot的@ComponentScan注解 在Spring Boot中,@ComponentScan注解用于自动扫描和注册bean。使用@ComponentScan注解可以将指定包及其子包中的所有组件自动注册到Spring应用程序上下文中。本文将详细介绍@ComponentScan注解的作用和使用方法,并提供两个示例说明。 @Component…

    Java 2023年5月5日
    00
  • Java编程简单应用

    Java编程简单应用攻略 如果你想学习Java编程,以下是一些简单的步骤和示例说明,可帮助你入门。 安装Java 要开始编写Java应用程序,你需要安装Java开发工具包(Java Development Kit, JDK)。你可以在Oracle官方网站下载最新版本的JDK。 下载完成后,按照安装向导完成JDK的安装。安装完成后,通过在命令行中输入以下命令来…

    Java 2023年5月19日
    00
  • 一起聊聊Java中13种锁的实现方式

    一起聊聊Java中13种锁的实现方式 背景介绍 在Java中使用锁是实现多线程同步的一种常用方式,也是保证程序并发安全的必要手段。本文将对Java中13种锁的实现方式进行详细讲解。 13种锁实现方式 1. synchronized关键字 synchronized关键字是Java中最基本、最常用的锁实现方式。它通过获取对象的锁来控制对对象的访问,进而实现多线程…

    Java 2023年5月19日
    00
  • Servlet服务端实现原理详解

    一、Servlet服务端实现原理 在Web应用中,服务端可以通过Java的Servlet技术实现对客户端(浏览器)的响应。Servlet是运行在服务端的Java程序,实现了应用服务器与客户端(浏览器)之间的通讯和数据交换。Servlet是一种通用的、基于Java的服务器端组件技术,它是在服务器端动态生成Web页面或进行数据处理的主要手段之一。 Servlet…

    Java 2023年6月15日
    00
  • javaScript 连接打印机,打印小票的实例

    要实现 JavaScript 连接打印机,打印小票的功能,可以借助 JavaScript 打印插件JSPrintManager。 JSPrintManager 是一个完全跨平台和打印技术无关的 JavaScript 打印客户端(打印机驱动程序),可通过扩展 Web 端点管理打印机及其设置,生成和打印 ZPL、EPL、ESC/POS、HTML、PDF、PNG、…

    Java 2023年6月15日
    00
  • Java ConcurrentModificationException异常解决案例详解

    为了解决“Java ConcurrentModificationException异常”,我们需要从以下几个方面入手:原因分析、解决方法和代码示例。 原因分析 Java ConcurrentModificationException 异常通常发生在多个线程操作同一集合对象的时候。在一个线程正在读取该集合的同时,另一个线程修改了该集合,导致第一个线程遍历时出现…

    Java 2023年5月27日
    00
  • Mybatis中SqlSession下的四大对象之执行器(executor)

    Mybatis是一款流行的ORM框架,SqlSession是其核心组件之一。在SqlSession中,有四大对象分别是:Configuration、Executor、StatementHandler和ResultSetHandler。其中,Executor是Mybatis中最重要的对象之一,本文将详细讲解Mybatis中SqlSession下的四大对象之执行…

    Java 2023年5月20日
    00
  • Java开发环境配置方法

    Java开发环境配置方法 为了进行Java开发,需要在计算机上配置相应的开发环境。下面是Java开发环境配置的方法: 1. 下载JDK 要安装Java开发环境,必须先下载Java Development Kit(JDK)。从Oracle官方网站上下载并安装最新版本的JDK。 官方下载链接: https://www.oracle.com/java/techno…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部