写个简单到不行的WEB计算器

这篇博客介绍了如何使用JavaBean和JSP实现一个简单的WEB计算器。作者在过程中遇到了JSP找不到类方法和usebean错误的问题,经过排查发现是因为未验证用户输入的数字合法性。这是一个适用于初学者理解基础javaweb开发的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//因为很简单,所以不采用MVC模式
//先写个JavaBean包

package cn.itcast.bean;


import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

public class CaculatorBean {
    //定义第一个数字
    private String firstNum;
    //定义第二个数字
    private String secNum;
    //定义运算符
    private char operator;
    //定义报错处理方法
    private Map<String,String> errors = new HashMap<String,String>();
    //实现所有的GETTER和SETTER
    public Map<String, String> getErrors() {
        return errors;
    }
    public void setErrors(Map<String, String> errors) {
        this.errors = errors;
    }

    public String getFirstNum() {
        return firstNum;
    }
    public void setFirstNum(String firstNum) {
        this.firstNum = firstNum;
    }
    public String getSecNum() {
        return secNum;
    }
    public void setSecNum(String secNum) {
        this.secNum = secNum;
    }
    public char getOperator() {
        return operator;
    }
    public void setOperator(char operator) {
        this.operator = operator;
    }
    //实现运算的方法
    public String caculate(){
        /**
         * Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。
         * 双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。
         * float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,
         * 我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。
         * 方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
         * 
         */
        BigDecimal result = null;
        BigDecimal first = new BigDecimal(firstNum);
        BigDecimal second= new BigDecimal(secNum);
        //判断用户点击的运算符
        switch(operator)
        {
        case '+':
            result = first.add(second);break;
        case '-':
            result = first.subtract(second);break;
        case '*':
            result = first.multiply(second);break;
        case '/':
            if(secNum.equals("0")){
                System.out.println("被除数不能为0.。。");
            }
                result = first.divide(second);

            break;
        case '%':
            result = first.remainder(second);break;
        default:
            break;
        }
        return result.toString();

    }
    //定义报错的处理方法
    public boolean vaildate(){
        boolean flag = true;
        //这是正则表达式,用于判断用户输入的格式有没有错误
        Pattern p =Pattern.compile("\\d+");
        if(firstNum==null||"".equals(firstNum)){
            errors.put("firstNum","第一个运行数字不能为空");
            flag = false;
        }else if(!p.matcher(firstNum).matches()){
            errors.put("firstNum", "只能输入数字");
            flag = false;
        }
        if(secNum==null||"".equals(secNum)){
            errors.put("secNum","第二个运行数字不能为空");
            flag = false;
        }else if(!p.matcher(secNum).matches()){
            errors.put("secNum", "只能输入数字");
            flag = false;
        }

        return flag;


    }

}

//接下来是JSP页面
用来显示界面和传入业务逻辑
当然,这是很LOW的方法,只适合简单的实现

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

    <title>My JSP 'caculator.jsp' starting page</title>


  </head>

  <body>
  <jsp:useBean id="caculator" class="cn.itcast.bean.CaculatorBean" />

  <jsp:setProperty property="*" name="caculator"/>
 <%
    if(caculator.vaildate()){
  %>
    <font color="green">运算结果

    <jsp:getProperty property="firstNum" name="caculator"/>
    <jsp:getProperty property="operator" name="caculator"/>
    <jsp:getProperty property="secNum" name="caculator"/>
    =<%=caculator.caculate() %>    
  </font>
  <%
    }else{
        Map<String,String>errors = caculator.getErrors();
        pageContext.setAttribute("errors",errors);
    }

   %>
    <form action="" method="post">
    请输入第一个运算数:<input type="text" name="firstNum"><font color="red">${errors.firstNum}</font><br/>
    <select name="operator">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">x</option>
        <option value="/">÷</option>
    </select><br/>
    请输入第二个运算数:<input type="text" name="secNum"><font color="red">${errors.secNum}</font><br/>
    <input type="submit" value="提交"><br/>
    </form>

  </body>
</html>

写的过程中遇到的问题:
1. JSP报找不到类方法的错误
2. JSP usebean报找不到类的错误
解决方法:
观察了老半天以为是JAR包冲突或者
方法逻辑不严
其实是没先用IF判断用户输入的数字是否合法
就先调用了JSP


第一次撰写,多多指教,多多包含

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值