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

//因为很简单,所以不采用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 errors = new HashMap();
    //实现所有的GETTER和SETTER
    public Map getErrors() {
        return errors;
    }
    public void setErrors(Map 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"%>


<html>
  <head>

    <title>My JSP 'caculator.jsp' starting pagetitle>


  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="*">xoption>
        <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


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

你可能感兴趣的:(web,java,javaweb)