IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

2023-05-16

文章目录

  • 使用IDEA搭建JavaWeb项目
  • 一、IDEA新建JavaWeb项目
    • 1、新建java项目
    • 2、修改项目配置
    • 3、项目部署到Tomcat
  • 二、使用JDBC和Servlet-JSP技术实现注册功能
    • 1.引入jar包
    • 2.搭建项目结构
    • 3.后端实现
    • 4.前端页面的处理
  • 总结


使用IDEA搭建JavaWeb项目

本篇主要讲怎么使用IDEA搭建JavaWeb项目,并且使用JDBC和JSP-Servlet实现一个简单的注册功能。

一、IDEA新建JavaWeb项目

这里以idea2021.3.2版本为例。idea是不可以直接创建一个JavaWeb项目的,我们需要新建一个普通的java项目,然后手动修改。

1、新建java项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

新建完成如下

在这里插入图片描述

2、修改项目配置

在这里插入图片描述

JavaEE的版本默认的即可,有特殊要求的自行修改

在这里插入图片描述
在这里插入图片描述

此时我们的项目就已经初步的修改为JavaWeb项目了,有了JavaWeb项目的目录层级

在这里插入图片描述

配置Tomcat服务器

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/501de599c10f49f1a58ab019f2d17b32.png
![在这里插入图片描述](https://img-blog.csdnimg.cn/bfd1ff0cf0bb4d6a9ebe63d0d43b24be.png>

注意这里的Tomcat需要预先下载好,才能识别出来

在这里插入图片描述

到此,基本配置已经完成,JavaWeb项目已经新建完毕
接着,需要我们把项目部署在Tomcat

3、项目部署到Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

至此项目部署完成,可以运行了

在这里插入图片描述

默认访问的是index.jsp

二、使用JDBC和Servlet-JSP技术实现注册功能

1.引入jar包

需要在WEB-INF下新建一个lib目录,注意,和普通的java项目不同,普通的java项目lib建在项目的根目录下,但是JavaWeb项目lib目录必须配置在WEB-INF下,否则Tomcat会无法找到jar包资源,从而导致报错。

在这里插入图片描述
在这里插入图片描述

接着将我们的jar全部复制过来,这里我导入了两个jar包,mysql.jar和gosn.jar

在这里插入图片描述

接着选中lib点击add as library

在这里插入图片描述

jar包导入完成。

2.搭建项目结构

我们在项目中将我们需要的目录结构新建出来

在这里插入图片描述

将我们需要的工具类导入

在这里插入图片描述

3.后端实现

(1). 建表,根据业务需求,我们需要在数据建设一个存储用户信息的数据表

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for user1
-- ----------------------------
DROP TABLE IF EXISTS `user1`;
CREATE TABLE `user1` (
  `uid` int(3) NOT NULL AUTO_INCREMENT,
  `uname` varchar(8) NOT NULL,
  `uphone` varchar(11) NOT NULL,
  `ugender` char(1) NOT NULL,
  `uage` int(3) NOT NULL,
  `IDcardType` varchar(10) NOT NULL,
  `IDcard` varchar(20) NOT NULL,
  `password` varchar(12) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

(2). 编写实体类

package com.web.entity;

public class User {
    private Integer uid;
    private String uname;
    private String password;
    private String uphone;
    private String ugender;
    private Integer uage;
    private String IDcardType;
    private String IDcard;

    public User() {
    }

    public User(Integer uid, String uname, String password, String uphone, String ugender, Integer uage, String IDcardType, String IDcard) {
        this.uid = uid;
        this.uname = uname;
        this.password = password;
        this.uphone = uphone;
        this.ugender = ugender;
        this.uage = uage;
        this.IDcardType = IDcardType;
        this.IDcard = IDcard;
    }

    public Integer getUid() {
        return uid;
    }

    public void setUid(Integer uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPassword() {
        return password;
    }

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

    public String getUphone() {
        return uphone;
    }

    public void setUphone(String uphone) {
        this.uphone = uphone;
    }

    public String getUgender() {
        return ugender;
    }

    public void setUgender(String ugender) {
        this.ugender = ugender;
    }

    public Integer getUage() {
        return uage;
    }

    public void setUage(Integer uage) {
        this.uage = uage;
    }

    public String getIDcardType() {
        return IDcardType;
    }

    public void setIDcardType(String IDcardType) {
        this.IDcardType = IDcardType;
    }

    public String getIDcard() {
        return IDcard;
    }

    public void setIDcard(String IDcard) {
        this.IDcard = IDcard;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", password='" + password + '\'' +
                ", uphone='" + uphone + '\'' +
                ", ugender='" + ugender + '\'' +
                ", uage=" + uage +
                ", IDcardType='" + IDcardType + '\'' +
                ", IDcard='" + IDcard + '\'' +
                '}';
    }
}

(3). 编写dao接口

package com.web.dao;

import java.util.Map;

public interface RegisterDao {
    /**
     * 注册用户
     * @param map
     * @return 受影响行数
     */
    Integer registerUser(Map<String,Object> map);
}

(4). 编写daoimpl实现类

package com.web.daoimpl;

import com.web.dao.RegisterDao;
import com.web.util.DBUtil;

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

public class RegisterDaoImpl implements RegisterDao {
    //获得连接
    private Connection conn = null;
    //预编译处理对象
    private PreparedStatement pst = null;
    //结果集
    private ResultSet rts = null;
    /**
     * 注册用户
     * @param map
     * @return 受影响行数
     */
    @Override
    public Integer registerUser(Map<String, Object> map) {
        int key = 0;
        try {
            conn = DBUtil.getConnection();
            String sql = "insert into user1(uname,uphone,ugender,uage," +
                    "IDcardType,IDcard,password) values(?,?,?,?,?,?,?)";
            pst = conn.prepareStatement(sql);
            pst.setObject(1, map.get("uname"));
            pst.setObject(2, map.get("uphone"));
            pst.setObject(3, map.get("ugender"));
            pst.setObject(4, map.get("uage"));
            pst.setObject(5, map.get("IDcardType"));
            pst.setObject(6, map.get("IDcard"));
            pst.setObject(7, map.get("password"));
            key = pst.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.closeAll(conn,pst,rts);
        }
        return key;
    }
}

(5). 编写servlet

package com.web.servlet;

import com.web.dao.RegisterDao;
import com.web.daoimpl.RegisterDaoImpl;
import com.web.util.BaseServlet;
import com.web.util.Result;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

public class RegisterServlet extends BaseServlet {
    //调用daoimpl
    private RegisterDao impl = new RegisterDaoImpl();
    public void register(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收参数
        Map<String, Object> map = new HashMap<>();
        map.put("uname",req.getParameter("uname"));
        map.put("uphone",req.getParameter("uphone"));
        map.put("ugender",req.getParameter("ugender"));
        map.put("uage",req.getParameter("uage"));
        map.put("IDcardType",req.getParameter("IDcardType"));
        map.put("IDcard",req.getParameter("IDcard"));
        map.put("password",req.getParameter("password"));
        System.out.println(map);
        //设置流
        PrintWriter out = resp.getWriter();
        //调用方法
        Integer key =  impl.registerUser(map);
        //输出流
        if (key>0){
            out.write(Result.toClient("1","注册成功!"));
        }else {
            out.write(Result.toClient("0","注册失败!"));
        }
        out.flush();
        out.close();
    }
}

(6). 修改web.xml文件配置servlet全局访问路径
在这里插入图片描述

 <display-name>UserRegister</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <description></description>
        <display-name>RegisterServlet</display-name>
        <servlet-name>RegisterServlet</servlet-name>
        <servlet-class>com.lzl.servlet.RegisterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegisterServlet</servlet-name>
        <url-pattern>/RegisterServlet</url-pattern>
    </servlet-mapping>

4.前端页面的处理

前端的页面我使用HbuilderX纯手敲一个注册页,由于不是专业前端,效果比较拉跨

<%--
  Created by IntelliJ IDEA.
  User: 我是谁
  Date: 2022/8/23
  Time: 15:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title></title>
  <style type="text/css">
    body{
      background-image: url(static/img/champion-galio-splash.jpg);
      background-repeat: no-repeat;
      background-position:top left;
      background-size: 100%;
    }

    #right{
      border: solid chartreuse 5px;
      width: 450px;
      border-radius: 20px;
    }

    th{
      width: 150px;
    }
    .verity{
      width: 70px;
      font-size: large;
    }
    #queren{
      color: red;
      font-size: small;
    }
    td{
      width: 6.125rem;
    }
    #content{
      position: absolute;
      margin-left: 230px;
      margin-top: -20px;
      background-color: #000b0b;
      z-index: 1;
      background-color: rgb(30, 24, 18,0.5);
      border-radius: 20px;
    }
    .areDiv{
      float: left;
      display: inline-block;
      margin: 30px;
      color: chartreuse;
      /* opacity: 1; */
    }
    #middle{
      width: 5px;
      height: 450px;
      background-color: #FFC0CB;
    }
    #top{
      font-size: 30px;
      text-align: center;
      color: gold;
    }
    #top>h1{
      width: 650px;
      border-radius: 20px;
      display: block;
      margin-left: 425px;
    }
    select{
      width: 170px;
      font-size:large;
      text-align: center;
    }
    span{
      color: #FF0000;
    }
    a{
      text-decoration: none;
      color: blueviolet;
    }
    #sgender{
      width: 165px;
    }
    .title{
      text-align: right;
    }
    #uage{
      width: 165px;
    }
    #IDcard{
      width: 165px;
    }
  </style>
  <link rel="stylesheet" type="text/css" href="./static/css/date.css"/>
</head>
<body>
<div id="top">
  <h1>League Of Lengends</h1>
</div>
<div id="content">
  <div id="left" class="areDiv">
    <h1>英勇的召唤师,欢迎您的加入!
      <br>面如霜下雪
      <br>吻如雪上霜
      <br>谁知我知你
      <br>我知你之深
    </h1>
  </div>
  <div id="middle" class="areDiv">
  </div>
  <div id="right" class="areDiv">
    <form  id="dataform">
      <table border="0" cellspacing="0" cellpadding="10">
        <tr><th colspan="3">注册用户</th></tr>
        <tr>
          <td class="title"><span>*</span>用户名:</td>
          <td><input type="text"  required="required" placeholder="3~8位字符" name="uname" id="username" value="" /></td>
          <td><div id="unameverity" class="verity"></div></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>手机号码:</td>
          <td><input type="number"  required="required" placeholder="必须是合法手机号" name="uphone" id="uphone" value="" /></td>
          <td><div id="pnumber" class="verity"></div></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>性别:</td>
          <td>
            <input type="radio"  required="required" name="ugender" value="" checked="checked"><input type="radio" name="ugender" value=""></td>
          <td></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>年龄:</td>
          <td>
            <input type="text" class="verity" name="uage" id="uage" value="" />
          </td>
          <td></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>证件类型:</td>
          <td>
            <select name="IDcardType"  required="required">
              <option value="">---请选择---</option>
              <option value="二代居民身份证">二代居民身份证</option>
              <option value="港澳台通行证">港澳台通行证</option>
            </select>
          </td>
          <td></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>身份证号:</td>
          <td>
            <input type="text"placeholder="输入正确的身份证号码"required="required" name="IDcard" id="IDcard" value="" />
          </td>
          <td><div id="yidcard" class="verity"></div></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>密码:</td>
          <td><input type="password"  required="required" placeholder="6~12位字母数字符号组合" name="password" id="pwd" value="" /></td>
          <td><div id="qiangdu" class="verity"></div></td>
        </tr>
        <tr>
          <td class="title"><span>*</span>确认密码:</td>
          <td><input type="password"  required="required" placeholder="和密码输入保持一致" name="rpwd" id="rpwd" value="" /></td>
          <td><div id="queren"></div></td>
        </tr>
        <tr>
          <td colspan="3">
            <input type="radio"  required="required" name="xieyi" value="" />
            我已阅读并同意遵守
            <a href="http://game.qq.com/contract.shtml">《腾讯游戏许可及服务协议》</a>
          </td>
        </tr>
        <tr>
          <td colspan="3" align="center">
            <input type="button" id="register" value="注册"/>
            <input type="reset" value="重置"/>
          </td>
        </tr>
      </table>
    </form>
  </div>
</div>
</body>
<script src="static/js/jquery-1.12.4.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
  $("#username").keyup(function(){
    $p = $("#username").val();
    var reg = /^[A-Za-z0-9_-]{3,8}$/;
    if(reg.test($p)){
      $("#unameverity").attr("style","color: lawngreen");
      $("#unameverity").text("√");
    }else{
      $("#unameverity").attr("style","color: red");
      $("#unameverity").text("×");
    }
    if($p==""){
      $("#unameverity").text("");
    }
  });
  //IDcard
  $("#IDcard").keyup(function(){
    $p = $("#IDcard").val();
    var reg = /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
    if(reg.test($p)){
      $("#yidcard").attr("style","color: lawngreen");
      $("#yidcard").text("√");
    }else{
      $("#yidcard").attr("style","color: red");
      $("#yidcard").text("×");
    }
    if($p==""){
      $("#yidcard").text("");
    }
  });
  $("#uphone").keyup(function(){
    $p = $("#uphone").val();
    var reg = /^1(?:3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$/;
    if(reg.test($p)){
      $("#pnumber").attr("style","color: lawngreen");
      $("#pnumber").text("√");
    }else{
      $("#pnumber").attr("style","color: red");
      $("#pnumber").text("×");
    }
    if($p==""){
      $("#pnumber").text("");
    }
  });
  $("#pwd").keyup(function(){
    $p = $("#pwd").val();
    var reg = /^[A-Za-z0-9_-]{6,12}$/;
    if(reg.test($p)){
      $("#qiangdu").attr("style","color: lawngreen");
      $("#qiangdu").text("√");
    }else{
      $("#qiangdu").attr("style","color: red");
      $("#qiangdu").text("×");
    }
    if($p==""){
      $("#qiangdu").text("");
    }
  });
  $("#rpwd").keyup(function(){
    $p = $("#pwd").val();
    $rp = $("#rpwd").val();
    if($p!=$rp){
      $("#queren").text("密码不一致!");
    }else{
      $("#queren").text("");
      $("#queren").attr("style","color: lawngreen");
      $("#queren").text("密码一致");
    }

  });
  $('input:radio').click(function(){
    var $radio = $(this);
    if ($radio.data('checked')){
      $radio.prop('checked', false);
      $radio.data('checked', false);
    } else {
      $radio.prop('checked', true);
      $radio.data('checked', true);
    }
  });

  $("#register").click(function(){
    $.post("RegisterServlet?method=register",
            $("#dataform").serialize(),
            function (res){
            if(res.code=="1"){
                alert(res.msg);
            }else{
                alert(res.msg);
            }
    },"json")

  })
</script>
</html>


然后,需要在web下边新建static文件夹,存放我们的静态资源,例如img,js等等

在这里插入图片描述
运行项目
在这里插入图片描述
资源已经上传,有需要的可以下载
JSP+Servlet+JDBC+MySQL注册功能实现

总结

使用JDBC和Servlet-JSP技术是JavaWeb开发的一个重要台阶,这意味着,已经迈出了后端开发的第一步,与诸君共勉。功能有个bug,用户名可以重复注册,但由于只是演示,所以这个bug我就不修了。下一篇再见

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能 的相关文章

随机推荐

  • 运维技巧 - 活用临时表隔离冷热数据

    在数据库监控过程中发现考勤数据库上 Employees ControlData存储过程执行时间需 20分钟 这个存储过程逻辑很简单 xff0c 就是打开一个游标 xff0c 做 LOOP循环 xff0c 再删除重复数据 xff0c 结构如下
  • Oracle LogMiner的使用

    1 LogMiner是什么 xff1f Oracle官方文档中 xff0c 对LogMiner的描述 Oracle LogMiner which is part of Oracle Database enables you to query
  • linux服务器硬盘IO读写负载查看

    文章目录 1 首先top命令看下2 xff0c 先用iostat查看磁盘io 是否读写负载很高重要指标 xff1a 3 找出占用io高的进程的工具 iotopIO负荷的压力测试 最近在用spark 向MySQL 倒腾数据 xff0c 发现s
  • PreparedStatement与Statement的区别及优势

    PreparedStatement是用来执行SQL查询语句的API之一 xff0c Java提供了 Statement PreparedStatement 和 CallableStatement三种方式来执行查询语句 xff0c 其中 St
  • Mac Idea卡顿、慢解决方案 限制jvm也没有用【超实用】

    前置 Mac使用idea卡顿 不流畅解决方案 xff0c 设置了jvm也没有用 快捷键提示超级慢的问题 导致原因 下载的软件版本问题 去下载标注的版本就变得非常的流畅 xff0c 超级快 版本说明 xff1a 第一个是英特尔芯片的软件 第二
  • HDFS 启动与关闭

    一 HDFS 启动与关闭 HDFS 和普通的硬盘上的文件系统不一样 xff0c 是通过Java 虚拟机运行在整个集群当中的 xff0c 所以当Hadoop 程序写好之后 xff0c 需要启动HDFS 文件系统 xff0c 才能运行 HDFS
  • Android快速入门之通过Fragment实现底部菜单栏

    早期Android应用通常使用TabHost实现页面之间的切换 xff0c 现在更多的选择ViewPager与Fragment结合的方式实现页面切换 Android提供了专门的适配器 FragmentPagerAdapter和Fragmen
  • Zemax操作35--双高斯镜头优化

    要求 xff1a 双高斯镜头是传统的单反相机镜头 相对孔径 xff1a 1 3 焦距 xff1a 75mm 可见光 视场由一个圆定义 xff0c 圆的直径是胶片的对角线 xff0c 像高21 6mm 畸变小于1 玻璃的边界条件最小边缘 中心
  • C/C++编程题之删除字符串中出现次数最少的字符

    在牛客上刷到删除字符串中出现次数最少的字符 xff0c 现在将通过的代码贴一下 xff0c 供大家参考 实现删除字符串中出现次数最少的字符 xff0c 若多个字符出现次数一样 xff0c 则都删除 输出删除这些单词后的字符串 xff0c 字
  • springboot解决servlet-api-2.5.jar和tomcat-embed-core-9.0.46.jar冲突

    2022 11 04 18 07 52 869 ERROR 86604 restartedMain o s b d LoggingFailureAnalysisReporter APPLICATION FAILED TO START Des
  • PS 修改图片大小

    平常的网络世界中 xff0c 会有一些高清晰的图片出现 xff0c 哦不 xff0c 现在的图片越来越超清了 xff1b 那么 xff0c 就需要对它们大小进行修改 xff0c 不然内存伤不起啊 xff01 以下是三种常用的方法 1 修改图
  • 将若依(RuoYI)项目打包(jar)部署到Linux服务器(详细步骤)

    第一步下载maven方便将RuoYi项目打包 1 下载网址 xff1a http maven apache org download cgi 2 3 下载3 6 3版本 解压完成后 将文件夹名称修改为maven 第二步配置maven环境变量
  • 最通俗易懂的乐观锁与悲观锁原理及实现

    一 乐观锁 总是认为不会产生并发问题 xff0c 每次去取数据的时候总认为不会有其他线程对数据进行修改 xff0c 因此不会上锁 xff0c 但是在更新时会判断其他线程在这之前有没有对数据进行修改 xff0c 一般会使用版本号机制或CAS操
  • 3.12生产者消费者模型(pthread_cond_t、sem_t)

    生产者消费者模型 生产者不能在容器满了继续生产 消费者不能在容器为空的时候消费 生产者消费者模型 粗略的版本 include lt stdio h gt include lt pthread h gt include lt stdlib h
  • ActiveMQ中Topic模式队列和Queue模式队列区别

    Topic和Queue是ActiveMQ两种消息模式 Topic用于消息订阅 xff0c 属于一对多 xff1b Queue用于消息处理 xff0c 属于一对一 分别从工作模式 有无状态 传递完整性 处理效率四个方面比较 工作模式 xff1
  • Java SpringBoot 公众号集成模板推送消息

    前言 上篇 付项目地址 xff1a https blog csdn net A yonga article details 129398716 spm 61 1001 2014 3001 5501 集成公众号请看之前的文章 本篇说明 基于已
  • Android中native进程内存泄露的调试技巧(一)

    基于Android5 0版本 Android为Java程序提供了方便的内存泄露信息和工具 xff08 如MAT xff09 xff0c 便于查找 但是 xff0c 对于纯粹C C 43 43 编写的natvie进程 xff0c 却不那么容易
  • onNewIntent 什么时候调用

    protected void onNewIntent Intent intent Since API Level 1 This is called for activities that set launchMode to 34 singl
  • [MySQL] MySQL日志系统

    概述 Mysql的日志系统是Mysql保证无论何时崩溃数据都不会丢失的关键 众所周知Mysql是持久化的数据库 所有的数据都是持久化到硬盘中的 保证数据不会丢失 Mysql保证数据不会丢失是从以下两个方面来体现的 能够恢复到任意时刻的数据状
  • IDEA搭建JavaWeb项目,JDBC和Servlet-JSP技术实现注册功能

    文章目录 使用IDEA搭建JavaWeb项目一 IDEA新建JavaWeb项目1 新建java项目2 修改项目配置3 项目部署到Tomcat 二 使用JDBC和Servlet JSP技术实现注册功能1 引入jar包2 搭建项目结构3 后端实