//因为很简单,所以不采用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
第一次撰写,多多指教,多多包含