Servlet的book图书表格实现(使用原生js实现)

news2025/3/12 10:00:07

作业内容:

1 建立一个book.html,实现图书入库提交

整体参考效果如下:

 数据提交后,以窗口弹出数据结果,如:

     

2  使用正则表达式验证ISBN为x-x-x格式,图书名不低于2个字符,作者不能为空,单价在【10-100】之间

3 使用ajax技术(原生js的ajax或jquery的ajax都行)。后台接收url为“bookreg“,接收前端所有数据,并拼凑成一个SQL的insert命令操作串。后端处理完数据后,向前端返回一个“新书注册成功”并在前端一个文本标签中输出。

4 说明:整个过程标准化,模块化,尽量通用化。

  Word作业中要附上完整的代码,并加以适当注释说明,每一步运行结果要截图保存。

解答过程:
HTML部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Book.html</title>
    <style>
    table {
    width: 28%;
    margin: 0px auto; /* 让表格水平居中 */
    border-collapse: collapse;
    line-height: 35px;
    }
    th, td {
        border: 1px solid black;
        padding: 8px;
        text-align: left; /* 内容居中 */
    }
    #topic{
        text-align: center;
        font-size: 35px;
        
    }
    #change_web_color{
        font-size: 20px;
    }
    .sub{
        margin: 65% 50% ;
    }
    </style>
    <script src="JS/book.js"></script>
    <script src="JS/jquery-3.2.1.min.js"></script>
</head>
<body>
    <div>
        <form action="BookReg" name="bookForm" id="bookForm1" method="post" enctype="application/x-www-form-urlencoded">
            <h2 id="topic">图书入库</h2>
            <div><button id="change_web_color">改变网页颜色</button></div>
         <table>
        <tr>
            <td>ISBN:</td>
            <td><input type="text" name="ISBN" id="ISBN" required>&nbsp;*必填</td>
        </tr>
        <tr>
            <td>图书名:</td>
            <td><input type="text" name="bookName" id="bookName" required>&nbsp;*必填</td>  
        </tr>
        <tr>
            <td>作者:</td>
            <td><input type="text" name="writer" id="writer"></td>   
        </tr>
        <tr>
            <td>类别:</td>
            <td><select name="type" id="type">
                <option value="理工科">理工科</option>
                <option value="文科">文科</option>
            </select></td>
        </tr>
        <tr>
            <td>是否贷款:</td>
            <td><label for=""><input type="radio" name="loan" id="loan_Y">是</label><label for=""><input type="radio" name="loan" id="loan_N">否</label></td>
        </tr>
        <tr>
            <td>出版社:</td>
            <td><input type="text" name="press" id="press"></td> 
        </tr>
        <tr>
            <td>出版日期:</td>
            <td><input type="date" name="brith" id="brith"></td>
        </tr>
        <tr>
            <td>版次:</td>
            <td><input type="text" name="edNum" id="edNum"><input type="range" id="range" name="range"></td>     
        </tr>
        <tr>
            <td>单价:</td>
            <td><input type="text" name="money" id="money">元</td>
        </tr>
        <tr>
            <td>图书介绍:</td>
            <td><textarea name="introduction" id="introduction" cols="30" rows="10"></textarea></td>     
        </tr>
        <tr>
            <td class="sub" id="submitBtn" onclick="check()"><button>提交</button></td>
            <td class="sub"><button>取消</button></td>
        </tr>
        </table>
        </form>
    </div>
</body>

</html>

JS部分:

function check() {
    // 检验ISBN
    var isbn = document.getElementById('ISBN').value.trim();
    var isbnRegex = /^\d{1}-\d{1}-\d{1}$/;
    if (!isbnRegex.test(isbn)) {
        alert("ISBN格式不正确,请输入x-x-x格式的ISBN");
        document.getElementById('ISBN').value = "";
        document.getElementById('ISBN').focus();
        return false;
        // 如果 ISBN 格式不正确,直接返回,不再执行后续逻辑
    }

    // 检验图书名字
    var bookName = document.getElementById('bookName').value.trim();
    if (bookName.length <= 2) {
        alert("书名不能小于2个字符,书名输入错误!");
        document.getElementById('bookName').value = "";
        document.getElementById('bookName').focus();
        return false;
    }

    // 检验作者名
    var author = document.getElementById('writer').value.trim();
    if (author.length == 0) {
        alert("作者名不能为空!请重新输入!");
        document.getElementById('writer').value = "";
        return false;
    }

    // 判断单价
    var price = parseFloat(document.getElementById('money').value);
    if (price <= 10 || price >= 100) {
        alert("单价要处于【10-100】之间!");
        return false;
    }

    // 获取表单数据
    let formData = {
        ISBN: isbn,
        bookName: bookName,
        // 其他表单数据可以依次添加
        writer: author,
        type: document.getElementById('type').value,
        loan: document.querySelector('input[name="loan"]:checked').value,
        press: document.getElementById('press').value,
        brith: document.getElementById('brith').value,
        edNum: document.getElementById('edNum').value,
        money: price,
        introducation: document.getElementById('introduction').value
    };

    // 转换为 JSON 格式
    let jsonData = JSON.stringify(formData, null, 2);

    // 弹出显示
    alert(jsonData);
}

Servlet部分:

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class BookReg
 */
@WebServlet("/BookReg")
public class BookReg extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BookReg() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @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 ISBN = request.getParameter("ISBN").trim();//ISBN
		String bookName = request.getParameter("bookName").trim();//bookName
		String writer = request.getParameter("writer").trim();//writer
		String type = request.getParameter("type").trim();//type
		//String loan = request.getParameter("loan").trim();//loan
		String loan = "";
		if("on".equals(request.getParameter("loan"))) {
		    loan = "是";
		} else {
		    loan = "否";
		}

		String press = request.getParameter("press").trim();//press
		String brith = request.getParameter("brith").trim();//brith
		String edNum = request.getParameter("edNum").trim();//edNum
		String money = request.getParameter("money").trim();//money
		String introduction = request.getParameter("introduction").trim();//introduction
		
		//这个Java的servlet里的输出
		System.out.println("ISBN:"+ISBN);
		System.out.println("BookName:"+bookName);
		System.out.println("writer:"+writer);
		System.out.println("type:"+type);
		System.out.println("loan:"+loan);
		System.out.println("press:"+press);
		System.out.println("brith:"+brith);
		System.out.println("edNum:"+edNum);
		System.out.println("money:"+money);
		System.out.println("introduction:"+introduction);
		
		
		String sqlString = "insert xxx";
	    PrintWriter out0 = response.getWriter();
	    out0.write("新书注册成功");
	    System.out.println("好:前后端交互成功:sql语句为:" + sqlString);
	    out0.flush();
	    out0.close();
	}

}

其他的记得看哦哦!

关注我!爱吃鸡爪zi!!! 

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

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

相关文章

深入解析Arm架构:掌握汇编与逆向工程,提升设备安全性——蓝狐卷带你入门

写在前面 与传统的CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#xff0c;Arm架构的指令集更加简洁明了&#xff0c;指令执行效率更高&#xff0c;能够在更低的功耗下完成同样的计算任务&#xff0c;因此在低功耗、嵌…

用pyecharts的overlap绘制叠加图时,设置的颜色不起作用

问题 用pyecharts绘制叠加图时&#xff0c;如折线图上叠加散点图时&#xff0c;分别设置了自己的颜色&#xff08;三角是绿色&#xff0c;圆形是蓝色&#xff09;&#xff0c;但是渲染颜色和图例颜色不一致&#xff0c;如下图所示&#xff0c;折线颜色和散点颜色相同。 解决…

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中&#xff0c;服务包含filebeat、logstash、elasticsearch、kibana&#xff0c;其中elasticsearch使用集群的方式部署&#xff0c;所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…

VMware 配置虚拟机网络

之前需要完成的任务 &#xff08;1&#xff09;、下载和安装VMware-Workstation-Pro.exe软件&#xff0c;推荐16.0版本 &#xff08;2&#xff09;、下载centOS7镜像&#xff0c;可以在阿里云下载。 &#xff08;3&#xff09;、VM创建一个虚拟机&#xff0c;并且使用本地已下载…

IDEA配置JRebel热部署

插件仓库安装 打开IDEA&#xff0c;选择File—>Settings—>Plugins—>在右侧选择Marketplace&#xff0c; 在搜索框输入jrebel—>选择搜索结果—>点击Install JRebel激活 其中&#xff0c;Team URL可以使用在线GUID地址在线生成GUID 拿到GUID串之后&#xff…

vue2点击左侧的树节点(el-tree)定位到对应右侧树形表格(el-table)的位置,树形表格懒加载

左侧树代码 <el-tree :data"treeData" node-key"id" default-expand-all"" //节点默认全部展开:expand-on-click-node"false" //是否在点击节点的时候展开或者收缩节点:props"defaultProps" node-click"handleNodeC…

(二十五)Flask之MTVMVC架构模式Demo【重点:原生session使用及易错点!】

目录&#xff1a; 每篇前言&#xff1a;MTV&MVC构建一个基于MTV模式的Demo项目&#xff1a;蹦出一个问题&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【孤寒者】—CSDN全栈领域优质创作者、HDZ核心组成员、华为云享专家Python全栈领…

社区居民医疗健康系统 微信小程序

设计原则 本社区健康医疗APP采用 Hbuildex技术&#xff0c;使用Java语言开发&#xff0c;充分保证了系统稳定性、完整性。 社区健康医疗APP的设计与实现的设计思想如下&#xff1a; &#xff08;1&#xff09;操作简单方便、系统界面安全良好、简单明了的页面布局、方便查询相…

java-模拟的例题实战

例题实战 在实际的开发工作中&#xff0c;对字符串的处理是最常见的编程惹怒我。本题目即是要求程序对用户输入的串进行处理。具体规则如下&#xff1a; 1 把每个单词的首字母变成大写 2 把数字与字母之间用下划线字符&#xff08;_&#xff09;分开&#xff0c;使得更清晰 …

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划

下载BenchmarkSQL并使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL二、下载BenchmarkSQL三、使用BenchmarkSQL查看OceanBase 的执行计划 一、什么是BenchmarkSQL BenchmarkSQL是一个开源的数据库基准测试工具&#xff0c;可以用来评估数据库系统的性能&…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

webconfig-boot项目说明

1、前言 最近利用空余时间写了一个项目webconfig-boot 。该项目主要配置了web项目常用的一些配置&#xff0c;如统一参数校验、统一异常捕获、统一日期的处理、常用过滤器、常用注解等。引入依赖接口完成常规的web配置。 这里也是总结了笔者在项目开发中遇到的一些常用的配置…

力扣111---二叉树的最小深度(简单题,Java,递归+非递归)

目录 题目描述&#xff1a; &#xff08;递归&#xff09;代码&#xff1a; &#xff08;非递归、层次遍历&#xff09;代码&#xff1a; 题目描述&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…

【源码编译】Apache SeaTunnel-Web 适配最新2.3.4版本教程

Apache SeaTunnel新版本已经发布&#xff0c;感兴趣的小伙伴可以看之前版本发布的文章 本文主要给大家介绍为使用2.3.4版本的新特性&#xff0c;需要对Apache SeaTunnel-Web依赖的版本进行升级&#xff0c;而SeaTunnel2.3.4版本部分API跟之前版本不兼容&#xff0c;所以需要对 …

备战蓝桥杯Day27 - 省赛真题-2023

题目描述 大佬代码 import os import sysdef find(n):k 0for num in range(12345678,98765433):str1 ["2","0","2","3"]for x in str(num) :if x in str1:if str1[0] x:str1.pop(0)if len(str1) ! 0:k1print(k)print(85959030) 详…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中&#xff1f;形状Item和文本Item的插入和删除&#xff1f;连接线Item与形状Item的如何关联&#xff1f;如何绘制ShapeItem间的箭头线&#xff1f; 下…

Centos strema 9 环境部署Glusterfs9

本文档只是创建复制卷&#xff0c;分布式卷&#xff0c;分布式复制卷&#xff0c;纠删卷 操作系统 内核 角色 Ip地址 说明 CentOS Stream 9 x86_64 5.14.0-427.el9.x86_64 客户端 client 192.168.80.119 挂载存储业务机器 CentOS Stream 9 x86_64 5.14.0-427.el9.x8…

Git的介绍

导出项目依赖 # 以后项目给别人需要导出项目依赖&#xff0c;放在项目路径下&#xff0c;以后在运行项目前&#xff0c;先安装依赖 一般约定俗成都叫 requirements.txt,但是会有别的&#xff1a;req.txt | dev.txt # 两种方式&#xff1a; 1、虚拟环境所有装的第三方&…

分享6款非常炫酷的前端动画特效(附在线演示)

分享6款非常不错的项目动画特效 其中有three.js特效、canvas特效、CSS动画、SVG特效等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 Three.js 3D游戏场景动画特效 基于Three.js的HTML5 3D动画&#xff0c;这个动…

【学习】感受野

感受野&#xff08;receptive field&#xff09;是指在神经网络中&#xff0c;某一层输出的特征图上的一个像素点对应输入图像的区域大小。在深度神经网络中&#xff0c;随着网络层数的增加&#xff0c;特征图的感受野也会逐渐增大。这是因为每一层的卷积操作都会扩大感受野。 …