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

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日

相关文章

  • Java 轻松入门了解File类的使用

    Java 轻松入门了解 File 类的使用 在 Java 中,File 类是一个常见的类,用于对文件或目录进行操作。在我们进行 Java 开发时,经常需要使用到文件或目录的操作,为了更好地使用 File 类,我们需要完全了解它的使用方法。本文将从以下几个方面详细讲解 File 类的使用。 1. 创建 File 对象 创建 File 对象有两种方式,一种是使用…

    Java 2023年6月1日
    00
  • 简单了解Spring中常用工具类

    下面我就来详细讲解下“简单了解Spring中常用工具类”的攻略,包括什么是Spring工具类,Spring常用工具类有哪些,以及如何使用这些工具类。 什么是Spring工具类 Spring工具类是指在Spring框架中提供的一些常用的工具类,用于完成一些常见的任务。这些工具类都封装了一些复杂的逻辑,方便我们在开发中直接调用。 Spring常用工具类 以下是S…

    Java 2023年5月19日
    00
  • ServletContext中常用方法介绍

    下面是关于“ServletContext中常用方法介绍”的完整攻略。 一、ServletContext概述 在Java Web中,ServletContext表示Servlet上下文,是一个Web应用的全局上下文环境。每个Web应用都会有一个ServletContext,在应用启动的时候创建,并且在应用停止的时候销毁。 ServletContext中的信息可…

    Java 2023年6月2日
    00
  • java servlet 几种页面跳转的方法

    Java Servlet 几种页面跳转的方法 在 Java 的 Servlet 编程中,页面跳转是一项至关重要的技能。实现页面的跳转可以使Web服务器更加灵活地管理页面的内容和功能。这里我们介绍几种常见的跳转方式。 重定向(Redirect) 重定向是范围最广,也是最常见的页面跳转方式。它的好处是可以跳转到其他 Web 站点中的任意一个页面,但是缺点是 UR…

    Java 2023年6月15日
    00
  • Java中的两种for循环介绍

    当需要遍历某个集合或数组时,Java中有两种常见的for循环方式:for循环和foreach循环。本文将对这两种for循环方式进行详细介绍。 for循环 for循环是Java中最常见的循环语句之一,适用于已知循环次数的情况。语法如下: for (初始化表达式; 布尔表达式; 更新表达式) { // 循环体 } 其中,初始化表达式可以用来定义循环计数器的初始值…

    Java 2023年5月20日
    00
  • MyBatis多数据源的两种配置方式

    MyBatis多数据源的两种配置方式包括XML配置和注解配置。 XML配置 步骤一:配置数据源 在mybatis-config.xml文件中配置多数据源的数据源信息,注意要配置各自的数据库连接信息以及数据库驱动信息。 <environments default="dev"> <environment id="d…

    Java 2023年5月20日
    00
  • 解决程序包org.springframework.test.context不存在

    针对“解决程序包org.springframework.test.context不存在”的问题,我写了以下完整攻略供参考: 步骤一:确认依赖项 在Java项目中,我们通常使用Maven或Gradle等构建工具来管理项目的依赖项。当出现“程序包不存在”的错误时,首先需要确认项目中是否添加了相应的依赖项,也即相关的库是否被正确引用。对于Spring项目而言,常见…

    Java 2023年5月19日
    00
  • spring boot项目如何采用war在tomcat容器中运行

    下面是Spring Boot项目如何部署到Tomcat容器中运行的攻略: 一、将项目打成war包 Spring Boot项目通常打成jar包,但是要部署到Tomcat容器中需要将其打成war包。如果使用Maven构建项目,则只需在pom.xml文件中添加以下代码: <packaging>war</packaging> 这样项目就会被打…

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