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

技术支持: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 Connectionif (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。

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

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

相关文章

微软蓝屏事件:网络安全的多维挑战与应对策略

一、引言 1. 事件概述&#xff1a;微软蓝屏事件的影响与范围 微软蓝屏事件&#xff0c;这一近期震动全球科技界的重大事件&#xff0c;起因于一次看似平常的软件更新。美国电脑安全技术公司“众击”发布的更新包中隐藏着一个致命的“缺陷”&#xff0c;这个缺陷如同潜伏的病毒…

函数图像是如何画出来的(LiveCharts2)

大火的人工智能本质上就是一些简单的函数的组合&#xff0c;比如f(x)kxb&#xff0c;只是可能不只有x,还会x1&#xff0c;x2&#xff0c;…xn&#xff0c;只是维数不同&#xff0c;当维数很多的时候自然就需要方程组才能求解&#xff0c;维数越多自然需要的算力就越多。于是就有…

简单小案例分析

一、容器和实例关系 <div class"app"><h1>Hello,{{name}}</h1> </div> <div class"app"><h1>Hello,{{name}}</h1> </div><script>//创建Vue实例new Vue({el:".app", //el用于指定当前V…

DBeaver Ultimate 22.1.0 连接数据库(MySQL+Mongo+Clickhouse)

前言 继续书接上文 Docker Compose V2 安装常用数据库MySQLMongo&#xff0c;部署安装好之后我本来是找了一个web端的在线连接数据库的工具&#xff0c;但是使用过程中并不丝滑&#xff0c;最终还是选择了使用 DBeaver &#xff0c;然后发现 mongo 还需要许可&#xff0c;又折…

PyQt5 + selenium,自动票务工具,演唱会门票,学习使用

PyQt5 selenium&#xff1b;在damai工具的基础上加入了UI界面&#xff0c;并将应用做了打包工作&#xff0c;主要是方便不会/不想折腾环境的用户使用&#xff0c;抢票的核心代码来自由于原作者不再维护&#xff0c;自己修改了部分代码。 安装教程 解压安装包到任意位置&…

SpringBoot整合elasticsearch-java

一、依赖 系统使用的是ElasticSearch8.2.0 <dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.0</version> </dependency> 二、配置 1、yml文件配置 elastics…

Mongodb文档和数组的通配符索引

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第97篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

新华三H3CNE网络工程师认证—VLAN间通信背景

VLAN间通信技术主要解决的是不同的VLAN之间如何通信。每一个广播域会有网段给IP进行命名&#xff0c;不同网段之间的通信本质上是不同广播域进行通信&#xff0c;通信会使用到网关地址。不同网段之间的通信&#xff0c;路由器的每个接口其实是对应一个广播域的&#xff0c;比如…

Boost搜索引擎项目相关介绍

Boost搜索引擎相关介绍&#xff1a; 首先&#xff0c;Boost库不具备搜索条件&#xff0c;所以我们这个项目借此实现搜索功能。 项目的核心就是以用户搜索的相关内容在目标数据中进行查找。 首先&#xff0c;我们面临的第一大难题就是目标数据&#xff0c;在这里目标数据就是Boo…

算法第十五天:leetcode19.删除链表的倒数第N个节点

一、删除链表的倒数第N个节点的题目描述与链接 19.删除链表的倒数第N个节点的链接如下表所示&#xff0c;您可直接复制下面网址进入力扣学习&#xff0c;在观看下面的内容之前您一定要先做一遍哦&#xff0c;以便让我印象更深刻&#xff01;&#xff01;!https://leetcode.cn/p…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十六章 设备驱动IO控制

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

【Qt】Qt容器和STL容器的区别

1、简述 Qt容器和STL容器略有不同,作为一个Qter,应该知道它们之间的异同。 Qt容器官网介绍:https://doc.qt.io/qt-5/containers.html STL容器官网介绍:https://zh.cppreference.com/w/cpp/container 2、Qt容器和STL容器的对应关系 注意:QList 与 std::list 无关,QSet …

Python - 开源库 ReportLab 库合并 CVS 和图像生成 PDF 文档

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/140281680 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Report…

算法 —— 暴力枚举

目录 循环枚举 P2241 统计方形&#xff08;数据加强版&#xff09; P2089 烤鸡 P1618 三连击&#xff08;升级版&#xff09; 子集枚举 P1036 [NOIP2002 普及组] 选数 P1157 组合的输出 排列枚举 P1706 全排列问题 P1088 [NOIP2004 普及组] 火星人 循环枚举 顾名思…

Unity UGUI 之 Input Field

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.Input Field是什么&#xff1f; 给玩家提供输入的输入框 2.重要参数 中英文对照着看…

环境搭建-Windows系统搭建Docker

Windows系统搭建Docker 一、系统虚拟化1.1 启用虚拟化2.2 启用Hyper-v并开启虚拟任务 三、安装WSL3.1 检验安装3.2 安装WSL 四、Docker安装4.1 Docker安装包下载4.2 Docker安装4.3 运行docker Desktop 五、Docker配置5.1 打开Docker配置中心5.2 配置Docker国内镜像 六、使用 一…

DAY15

数组 冒泡排序 冒泡排序无疑是最为出名的排序算法之一&#xff0c;总共有八大排序 冒泡的代码还是相当简单的&#xff0c;两层循环&#xff0c;外层冒泡轮数&#xff0c;里层依次比较&#xff0c;江湖中人人尽皆知 我们看到嵌套循环&#xff0c;应该马上就可以得到这个算法的…

错误解决 error CS0117: ‘Buffer‘ does not contain a definition for ‘BlockCopy‘

Unity 2022.3.9f1 导入 Runtime OBJ Importer 后出现&#xff1a; error CS0117: ‘Buffer’ does not contain a definition for ‘BlockCopy’ 解决办法&#xff1a; 源代码&#xff1a; int DDS_HEADER_SIZE 128; byte[] dxtBytes new byte[ddsBytes.Length - DDS_HEAD…

Python + PyQt 搭建可视化页面(PyCharm)

Python PyQt 搭建可视化页面&#xff08;PyCharm&#xff09; 配置PyQt5环境 1.1 安装PyQt5和PyQt5-tools pip install PyQt5pip install PyQt5-tools1.2 QtDesigner和PyUIC环境的配置 配置QTDesigner&#xff0c;用来打开QT可视化开发工具 在PyCharm中依次打开&#xff1a…

软件合集:5大3C产品在线说明书制作利器

3C产品&#xff08;指计算机、通讯和消费性电子三类产品的简称&#xff09;在线说明书在当今数字化时代扮演着至关重要的角色&#xff0c;相较于传统纸质说明书&#xff0c;3C产品在线说明书更加便捷、实时更新且环保。用户可随时在线访问&#xff0c;获取最新信息&#xff0c;…