【Servlet学习三】实现一个内存版本的简易计算器~

这篇具有很好参考价值的文章主要介绍了【Servlet学习三】实现一个内存版本的简易计算器~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、方式1:使用form表单的形式(不推荐)

🌈1、前端代码:HTML文件

🌈2、后端代码:Calculator_form.java文件

🌈3、最终效果

二、方式2:使用ajax形式(最常用&&重点!!!)

🌈1、前端代码:HTML文件

🌈2、后端代码:Calculator_ajax.java文件

🌈3、最终效果


一、方式1:使用form表单的形式(不推荐)

🌈1、前端代码:HTML文件

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>计算器-form表单提交</title>
</head>
<body>
    <form method="get" action="calculator">
        <div style="margin-top:50Px;margin-left:40%">
            <h2>计算器</h2>
            <!-- id是给js用的,name是form表单提交时给后端用得,等于后端的key值-->
            数值1: <input id="num1" name = "num1"><p></p>
            数值2: <input id="num2" name = "num2"><p></p>
            <!-- submit是给form表单用的,ajax用button-->
            <input type = "submit" value="相加">
        </div>
    </form>
</body>
</html>

🌈2、后端代码:Calculator_form.java文件

//2、创建路由
@WebServlet("/calculator_form")
//1、创建类,继承HttpServlet
public class Calculator_form extends HttpServlet {
    /**
     * 目标:从前端拿两个参数:num1和num2,进行相加操作并将结果返回给前端
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    //生成doPost或者doGet方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    //重写doPost方法
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //0、设置返回的数据类型和编码
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        //1、从请求req中获取参数num1
        String num1 = req.getParameter("num1");
        String num2 = req.getParameter("num2");
        //2、参数的合法性校验
        if(num1==null || num1.equals("") || num2==null || num2.equals("")){
            //直接返回错误信息
            resp.getWriter().write("抱歉,参数有误");
            return;
        }
        //3、进行类型转换String-int
        int number1 = Integer.valueOf(num1);
        int number2 = Integer.valueOf(num2);
        //4、计算相加的结果
        int res = number1+number2;
        //5、将计算结果返回给前端
        resp.getWriter().write("相加结果:"+res);
    }
}

 注意:

(1)前端代码中id是给js用的,name是form表单提交时给后端用得,要设置name属性。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

(2)后端代码中:设置的编码格式是html

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

🌈3、最终效果

运行代码,获取URL地址,在网页打开.html文件地址

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

方式1:存在问题:

        计算完之后,不能再进行下一次操作了,因为采用的是form表单的提交,form表单的提交是全部提交,将之前的页面一起提交了,只能计算一次,因此并不适用现实,实际中我们采用的是局部提交的技术,也就是ajax技术,见方式2。

方式2目标:

        方式1点击提交之后,将结果显示在按钮下方,页面保持不变,方便进行下一次操作。


二、方式2:使用ajax形式(最常用&&重点!!!)

🌈1、前端代码:HTML文件

这里使用jQuery的方式,因此首先要将jQuery引入到html文件中。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

        jQuery有一个方法叫ajax,当获取到数值不为空的时候,就发送ajax到后端,前端与后端实现交互,就是 ajax实现。因此我要在ajax方法里面设置:我要提交到哪个URL里面?我要传递的参数是什么?最后返回了结果我要怎么去处理这个结果?因为是多个值,所以使用json的形式来传递,用{}实现。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp


🍈 最终完整html文件代码如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>计算器-ajax局部提交</title>
    <!-- 使用jquery方式进行ajax -->
    <!-- 在当前项目中引入jquery-->
    <script src = "jquery.min.js"></script>
</head>
<body>
    <div style="margin-top:50Px;margin-left:40%">
        <h2>计算器</h2>
        <!-- id是给js用的,name是form表单提交时给后端用得,等于后端的key值-->
        数值1:<input id="num1" name = "num1"><p></p>
        数值2:<input id="num2" name = "num2"><p></p>
        <!-- submit是给form表单用的,ajax用button-->

<!--        -------------------显示函数没有被定义-----------------------执行并不成功-->
        <input type = "button" value="相加" onclick="mysub()">
    </div>
    <script>
        // 实现按钮的函数
        
        function mysub(){
            //1、获取控件,进行非空校验
            var num1 = jQuery("#num1");
            var num2 = jQuery("#num2");
            //2、非空校验
            //没有输入任何信息
            if(num1.val().trim() == ""){//.trim()是去空格
                alert("抱歉,请先输入数值!");
                num1.focus();
                return false;
            }
            if(num2.val().trim() == ""){
                alert("抱歉,请先输入数值!");
                num1.focus();
                return false;
            }
            //3、发送ajax到后端:ajax是一个方法
            //需要设置:我要提交到哪个URL里面,我要传递的参数是什么,还有最终返回结果了我要怎么取处理。
            //多个值,所以用Json格式实现
            jQuery.ajax({
                url:"calculator_ajax",//请求地址
                method:"get",//请求方法类型--大小写都可以
                data:{//请求数据
                    "num1":num1.val(),
                    "num2":num2.val()
                },
                //success是一个方法,前面三个都是属性;这个方法接收了一个返回的参数,
                //返回的参数用res对象接收(名字是什么无所谓,反正是后端返回给前端的一个参数)
                success:function(res){
                    //规定后端发送给前端的是一个Json格式的数据{"code":200,"msg":"描述","data":xxx}
                    if(res.code == 200 && res.data == 1){
                        alert("计算的结果是:"+res.data);
                    }else{
                        alert("操作失败!"+res.msg);
                    }
                }
            });           
        }
    </script>
</body>
</html>

🌈2、后端代码:Calculator_ajax.java文件

注意点1:URL要对应

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

 注意点2:编码格式

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

 注意点3:学会Json的简单使用:objectMapper

        (下面用的HashMap,乱序,但不影响结果,只要最后有着三个属性值就好了;如果要保证有序性,用LinkedHashMap就行)。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp


🍈最终后端代码实现:Calculator_ajax.java文件

import com.fasterxml.jackson.databind.ObjectMapper;

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.HashMap;
import java.util.LinkedHashMap;

/**
 * ajax版本
 */
@WebServlet("/calculator_ajax")
public class Calculator_ajax extends HttpServlet {
    //定义成类属性,且不能被修改
    private final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //-------------------------与form形式的不同点1--------------------------
        //0、设置返回的数据类型和编码:设置为json格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("application/json;charset=utf-8");
        //1、从请求req中获取参数num1
        String num1 = req.getParameter("num1");
        String num2 = req.getParameter("num2");
        //2、参数的合法性校验
        if(num1==null || num1.equals("") || num2==null || num2.equals("")){
            //直接返回错误信息
            resp.getWriter().write("抱歉,参数有误");
        }
        //3、进行类型转换String-int
        int number1 = Integer.valueOf(num1);
        int number2 = Integer.valueOf(num2);
        //4、计算相加的结果
        int res = number1+number2;
        //---------------与form形式的不同点2-----------------------
        //5、返回json格式的对象
        //方式1:直接拼:要使用转义字符(不推荐,容易出错)
//        String jsonRes = "{\"code\":200, \"msg\":\"\", \"data\":"+res+"}";
//        resp.getWriter().write(jsonRes);
        //方式2:json工具:将一个字符串转为对象,或者将一个对象转为json字符串
        LinkedHashMap<String,Object> map = new LinkedHashMap<String, Object>();
        map.put("code",200);
        map.put("msg","成功");
        map.put("data",res);
        //返回结果
        String jsonStr = objectMapper.writeValueAsString(map);
        resp.getWriter().write(jsonStr);
     }
}

🌈3、最终效果

注意:如果出错了,F12打开控制台看报错信息。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp 然后,我们也可以对上述操作用Fiddler进行抓包观察,同样结果显示是12。

【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp


【Servlet学习三】实现一个内存版本的简易计算器~,JavaEE初阶,servlet,学习,okhttp

 文章来源地址https://www.toymoban.com/news/detail-518910.html

到了这里,关于【Servlet学习三】实现一个内存版本的简易计算器~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 制作一个简易的计算器

    1.通过UI界面封装出计算器的大致模型 进入设计页面后,左侧会有各种控件,可以将他们拖拽到你想编辑的窗口中,我们要做的是计算器,所以只用到很少几个控件,我们最主要用到Push Button这个控件来做我们计算器的按钮,lineEdit显示数字,我们可以将它拖拽到窗口,然后就

    2024年02月05日
    浏览(125)
  • JavaScript 用三种方法做一个简易计算器

    基本数据类型 / 使用对象创建 new执行过程 // 1.new构造函可以在内存中创建了一个空的对象 // 2.this就会指向刚才创建的空对象 // 3.执行构造函数里面的代码 给这个空对象添加属性和方法 // 4.返回这个新对象(所以构造函数里面不需要return)

    2024年02月06日
    浏览(55)
  • Android开发:基于Kotlin编写一个简易计算器

    本着程序员“拥抱变化”的思想,最近开始学Kotlin了。感觉还是得通过实战来入门一门新语言,所以打算写一个基于Kotlin语言的计算器,本文对开发过程以及学习Kotlin的一些知识进行了记录。 计算器的全部源码已经放到了我的Github中,需要的伙伴自取:Calculator Kotlin中文站:

    2023年04月27日
    浏览(59)
  • C++简易计算器的实现

    定义: 计算器是近代人发明的可以进行数字运算的机器。 也就是说,计算器不等同于算盘,前者能自行运算,后者只能简便计算过程,在古代,人们发明了许多计算工具,如算筹、算盘、计算尺等,随着社会的发展和科技的进步,计算工具也经历了由简单到复杂,由低级向高级的发

    2024年02月11日
    浏览(42)
  • QT简易加法计算器项目实现

    完整代码见GitHub:点击进入 在该项目中,使用了三个文件,分别是CalculatorDialog.h, CalculatorDialog.cpp, main.cpp CalculatorDialog.h:在该头文件里定义了一些成员变量和槽函数,用于实现计算器基本功能。 CalculatorDialog.cpp: CalculatorDialog 类的构造函数,用于初始化计算器对话框界面和控

    2024年02月11日
    浏览(43)
  • Java课设-百行代码实现简易计算器

    Java程序设计 工程实践 ——简易计算器的设计 院、 系 计算机与软件学院 专业 信息安全 姓 名 指导教师 2022年 6 月 11 日 目录: 一、 设计简介 2 1、 设计背景 2 2、 开发工具及环境 2 (1)开发工具及介绍 2 (2)开发环境 2 二、 相关工作 2 1、设计基础 2 2、功能需求 2 3、系统

    2024年02月04日
    浏览(75)
  • JAVA课程设计——GUI实现简易计算器

    一.设计任务及要求 任务:设计并实现一个计算器小程序 要求: 使用图形用户界面 能在键盘或鼠标上读入数据,并完成加,减,乘,除计算。 在屏幕上显示一个主菜单。 提示用户输入相应的数字键,分别执行加,减,乘,除计算功能和结束程序的功能。 二.需求分析: ​ 计算

    2024年02月12日
    浏览(42)
  • Android开发:kotlin语言实现简易计算器

    输入两个数字,可选加减乘除操作符,并计算显示对应结果 随系统切换语言 可对结果进行四舍五入操作 界面布局:activity_main.xml文件代码 字符定义:string.xml文件代码 逻辑实现:MainActivity.kt 文件代码 方法一(偷懒): 复制文件到对应位置 方法二: 1. 绘制界面 2. 编写逻辑

    2023年04月08日
    浏览(47)
  • 单片机实现简易计算器功能,附有解析与代码

    目录 首先分为根据要实现的功能来选择硬件和软件: 硬件部分 软件部分 输入部分: 计算部分: 连续计算: 源代码示例: 主函数: 键盘输入: LCD1602显示: 蜂鸣器: 延时函数: 首先我们要实现的功能有:多位显示,小数计算,连续计算,符号按错修改,, 用到LCD1602显示

    2024年02月09日
    浏览(48)
  • 简易计算器(详解用栈实现算术表达式求值)

    [问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是 正实数 ,运算符只含 加减乘除 等四种运算符,界限符只含 左右括号 如:6+15*(21-8/4)。编程利用“ 运算符优先法 ”求算术表达式的值。 [基本要求] (1)读入一个合法的

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包