利用servlet实现对书籍书名、单价、数量等信息的添加,计算总价

1.题目要求

利用servlet实现对书籍书名、单价、数量等信息的添加,计算总价。

要求:输入两次表单信息,在一个成功返回的页面里面显示两次的数据。

2.Book实体类

package com.hjj.sevletgk.hw7.book;

/**
 * @author:嘉佳 Date:2023/10/8 15:16
 **/

public class Book {
    private double price;
    private int num;
    private String bookName;
    private double totalPrice;

    public Book(){

    }

    public Book(double price, int num, String bookName) {
        this.price = price;
        this.num = num;
        this.bookName = bookName;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public double getTotalPrice() {
        return this.price*this.num;
    }

    public void setTotalPrice(double totalPrice) {
        this.totalPrice = totalPrice;
    }

}

3.sevlet

package com.hjj.sevletgk.hw7.booksevlet;

import com.hjj.sevletgk.hw7.book.Book;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/book")
public class BookServlet extends HttpServlet {
    private List<Book> bookList=new ArrayList<>();

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String bookName=req.getParameter("bookName");
        double price = Double.parseDouble(req.getParameter("price"));
        int num = Integer.parseInt(req.getParameter("num"));

        // 把录入的信息添加到列表中
        Book book = new Book(price,num,bookName);
        bookList.add(book);

        // 计算总价
        int totalNum=0;
        double totalPrice = 0;
        for (Book b : bookList) {
            totalNum += b.getNum();
            totalPrice += b.getTotalPrice();
        }

        req.setAttribute("bookList", bookList);
        req.setAttribute("totalPrice", totalPrice);
        req.setAttribute("totalNum", totalNum);

        // 转发到结果页面
        RequestDispatcher dispatcher = req.getRequestDispatcher("hw7/result.jsp");
        dispatcher.forward(req, resp);
    }
}

4.jsp

(1) order.jsp
<%--
  Created by IntelliJ IDEA.
  User: ALASIJIA
  Date: 2023/10/8
  Time: 15:11
  To change this template use File | Settings | File Templates.
--%>
<%@page contentType="text/html;charset=UTF-8"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head>
    <meta charset="UTF-8">
    <title>信息录入</title>
</head>
<body>
<h2>请输入购书信息</h2>
<form method="post" action="${pageContext.request.contextPath}/book" >
    <label for="bookName">书名</label>
    <input type="text" name="bookName" id="bookName"  required><br/>
    <label for="price">单价</label>
    <input type="text" name="price" id="price" required><br/>
    <label for="num">数量</label>
    <input type="text" name="num" id="num" required><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>
(2) result.jsp 
<%--
  Created by IntelliJ IDEA.
  User: ALASIJIA
  Date: 2023/10/8
  Time: 15:09
  To change this template use File | Settings | File Templates.
--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%@page pageEncoding="UTF-8" %>
<%@page import="com.hjj.sevletgk.hw7.book.Book" %>
<%@ page import="java.util.List" %>
<html>
<head>
    <title>信息查看</title>
    <meta charset="UTF-8">
    <style>
        h2 {
            text-align: center;
        }

        table {
            /* 合并边框 */
            border-collapse: collapse;
            height: 80px;
            /* 居中 */
            margin: 0 auto;
        }

        th {
            /* 内边距 */
            padding: 5px 20px;
        }

        table, th, td {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
<%--
id:指定实例化的 JavaBean 对象的名称
class:指定要实例化的 JavaBean 对象的类的全类名
--%>
<jsp:useBean id="Book" class="com.hjj.sevletgk.hw7.book.Book"/>
<jsp:setProperty name="Book" property="*"/>
<h2>商品总价</h2>
<%
    request.setCharacterEncoding("UTF-8");
%>

    <table>
        <tr>
            <th>书名</th>
            <th>价格</th>
            <th>数量</th>
            <th>总价</th>
        </tr>
        <% for (Book book : (List<Book>) request.getAttribute("bookList")) { %>
        <tr>
            <td><%= book.getBookName() %></td>
            <td><%= book.getPrice() %></td>
            <td><%= book.getNum() %></td>
            <td><%= book.getTotalPrice() %></td>
        </tr>
        <% } %>
        <tr>
            <%--        该单元格要横跨 2 列--%>
            <td colspan="2"><b>总计:</b></td>
            <td><b>商品总数:</b><%= request.getAttribute("totalNum") %></td>
            <td><b>总价:</b><%= request.getAttribute("totalPrice") %></td>
        </tr>
    </table>
</body>
</html>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOME/IP 协议介绍(三)参数和数据结构的序列化

参数和数据结构的序列化 序列化是基于接口规范定义的参数列表。为了允许服务接口的迁移&#xff0c;反序列化&#xff0c;代码应忽略附加在先前已知的参数列表末尾的参数&#xff1b;也就是说&#xff0c;忽略在用于生成或参数化反序列化代码的接口规范中未定义的参数。 接口…

python 视频硬字幕去除 内嵌字幕去除工具 vsr

项目简介 开源地址&#xff1a;https://github.com/YaoFANGUK/video-subtitle-remover Video-subtitle-remover (VSR) 是一款基于AI技术&#xff0c;将视频中的硬字幕去除的软件。 主要实现了以下功能&#xff1a; 无损分辨率将视频中的硬字幕去除&#xff0c;生成去除字幕后…

本地部署企业邮箱,让企业办公更安全高效

随着信息化时代的到来&#xff0c;企业邮箱几乎成了企业办公的标配&#xff0c;承载着企业业务往来和办公协同的重要职能。基于安全性、个性化需求、系统集成等方面的需要&#xff0c;许多企业选择本地部署企业邮箱&#xff0c;本地化部署不仅能有效保障企业信息安全的同时&…

Spring6学习笔记01

一、课程简介 Spring框架是一款极其优秀的轻量级开源框架&#xff0c;为了解决企业应用开发的复杂性而出现。Spring框架的用途不仅仅限于服务器端的开发&#xff0c;从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分Java应用都可以从Spring中受益。Spring框架凭借其…

机器人制作开源方案 | 晾衣收纳一体机器人

一、作品简介 作者&#xff1a;仓天赐 黄云超 吴正乐 高骏 代思旭 单位&#xff1a;泰州学院 指导老师&#xff1a;宋向前 李杨作者&#xff1a;仓天赐 黄云超 吴正乐 高骏 代思旭 单位&#xff1a;泰州学院 指导老师&#xff1a;宋向前 李杨 与智能家居系统含义近似的…

【Axure高保真原型】树切换动态面板案例

今天和大家分享树切换动态面板的原型模板&#xff0c;点击树的箭头可以打开或者收起子节点&#xff0c;点击最后一级人物节点&#xff0c;可以切换右侧面板的状态到对应的页面&#xff0c;左侧的树是通过中继器制作的&#xff0c;使用简单&#xff0c;只需要按要求填写中继器表…

【广州华锐互动】智能楼宇3D数字化展示,实现对建筑物的实时监控和管理

随着科技的不断发展&#xff0c;人们对于生活品质的要求也在不断提高。在这个信息爆炸的时代&#xff0c;如何将复杂的数据以直观、生动的方式呈现给用户&#xff0c;已经成为了一个重要的课题。智能楼宇3D数字化展示作为一种新型的建筑科技&#xff0c;正逐渐成为行业的新宠&a…

【QML】Qt和QML获取操作系统类型

1. Qt获取系统类型 //方法 QSysInfo::productType()//举例&#xff1a; if(QSysInfo::productType() "windows") {qDebug() << "windows system"; }官方说明&#xff1a; [static] QString QSysInfo::productType() Returns the product name of …

IntelliJ Idea 撤回git已经push的操作

最初的样子 现在的样子 解决方案 第一步&#xff0c;commit到本地撤回&#xff1a; 打开提交历史记录&#xff0c;选中回退的版本右键&#xff0c;点击“Reset Current Branch to Here…”,然后选中“Mixed”&#xff0c;点击Reset后&#xff0c;之前commit的代码会在本地显…

黑豹程序员-架构师学习路线图-百科:Knife4j API接口文档管理

文章目录 由来&#xff1a;接口文档第一代&#xff1a;Swagger第二代&#xff1a;Knife4j界面 由来&#xff1a;接口文档 古老编程是一个语言前后端通吃&#xff0c;ASP、JSP、PHP都是如此。 但随着项目规模变大&#xff0c;项目团队也开始壮大&#xff0c;岗位职责开始细分&a…

【STM32】定时器

systick定时器&#xff1a; 【STM32】Systick定时器-CSDN博客 0.通用定时器框图 1.时钟源 2.控制器 3.输入捕获 计数器实际上是与比较寄存器的影子寄存器进行比较的。 4.输出比较 1.STM32的定时器学习要点 参考手册 STM32F1xx中文参考手册.pdf 林何/STM32F103C8 - 码云 -…

Leetcode-394 字符串解码(不会,复习)

此题不会&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 题解思路&#xff1a;元组思想&#xff1a;数字[字符串]&#xff0c;每次遇到中括号意味着要重复数字次字符串…

Web APIs——综合案例

1、学生就业统计表 2、渲染业务 根据持久化数据渲染页面 步骤&#xff1a; ①&#xff1a;读取localstorage本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组[]为了测试效果&#xff0c;可以先把initData存入本地存储看效果 ②&…

Oracle11g for centos7

准备工作 x86 centos7 oracle11G 环境搭建 配置好虚拟机&#xff0c;网络通畅&#xff0c;建议最少3G内存。 安装依赖 yum install binutils compat-libstdc-33 glibc* ksh gcc gcc-c libgcc libstdc* libaio libaio-devel libXext libX11 libXau libxcb libXi make sy…

2023第六届泰迪杯数据分析,第五届泰迪杯数据分析技能赛B题源码图片分享

需要B题源码以及第六届带队”指导“请私信本人&#xff0c;团队包含技能赛双一等&#xff0c;数学建模省一&#xff0c;泰迪杯挖掘国一&#xff0c;研究生队友。 去年一等作品可视化图如下&#xff0c;私信获取源码

static关键字的三种用法

在C语言中&#xff0c;关键字"static"可以用于不同的上下文&#xff0c;具有不同的作用。以下是"static"在C语言中的主要作用&#xff1a; 1. 静态变量&#xff08;Static Variables&#xff09;&#xff1a; 在C语言中&#xff0c;使用static关键字来声明…

Java算法(五):手写数组逆置API方法,实现数组逆置。 while实现 for循环实现

Java算法&#xff08;五&#xff09; while 循环实现 需求&#xff1a; 已知一个数组&#xff0c;arr {11, 22, 33, 44, 55};使用程序实现把数组中的元素交换位置。 交换后的数组为 arr {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。 代码示例 package com.…

JS 处理文档选择和范围创建【createRange | getSelection】

介绍 1、const selection window.getSelection(); 说明&#xff1a; 1、用于获取用户当前文档选择的对象&#xff1b; 2、它返回一个 Selection 对象&#xff0c;该对象代表了用户选择的文本范围&#xff08;可以包含一个或多个范围&#xff0c;因为用户可以同时选择多个不相…

YOLO目标检测——红绿灯检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;红绿灯检测数据集在自动驾驶、交通安全监控、智能交通系统、交通流量监测和驾驶员辅助系统等领域都有广泛应用的潜力数据集说明&#xff1a;红绿灯检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有国内红绿灯…

Android:OkHttp同步请求和异步请求

一、前言 网络请求之前工作中用到的是post请求&#xff0c;然后了解之后发现请求的种类还有很多种。下面着重讲到是get和post的同步请求和异步请求。 二、具体内容 1.Okhttp的特点&#xff1a; 支持Http/2并允许对同一主机的所有请求共享一套接字&#xff1b;如果非HTTP/2&…