Servlet+JavaBean+JSP打造Java Web注册与登录功能

请稍等,我将为您详细讲解“Servlet+JavaBean+JSP打造Java Web注册与登录功能”的完整攻略。

1. 实现功能介绍

本次Java Web注册与登录功能实现,主要涉及三个模块:Servlet、JavaBean和JSP。其中Servlet实现用户请求的处理和响应,JavaBean实现数据的封装和处理,而JSP则是负责页面的显示。

具体实现的功能如下:

  1. 注册功能:输入用户名和密码,将其保存到数据库中,提示注册成功或失败;
  2. 登录功能:输入用户名和密码,与数据库中的信息进行比对,如果一致则进入主页面,否则提示登录失败;
  3. 注销功能:用户在主页面中可以选择退出登录,返回登录页面。

2. 实现过程

2.1 数据库准备

首先,我们需要准备一个MySQL数据库,用来存储用户信息。创建一个名为webuser的数据库,并创建一个user表,表结构如下:

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

2.2 创建JavaBean

接着,我们需要创建一个JavaBean,用于封装用户信息。我们创建一个名为User的类,类中包含idusernamepassword三个属性,以及相应的getter和setter方法。代码示例如下:

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

    public int getId() {
        return id;
    }
    public void setId(int 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;
    }
}

2.3 创建Servlet

接下来,我们创建一个Servlet,用于处理用户请求,并将数据保存到数据库中。这里我们创建一个名为RegisterServlet的Servlet,代码示例如下:

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegisterServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(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");
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        UserDao userDao = new UserDaoImpl();
        boolean result = userDao.addUser(user);
        if(result) {
            response.sendRedirect("register_success.jsp");
        } else {
            response.sendRedirect("register_fail.jsp");
        }
    }
}

上述代码中,我们通过doPost()方法获取用户注册信息,并将其封装为一个User对象,然后调用UserDao接口的addUser()方法将其存入到数据库中。最后判断操作结果,保存成功则跳转到register_success.jsp,否则跳转到register_fail.jsp

UserDao接口和实现类的代码如下:

public interface UserDao {
    public boolean addUser(User user);
    public User getUser(String username);
}

public class UserDaoImpl implements UserDao {

    @Override
    public boolean addUser(User user) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            conn = DbUtil.getConnection();
            String sql = "INSERT INTO user (username,password) VALUES (?,?)";
            ps = conn.prepareStatement(sql);
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            int result = ps.executeUpdate();
            if(result > 0) {
                return true;
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            DbUtil.release(conn, ps, null);
        }
        return false;
    }

    @Override
    public User getUser(String username) {
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DbUtil.getConnection();
            String sql = "SELECT * FROM user WHERE username=?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, username);
            rs = ps.executeQuery();
            if(rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setUsername(rs.getString("username"));
                user.setPassword(rs.getString("password"));
                return user;
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            DbUtil.release(conn, ps, rs);
        }
        return null;
    }
}

2.4 创建JSP页面

最后,我们需要创建JSP页面,用于显示页面内容和接收用户输入。这里我们创建三个页面:分别为register.jspregister_success.jspregister_fail.jsp

register.jsp代码示例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
    <h1>用户注册</h1>
    <form action="register" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="注册"></td>
            </tr>
        </table>
    </form>
</body>
</html>

register_success.jspregister_fail.jsp比较简单,这里就不贴出代码了。

2.5 实现登录和注销功能

完成上述注册功能后,我们接着实现登录和注销功能。这里我们创建一个名为LoginServlet的Servlet,用于处理登录请求,代码示例如下:

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(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 UserDaoImpl();
        User user = userDao.getUser(username);
        if(user != null && user.getPassword().equals(password)) {
            HttpSession session = request.getSession();
            session.setAttribute("user", username);
            response.sendRedirect("main.jsp");
        } else {
            response.sendRedirect("login_fail.jsp");
        }
    }
}

我们通过调用UserDao接口的getUser()方法从数据库中获取用户信息,并判断用户名和密码是否匹配。如果匹配成功,则将用户名保存到Session中,跳转到main.jsp页面。否则跳转到login_fail.jsp页面。

为了实现注销功能,我们还需要创建一个名为LogoutServlet的Servlet,代码示例如下:

@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LogoutServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        HttpSession session = request.getSession();
        session.removeAttribute("user");
        response.sendRedirect("login.jsp");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

上述代码我们通过调用HttpSessionremoveAttribute()方法删除Session中的用户信息,然后将页面重定向到login.jsp

注:main.jsplogin.jsp这两个页面也需要我们自己编写。

2.6 示例

这里提供两个小例子,一个演示了如何注册用户,一个演示了如何登录,详见下方。

示例1:注册用户

  1. 访问http://localhost:8080/WebRegister/register.jsp,进入注册页面;
  2. 在注册页面输入用户名和密码,并点击“注册”按钮;
  3. 注册成功则跳转到register_success.jsp页面,否则跳转到register_fail.jsp页面。

示例2:用户登录

  1. 访问http://localhost:8080/WebRegister/login.jsp,进入登录页面;
  2. 在登录页面输入用户名和密码,并点击“登录”按钮;
  3. 如果用户名和密码匹配,则进入main.jsp页面,否则跳转到login_fail.jsp页面;
  4. main.jsp页面中,用户可以选择退出登录,返回login.jsp页面。

3. 总结

通过以上步骤实现了Java Web注册与登录功能,我们使用了Servlet、JavaBean和JSP三个模块来完成这个功能,分别负责请求处理、数据封装和页面显示。同时,我们还使用了MySQL作为数据存储方式,并通过JDBC连接数据库。最后,提供了两个小例子来演示这个功能的使用,供读者参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet+JavaBean+JSP打造Java Web注册与登录功能 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringMvc自定义拦截器(注解)代码实例

    请看以下内容: SpringMvc自定义拦截器(注解)代码实例 在 SpringMVC 中,拦截器(Interceptor)是一个非常重要的组件,它可以在请求处理的前、后或中间加入自己的业务逻辑,例如身份认证、日志记录等。本文将详细介绍如何使用注解的方式自定义 SpringMVC 拦截器,并提供两个示例来说明其使用方法。 1. 创建拦截器类 创建一个拦截器类…

    Java 2023年5月16日
    00
  • 基于@JsonFormat的导包问题

    接下来我会为你详细讲解“基于@JsonFormat的导包问题”的完整攻略。 1. 理解@JsonFormat注解 在讲解导包问题之前,我们首先要理解 @JsonFormat 注解的作用。它是一个Jackson库中的注解,用于控制序列化和反序列化日期格式。可以将其应用于Java类或字段上。@JsonFormat注解有多种属性可以调整日期格式,例如可以设置 pa…

    Java 2023年5月26日
    00
  • Java的运算符和程序逻辑控制你了解吗

    Java的运算符和程序逻辑控制非常重要,是Java语言中的基础知识点。下面我们来详细讲解一下。 运算符 算术运算符 Java中的算术运算符包括加减乘除、取余等,常用的有以下几个: +:加法运算符,将两个数相加。 -:减法运算符,将一个数减去另一个数。 *:乘法运算符,将两个数相乘。 /:除法运算符,将一个数除以另一个数。 %:取余运算符,求一个数除以另一个数…

    Java 2023年5月23日
    00
  • Spring boot应用启动后首次访问很慢的解决方案

    当Spring Boot应用启动后,由于需要初始化一些bean、加载配置文件等,首次访问时可能会比较慢。为了解决这个问题,我们可以采取以下措施: 1. 添加DevTools依赖 Spring Boot提供了DevTools依赖,可以实现热部署和自动重启功能,从而提高开发时的效率。同时,它还能解决首次访问慢的问题。只需要在项目的pom.xml文件中添加如下依赖…

    Java 2023年6月15日
    00
  • Maven修改运行环境配置代码实例

    下面是 Maven 修改运行环境配置代码实例的完整攻略。 什么是 Maven Maven 是一款 Java 项目管理工具,可以帮助我们自动管理 Java 项目中的依赖、编译、测试、打包等工作。在 Maven 中,所有的项目都是通过一个个 POM(Project Object Model) 文件来描述的。 如何修改运行环境配置 Maven 的运行环境配置主要指…

    Java 2023年5月20日
    00
  • Spring security 如何开放 Swagger 访问权限

    我们需要完成以下步骤来开放Swagger访问权限:1. 添加Swagger API依赖。2. 添加Swagger配置类。3. 配置Spring Security以允许Swagger接口访问。 1. 添加Swagger API依赖 <dependency> <groupId>io.springfox</groupId> &l…

    Java 2023年5月20日
    00
  • 全面详解Maven打包及其相关插件和高级特性

    全面详解Maven打包及其相关插件和高级特性 Maven打包概述 Maven 是一个基于项目对象模型(POM)的构建工具,能有效地管理项目的构建和依赖。Maven 提供了相应的插件,它们可以帮助我们更方便地进行项目的打包(package)。而打包也是 Maven 项目的必要过程之一,我们能够通过打包将项目打包成可执行的 jar 包、war 包、zip 包等等…

    Java 2023年5月20日
    00
  • JavaScript中Math对象相关知识全解

    JavaScript中Math对象相关知识全解 Math对象概述 Math是JavaScript的内置对象之一,它提供了大量用于数学计算的方法和常量。在使用Math对象时,不需要创建实例,直接使用即可。 常用方法 Math.round() Math.round() 方法返回一个四舍五入后最接近的整数。该方法接收一个数字作为参数,该数字可以是任意的数值类型,包…

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