基于JSP、java、Tomcat三者的项目实战--校园交易网(2)登录,注册功能实现

news2025/1/12 16:10:05

技术支持:JAVA、JSP

服务器:TOMCAT 7.0.86

编程软件:IntelliJ IDEA 2021.1.3 x64


OK,那我们进入正题,随着前面一篇博客的尚未完结
基于JSP、java、Tomcat三者的项目实战--校园交易网(2)登录功能实现

我们继续注册功能的实现,注册功能我们会用到dao层,实体类(entity层)和util层

注册页面如下


 网页层

zhuce.jsp

<%@page contentType="text/html;charset=utf-8" pageEncoding="UTF-8" %>
<%@page import="java.util.*,java.text.*,entiy.*" %>
<!DOCTYPE html>
<html>
<head>
    <title>交易网注册</title>
    <script>
        function f2(){
            alert("确认注册?");
        }
    </script>
    <style>
        h1 {
            font-size: 40px;
            color: blanchedalmond;
            text-align: center;
            font-family: 'Courier New', Courier, monospace;
            font-style: italic;
        }
    </style>
</head>
<body>
<h1 name="top">交易网</h1>
<table align="center" cellspacing="0">
    <tr>
        <td>
            <table border="1" cellspacing="0">
                <form action="zhuce" method="post">
                    <tr>
                        <td>
                            <table cellpadding="30">
                                <tr>
                                    <td colspan="2" align="center"><strong>注册</strong></td>
                                </tr>
                                <tr>
                                    <td>昵称:
                                        <input type="text" id="name" name="name">
                                    </td>
                                </tr>
                                <tr>
                                    <td>帐号:
                                        <input type="text" id="idname" name="idname">(输入九位以内整数字)
                                    </td>
                                </tr>
                                <tr>
                                    <td>密码:
                                        <input type="password" id="pd" name="pd">
                                    </td>
                                </tr>
                                <tr>
                                    <td align="center" colspan="2">
                                        <input type="submit" value="注册" onclick="f2();">
                                    </td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                </form>
            </table>
        </td>
    </tr>
    <tr>
        <td align="right">关于交易网</td>
    </tr>
</table>
</body>
</html>

1. 页面结构和布局

  • HTML 结构:
    • 页面使用了基本的 HTML 结构,包括了 <!DOCTYPE html> 声明和 <html><head><body> 标签。
    • 页面标题为 "交易网注册",并在页面顶部展示了一个标题为 "交易网" 的大标题。
    • 使用了嵌入的 JavaScript 和 CSS 来增强页面功能和样式。

2. 技术功能

  • CSS 样式:

    • 使用了内嵌样式表 <style>,定义了 h1 元素的样式,包括字体大小、颜色、对齐方式和字体样式。
  • JavaScript 功能:

    • 在 <head> 部分定义了一个 JavaScript 函数 f2(),当用户点击注册按钮时,会弹出一个确认框,提醒用户确认注册。
  • HTML 表单:

    • 使用了 HTML 表单 <form> 来收集用户的注册信息。
    • 包含了昵称、帐号(应为 ID)、密码输入框。
    • 提供了一个注册按钮,点击时触发注册事件,并调用 f2() 函数进行确认。

3. 表单提交

  • 表单提交动作:
    • 表单的提交动作指向 action="zhuce",使用 POST 方法提交。
    • 当用户填写完信息后,点击注册按钮时,会将用户输入的数据发送到指定的 zhuce 接口或页面进行处理。

4. 连接服务

  • 服务连接说明:
    • 页面中的注册表单定义了 action="zhuce",这意味着提交的数据将会发送到 zhuce 这个服务端点。
    • 在实际开发中,你需要编写后端处理逻辑,接收这些数据并进行相应的处理,比如验证用户信息、保存到数据库等操作。
    • 根据实际情况,zhuce 可能是一个后端处理接口(比如 Servlet、Spring MVC 控制器等),负责接收 POST 请求,解析请求体中的数据,并执行相应的业务逻辑。

总的来说

这段代码实现了一个简单的注册页面,使用了基本的 HTML、CSS 和 JavaScript 技术。用户填写表单后,通过 POST 方法将数据发送到指定的后端服务(zhuce),以便后端处理注册逻辑。在真实环境中,你需要确保 zhuce 服务端点正确处理请求,并与前端页面配合良好,实现用户注册功能。


服务层 

zhuceServlet

package Servlet;

import dao.StudentDAO;
import entiy.Student;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class zhuceServlet extends HttpServlet {
    public void service(HttpServletRequest request,
                        HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String idname = request.getParameter("idname");
        String pd = request.getParameter("pd");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        try {
            if (name == null || idname == null || pd == null ||
                    name.isEmpty() || idname.isEmpty() || pd.isEmpty()) {
                throw new IllegalArgumentException("参数不能为空");
            }

            StudentDAO dao = new StudentDAO();
            Student e1 = new Student();
            e1.setName(name);
            e1.setIdname(Integer.parseInt(idname));
            e1.setPd(pd);
            dao.save(e1);
            response.sendRedirect("denglu.jsp");
        } catch (NumberFormatException e) {
            out.println("ID必须是数字");
        } catch (IllegalArgumentException e) {
            out.println(e.getMessage());
        } catch (Exception e) {
            e.printStackTrace();
            out.println("系统繁忙,请稍后再试!");
        } finally {
            out.close();
        }
    }

}

不同于登录服务的实现,在这个方法内更为深刻的是我们在这里调用了我们的dao层和entity层

  • 服务方法 (service 方法) 解析:

    • service 方法重写了 HttpServlet 类的方法,处理 HTTP 请求。
    • request.setCharacterEncoding("utf-8") 设置请求的字符编码为 UTF-8,确保能正确处理中文字符。
    • 通过 request.getParameter 方法获取提交的表单参数 nameidnamepd
    • response.setContentType("text/html;charset=utf-8") 设置响应的内容类型为 HTML,并指定字符集为 UTF-8。
    • 在 try-catch 块中进行注册逻辑处理:
      • 首先检查参数是否为空,如果为空则抛出异常。
      • 创建 StudentDAO 的实例 dao,用于数据库操作。
      • 创建 Student 对象 e1,并设置其属性。
      • 调用 dao.save(e1) 方法将学生信息保存到数据库中。
      • 使用 response.sendRedirect("denglu.jsp") 实现注册成功后的重定向到登录页面。
    • catch 块捕获可能出现的异常:
      • NumberFormatException:当 idname 不是数字时抛出,输出 "ID必须是数字"。
      • IllegalArgumentException:当参数为空时抛出,输出异常消息。
      • Exception:捕获其他异常,并打印异常堆栈信息,并输出 "系统繁忙,请稍后再试!"。
    • finally 块确保 PrintWriter 被关闭,释放资源。

4. 总结

这段代码通过 Servlet 处理用户注册请求,验证用户提交的表单数据,将有效数据保存到数据库中,并在操作成功或失败时给予相应的响应。在实际应用中,需要确保 StudentDAO 类正确实现了数据库访问逻辑,并且 denglu.jsp 页面存在且正确配置。

服务层下调用的dao层

dao层的StudentDao中的save方法

我们仔细看服务层的代码

它只调用了dao层的save方法

则在dao中我们写下了许多的方法,我们调用的是dao层的save方法

public void save(Student e) throws Exception {
        Connection conn = null;
        PreparedStatement prep = null;
        try {
            conn = DBUtil.getConnection();
            prep = conn.prepareStatement(
                    "INSERT INTO users (name, idname, pd) VALUES (?, ?, ?)");
            prep.setString(1, e.getName());
            prep.setInt(2, e.getIdname());
            prep.setString(3, e.getPd());
            prep.executeUpdate();
        } catch (Exception e1) {
            e1.printStackTrace();
            throw e1;
        } finally {
            // Close PreparedStatement and Connection
            if (prep != null) {
                try {
                    prep.close();
                } catch (SQLException e2) {
                    e2.printStackTrace();
                }
            }
            DBUtil.close(conn);
        }
    }
save方法中又调用了util包中的DButil

DButil

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
    public static Connection getConnection() throws Exception {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/sdjyy?" +
                            "useUnicode=true&characterEncoding=utf8","root","asd123"
            );
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
        return conn;
    }
    public static void close(Connection conn){
        if(conn!=null){
            try {
                conn.close();
            }catch (SQLException e){
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args)throws Exception{
        Connection conn = getConnection();
        System.out.println(conn);
    }
}

写到这里,服务层的代码才算闭环。


最后还要记得写上web.xml文件

   <servlet>
        <servlet-name>zhuce</servlet-name>
        <servlet-class>Servlet.zhuceServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>zhuce</servlet-name>
        <url-pattern>/zhuce</url-pattern>
    </servlet-mapping>

于此,注册功能便可以实现了

忘记说了


tomcat服务器的操作步骤是

点入run之后等待服务器的加载,他会自动跳出一个网页出来

你可以在网页上输入你的jsp网页的文件名,比如denglu.jsp,也可以输入你的web.xml的sevlet-name。

主页传送门

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024杭电多校(4)1012. 寻找宝藏 【扫描线、树状数组二维偏序】

寻找宝藏 题意 思路 如果没有矩形陷阱区域的话&#xff0c;设 f i f_i fi​ 表示从 ( 0 , 0 ) (0, 0) (0,0) 到 ( i , p i ) (i, p_i) (i,pi​) 的最大收益&#xff0c;那么可以很容易通过扫描线 d p dp dp 求出&#xff1a; f i v i max ⁡ j < i ∧ p j < p …

颜色识别基于高斯混合模型(GMM)的查找表分类器(LUT)

文章目录 create_class_gmm 创建高斯混合模型&#xff08;GMM&#xff09;以进行分类任务add_samples_image_class_gmm 提取训练样本&#xff0c;并将其添加到高斯混合模型 (GMM) 的训练数据集中train_class_gmm 训练一个高斯混合模型 (GMM)clear_class_gmm 清除模型create_cla…

车载客流统计大揭秘——双目客流统计

客流统计大揭秘——双目客流统计 随着科技的飞速发展和商业竞争的加剧&#xff0c;客流统计已成为商业运营中不可或缺的一环。在众多客流统计技术中&#xff0c;双目客流统计以其高精度和高效率逐渐受到广大商家的青睐。本文将带您一探双目客流统计的奥秘。 一、什么是双目客流…

axure10的安装与使用教程,问题整理

前言&#xff1a; axure10的安装与激活使用教程。 1、百度网盘下载相关资料 链接&#xff1a;https://pan.baidu.com/s/1OSD9J1wVuIptGxeRzwjlpA?pwddkbj 提取码&#xff1a;dkbj 2、开始安装&#xff0c;点击setup的安装包 除了更改地址外&#xff0c;其他的默认就行&…

平台总线驱动和设备的匹配流程分析

参考文章:https://blog.csdn.net/qq_44182115/article/details/123231576 1、宏module_platform_driver // include/linux/platform_device.h 展开为 static int __init __platform_driver_init(void) \ {\return platform_driver_register(&

谷粒商城实战笔记-84-商品服务-API-新增商品-获取分类关联的品牌

文章目录 一&#xff0c;品牌查询接口的后台实现二&#xff0c;编码经验总结1&#xff0c;Controller层的作用1.1 参数处理1.2 调用Service1.3 处理Service返回结果实例 2&#xff0c;VO的封装时机3&#xff0c;Service中最好注入Service&#xff0c;不要直接依赖Dao 问题记录 …

BUGKU-CTF-WEB 源代码

URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 看看源码 存在script&#xff1a; <script> var p1 %66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65…

基于Gunicorn、Flask和Docker的高并发应用部署指南

一、简介 随着互联网的发展&#xff0c;现代应用程序需要处理越来越多的并发请求&#xff0c;高并发应用程序的需求促使开发者寻找可靠且高效的解决方案来管理和优化服务器负载。在这种背景下&#xff0c;Gunicorn、Flask和Docker成为构建和部署高并发应用的理想组合。 首先&…

一分钟了解VMware虚拟机三种网络模式区别

VMware虚拟机提供了三种主要的网络模式&#xff0c;分别是桥接模式&#xff08;Bridged Mode&#xff09;、网络地址转换模式&#xff08;NAT Mode&#xff09;和仅主机模式&#xff08;Host-Only Mode&#xff09;。这三种模式各有其特点和适用场景&#xff0c;以下是对它们之…

mysql的回表查询

大家好&#xff0c;我是程序媛雪儿&#xff0c;今天咱们聊mysql的回表查询&#xff0c;在mysql慢查询那篇文章中我们知道&#xff0c;当extra那一列显示&#xff0c;Using index condition&#xff0c;表示直接使用了索引&#xff0c;但是需要回表查询数据&#xff0c;这种情况…

GaussDB关键技术原理|高可用:逻辑复制

GaussDB关键技术原理|高可用&#xff1a;DCF&双集群容灾从DCF与双集群容灾技术两方面对GaussDB的高可用能力进行了介绍&#xff0c;本篇将从逻辑复制方面继续解读GaussDB高可用能力。 目录 3 逻辑复制 3.1 基本概念 3.2 逻辑解码 3.3 备机解码 3.4 并行解码 3.5 一致…

docker中使用nginx配置https访问

1.申请ssl证书: https://www.joyssl.com/certificate/select/free.html 免费的ssl证书&#xff08;一般有效期是90天&#xff09;到期后&#xff0c;则需要重新申请 申请完之后下载证书 然后到验证信息中 然后到自己的域名控制台 添加解析记录(这是ssl相关的,后面还要添加自…

电测量数据交换DLMSCOSEM组件第53部分:DLMSCOSEM应用层(上)

1.范围 本部分规定了DLMS/COSEM客户机和服务器的DLMS/COSEM应用层的结构、服务和协议。同时,定义规则规定DLMS/COSEM通信配置。 它定义了用于建立和释放应用程序连接的服务,以及用于访问GB/T17215.662中使用逻辑名称(LN)或短名称(SN)引用定义的COSEM接口对象的方法和属性…

Django实战:开启数字化任务管理的新纪元

&#x1f680; Django实战&#xff1a;开启数字化任务管理的新纪元 &#x1f310; &#x1f4d6; 引言 在数字化转型的浪潮中&#xff0c;任务管理的智能化成为提升组织效能的关键。今天&#xff0c;我将带领大家深入了解我们最新开发的OFTS系统——一款创新的组织任务管理软…

【算法刷题日志】信封嵌套问题

俄罗斯套娃信封问题 信封嵌套问题可以转换为最长递增子序列的问题。每次合法的嵌套都是大的套小的&#xff0c;就相当于找一个最长递增子序列&#xff0c;长度就是能嵌套的最多个数&#xff0c;所以我们可以先对宽度进行升序排序&#xff0c;如果宽度相同就按高度降序排序&…

动态SLAM:如何判断一个特征是动态特征(对极几何)

文章目录 1.什么是极线、极点和极面2.如何判断其为动态点特征3.如何判断其为动态线特征 1.什么是极线、极点和极面 由图可知&#xff0c;C1,C2,X(X1,X2)组成了一个三角平面&#xff0c;这个三角所在的平面就是极面 在这个极平面中&#xff0c;和成像平面相交的线是极线&#xf…

“2024青岛软博会”助力打造“世界工业互联网之都”

在数字经济浪潮的推动下&#xff0c;青岛国际软件融合创新展&#xff08;简称青岛软博会&#xff09;作为年度科技盛宴&#xff0c;不仅全面展示了青岛软件产业发展的辉煌成果&#xff0c;更聚焦于工业软件这一核心领域&#xff0c;为青岛乃至全国的软件产业转型升级注入了强劲…

【gmid】设计一个CS放大器

1.电路原理图 & 电路指标 设计指标&#xff1a; 负载电容CL2 pF增益带宽积GBW100 MHz增益 Av10gm/Id10 2. 根据电路指标进行 手算 2.1 确定 gm 2.2 确定负载电阻 RD 2.3 确定 Id Vov > 150mVgm/id < 10MOS管处于 强反型区Vov < 0gm/id 较大MOS管处于 亚阈值区0…

深入解析 Go 语言 GMP 模型:并发编程的核心机制

前言 本章是Go并发编程的起始篇章&#xff0c;在未来几篇文章中我们会围绕Go并发编程进行理论和实战的学习&#xff0c;欢迎关注我哦&#xff01; 本章主要以介绍GMP模型为主&#xff0c;偏向于面试和八股&#xff0c;目的是让小伙伴们注重于知识本身&#xff0c;面向面试&am…

昇思25天学习打卡营第20天|CV-ResNet50图像分类

打卡 目录 打卡 图像分类 ResNet网络介绍 数据集准备与加载 可视化部分数据集 残差网络构建 Building Block 结构 代码实现 Bottleneck结构 代码实现 构建ResNet50网络 代码定义 模型训练与评估 可视化模型预测 重点&#xff1a;通过网络层数加深&#xff0c;感知…