JavaWeb入门案例之用户注册

前言

之前把Java的基础知识系统的过了一遍,目前总算可以看懂Java代码了,接下来就是要学习Java开发框架(主要是springMVC)。

下面用一个用户注册的小案例,来总结一下之前学习的Java基础知识。

此案例涉及知识点

  • Java分层思想
  • JDBC连接数据库工具类封装
  • 数据库语句

创建数据库

使用数据库管理管理软件连接数据库,依次执行下面数据库语句。

create Database test_sql;
use test_sql;
CREATE TABLE t_user(u_id varchar(255) PRIMARY KEY NOT NULL,u_name varchar(255) NOT NULL, u_pwd varchar(255) NOT NULL);

项目说明

开发工具是IDEA2020.3.1,数据库是MySql8

jetbrains升级IDEA2020版之后,创建servlet项目跟之前大不一样了,如果不会使用新版的IDEA创建servlet项目,请移步《如何使用IDEA2020.2新建servlet工程》

简单说明一下项目的分层架构,项目下新建四个package。

  • util【存放项目工具类,目前此项目只放自定义封装的JDBCUtil类,用于连接数据库】
  • dao【存放数据库操作类】
  • entity【存放实体类,与数据库表一一对应】
  • servlet【存放servlet类,接收用户请求参数,并调用处理方法】

项目处理逻辑是这样的:servlet层接收到用户请求参数后,将请求参数数据组合成entity类。entity类就是在项目流转的数据。然后将组合好的entity数据传给dao层【怎么传?实例化dao层中相关类对象,调用dao层中的方法传参】。dao层中拿到数据,执行数据相关操作【获取数据库连接,执行相关数据库语句】。

新建用户实体类 – UserEntity

此类与数据库表对映

package cn.ixuela.entity;

import java.io.Serializable;

public class UserEntity implements Serializable {
  private String id;
  private String userName;
  private String userPwd;

  public String getId() {
    return id;
  }

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

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getUserPwd() {
    return userPwd;
  }

  public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
  }
}

新建DAO层

用于操作数据库,dao包下新建IUserDao接口类,并新建impl包。impl包下新建IUserDao接口的实现类IUserDaoImpl

package cn.ixuela.dao;

import cn.ixuela.entity.UserEntity;

import java.util.List;

public interface IUserDao {
  /**
   * 保存用户信息
   * @param userEntity
   */
  boolean saveUser(UserEntity userEntity) throws Exception;
}
package cn.ixuela.dao.impl;

import cn.ixuela.dao.IUserDao;
import cn.ixuela.entity.UserEntity;
import cn.ixuela.utils.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;

public class UserDaoImpl implements IUserDao {
  private Connection conn;
  // 传递sql语句
  private PreparedStatement ps;

  @Override
  public boolean saveUser(UserEntity userEntity) {
    try {
      conn = DBUtil.getConn();
      // 定义sql语句
      String Sql = "insert into t_user(u_id,u_name,u_pwd) values (?,?,?)";
      // 执行sql语句
      ps = conn.prepareStatement(Sql);
      ps.setString(1,userEntity.getId());
      ps.setString(2,userEntity.getUserName());
      ps.setString(3,userEntity.getUserPwd());
      // 返回结果集
      int i = ps.executeUpdate();
      if (i == 1) {
        return true;
      }else {
        return false;
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      DBUtil.close(set,ps,conn);
    }
    return false;
  }
}

新建RegisterServlet类

用于接收用户提交的数据,并把数据转交给DAO层

package cn.ixuela.servlet;

import cn.ixuela.dao.IUserDao;
import cn.ixuela.dao.impl.UserDaoImpl;
import cn.ixuela.entity.UserEntity;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@WebServlet("/register")
public class RegisterServlet extends HttpServlet {
  /**
   * 获得一个UUID
   * @return String UUID
   */
  public static String getUUID(){
    String uuid = UUID.randomUUID().toString();
    //去掉“-”符号
    return uuid.replaceAll("-", "");
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response)  {
    UserEntity userEntity = new UserEntity();
    IUserDao userDao = new UserDaoImpl();
    String username = request.getParameter("userName");
    String userPwd = request.getParameter("userPwd");
    userEntity.setId(RegisterServlet.getUUID());
    userEntity.setUserName(username);
    userEntity.setUserPwd(userPwd);
    Map<String,Object> map = new HashMap<>();
    try {
      boolean flag = userDao.saveUser(userEntity);
      if (flag) {
        map.put("success", "true");
        map.put("msg", "注册成功!");
      } else {
        map.put("success", "false");
        map.put("msg", "注册失败!");
      }
      response.getWriter().write(map.toString());
      response.getWriter().flush();
      response.getWriter().close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

项目总结

项目虽然简单,但是却是能说明JavaWeb的基础。此项目属于自己真正从零开始独立完成的。抛弃JSP,可以搭配独立的前端工程或使用postman调试。

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/java/javaweb-register.html

Like (1)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
Previous 2020年12月30日
Next 2021年1月20日

相关推荐

  • 如何使用IDEA2020.2新建servlet工程

    最近自学java时,发现IDEA更新到2020.2版本时,在新建工程时,有了明显的改动。由于小编刚学到servlet,IDEA这一突然间的改动,导致小编不会新建servlet工程了…

    2020年8月17日
    5.8K
  • Spring Tools学习之JAVA开发环境搭建【windows 10】

    一直以来都想学习JAVA,但是苦于找不到门路,网上学习资料要不看不懂,要不需要金钱。 终于,迫于生活与年龄的压力,下定决心,学习JAVA。 写下此文档,记录一下自己学习JAVA之路…

    2018年12月6日
    2.8K
  • STS插件mybatis-generator安装及使用

    断断续续学习Java也有好长时间了,没有师傅带,没有项目练手,学习超级慢,也很烦。视频、书籍翻看了一大推,还是没有目标。 相信滴水成海,外加条条大路通罗马,只要坚持,自己终能达成目…

    2019年12月27日
    2.2K
  • spring boot练习篇之用户登录系统【接入数据库】

    抛弃JSP,只做纯粹的前后端分离项目。 写在前面 学习基础知识是枯燥无味的,之所以会这样,多数是因为心不静,对于如何运用它,感到茫然。所以建议大家在学习Java基础知识的时候,一定…

    2021年5月28日
    1.2K
  • Java自学之类结构扩展

    面向对象中的核心组成是类与接口,在项目中会利用【包】进行一组相关类的管理,这样适合于程序代码的部分更新,也更加符合面向对象封装性的概念,同时合理地使用封装也可以方便地实现实例化对象…

    2020年12月10日
    1.2K
  • Spring Boot的常用注解

    未来的框架趋势是“约定大于配置”,代码的封装会更加严密。开发人员会将更多的精力放在代码的整体优化和业务逻辑上,所以注解式编程会被更加广泛地使用。那么什么是注解?Spring Boo…

    2024年8月29日
    298
  • Java自学之反射机制

    重用性是面向对象设计的核心原则。为了进一步提升代码的重用性,Java提供了反射机制。反射技术首先考虑的是“反”与“正”的操作,所谓的“正”操作,是指当开发者使用一个类的时候,一定要…

    2020年12月24日
    1.1K
  • Java自学之类与对象

    定义 类是由成员属性和方法组成。成员属性主要定义类的一个具体信息,实际上一个成员属性就是一个变量,而方法是一些操作的行为。类的定义基础语法如下。 一个类定义完成后并不能够被直接使用…

    2020年11月25日
    1.2K
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.2K
  • Java自学之内部类

    内部类是一种常见的嵌套结构,利用这样的结构使得内部类可以与外部类共存,并且方便地进行私有操作的访问。 内部类基本概念 内部类(内部定义普通类、抽象类、接口的统称)是指一种嵌套的结构…

    2020年12月14日
    1.4K